警告:找不到条目符号Reset_Handler

时间:2018-08-17 23:45:58

标签: c linker

该错误的完整摘要如下:

Info: Internal Builder is used for build
arm-atollic-eabi-gcc -o test.elf main.o stm32f4xx_it.o system_stm32f4xx.o -T../Debug_STM32F401VC_FLASH.ld -specs=nosys.specs -static -Wl,-cref,-u,Reset_Handler -Wl,-Map=test.map -Wl,--defsym=malloc_getpagesize_P=0x80 -Wl,--start-group -lc -lm -Wl,--end-group -specs=nano.specs 
c:/program files (x86)/atollic/truestudio for stm32 9.0.1/armtools/bin/../lib/gcc/arm-atollic-eabi/6.3.1/../../../../arm-atollic-eabi/bin/ld.exe: warning: cannot find entry symbol Reset_Handler; defaulting to 08000000
main.o: In function `main':
C:\Users\Deepayan\Atollic\TrueSTUDIO\STM32_workspace_9.0\test\Debug/..\main.c:26: undefined reference to `TM_USART_Init'
C:\Users\Deepayan\Atollic\TrueSTUDIO\STM32_workspace_9.0\test\Debug/..\main.c:29: undefined reference to `TM_USART_Puts'
C:\Users\Deepayan\Atollic\TrueSTUDIO\STM32_workspace_9.0\test\Debug/..\main.c:33: undefined reference to `TM_USART_Getc'

我们应该在哪里指定重置处理程序?谢谢。

3 个答案:

答案 0 :(得分:1)

处理程序在汇编程序启动文件中定义。例如STM32F303xe系列uC的startup_stm32f303xe.s。

您的项目配置不正确,并且缺少重要文件。

答案 1 :(得分:1)

我在reset-handler上遇到了同样的问题。 由工具链未编译startup.s文件引起。 Eclipse工具链没有自动包含它,因为它仅在文件类型为S而不是s时才接受汇编文件。因此,解决方法是将startup.s重命名为startup.S。

答案 2 :(得分:1)

处理程序在汇编程序启动文件中定义,该文件由 STM32CubeIDE 或 STM32CubeMX 自动生成。该文件位于项目根目录下名为“Startup”的文件夹中。它以您的 MCU 命名,例如 startup_stm32f303xe.s、startup_stm32l476rgtx 等。

警告“找不到入口符号 Reset_Handler”意味着启动文件是 1. 已损坏、2. 丢失或 3. 未包含在您的构建中。要修复情况 1 和 2,只需从 STM32CubeIDE 或 STM32CubeMX 重新生成代码。

案例 3 更有趣。在代码生成时,STM32CubeIDE 和 STM32CubeMX 有时会将“Startup”文件夹标记为“Exclude from build”。更糟糕的是,该文件夹没有“排除”图标,因此没有明显的方法可以注意到它。因此,您需要右键单击“Startup”文件夹,转到“C/C++ Build”并取消选中“Exclude resource from build”复选框。这个问题似乎是随机出现的,通常是从其他项目复制而来的项目。