Я хочу узнать о программировании STM32 без готового стартового кода и ссылок, чтобы улучшить мое понимание этих важных шагов и не зависеть от автоматической генерации кода ST. Я использую цепочку инструментов — Arm-none-eabi-gcc. В настоящее время у меня возникли проблемы с созданием собственного компоновщика.
Я создал проект через STM32Cube, который мигает светодиодом на моей плате. Я смог убедиться, что код работает со сценарием компоновщика, предоставленным ST. Сейчас я только заменяю скрипт компоновщика, больше ничего не меняя в коде. После привязки и прошивки .elf светодиод больше не моргает, хотя ни предупреждений, ни ошибок не получаю. Моя идея заключалась в том, чтобы сравнить рабочий файл .elf с моим нерабочим файлом .elf. Я использовал Arm-none-eabi-objdump и readelf -a, но быстро понял, что у меня пока нет возможности оценить различия и, следовательно, понять, что я сделал не так. Каковы хорошие способы/практики сравнения файлов .elf? Стоит ли мне взглянуть на разделы, на функции, на bss-данные... Наверное, я сейчас немного перегружен.
Если необходимо: Вот как я называю руку -none-eabi-gcc:
arm-none-eabi-gcc -Wall -g3 -O0 -Wl,-Map=debug_link_custom.map -mcpu=cortex-m3 -mfloat-abi=soft -mthumb --specs=nosys.specs -fstack-usage -T link_custom.ld -I Core/Inc -I Drivers/STM32F1xx_HAL_Driver/Inc -I Drivers/CMSIS/Device/ST/STM32F1xx/Include -I Drivers/CMSIS/Include -I Drivers/CMSIS/Device/Include startup_custom.c interrupt_handlers.c Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c Core/Src/system_stm32f1xx.c Core/Src/main.c -o blinky_custom_link.elf
А это мой компоновщик:
ENTRY(reset_handler)
MEMORY
{
FLASH (RX) : ORIGIN = 0x08000000, LENGTH = 32k,
SRAM (RWX) : ORIGIN = 0x20000000, LENGTH = 10k
}
SECTIONS
{
. = ORIGIN(FLASH);
.init_vec :
{
KEEP(*(.init_vec))
. = ALIGN(4);
} >FLASH
.text :
{
*(.text)
. = ALIGN(4);
} >FLASH
.rodata :
{
*(.rodata)
. = ALIGN(4);
} >FLASH
.data :
{
*(.data)
. = ALIGN(4);
} >FLASH
.bss :
{
__bss_start__ = .;
*(.bss)
. = ALIGN(4);
__bss_end__ = .;
} >SRAM
}
Подробнее здесь: https://stackoverflow.com/questions/786 ... er-outputs
Практика оценки различных результатов компоновщика ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Практика оценки различных выходных данных компоновщика кода STM32 [закрыто]
Anonymous » » в форуме C++ - 0 Ответы
- 15 Просмотры
-
Последнее сообщение Anonymous
-