警告:找不到入口符号 Reset_Handler

Posted

技术标签:

【中文标题】警告:找不到入口符号 Reset_Handler【英文标题】:warning: cannot find entry symbol Reset_Handler 【发布时间】:2019-01-25 00:11:03 【问题描述】:

错误的完整总结如下:

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'

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

【问题讨论】:

你的代码在哪里? 【参考方案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”。更糟糕的是,该文件夹没有“排除”图标,因此没有明显的方法可以注意到它。因此,您需要右键单击“启动”文件夹,转到“C/C++ 构建”并取消选中“从构建中排除资源”复选框。这个问题似乎是随机出现的,通常是从其他项目复制的项目。

【讨论】:

案例 3 适合我!右键单击包含 startup_stm32l071cbtx.s 文件的文件夹,并删除不需要的复选标记“从构建中排除资源”有帮助。【参考方案2】:

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

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

【讨论】:

Reset_Handler 问题现已得到解决。但是“未定义的引用”问题仍然存在。我在与 main() 相同的目录中的 .h 文件中定义了这 3 个函数。 您不要将目标文件与这些函数链接起来。 TM 函数在另一个需要编译和链接的 C 文件中 “未定义引用”问题已解决。令我沮丧的是,现在 Reset_Handler 问题再次作为警告出现。 @db18 IMO DIY 项目目前对你来说太难了。创建多维数据集项目并将其导入。它将解决所有问题,您将自动生成所有 makefile google.com/…【参考方案3】:

我在重置处理程序方面遇到了同样的问题。 由工具链未编译 startup.s 文件引起。 Eclipse 工具链没有自动包含它,因为它只在文件类型为 S 而不是 s 时才使用程序集文件。所以修复方法是将 startup.s 重命名为 startup.S。

【讨论】:

对我来说,只有这个答案的第一部分有效:工具链没有编译它。名称更改没有帮助,但是在重命名时,我注意到了不需要的复选标记“从构建中排除资源”。删除复选标记有帮助。【参考方案4】:

检查程序集启动文件是否位于标有蓝色圆圈图标且内部带有字母 C 的文件夹中。此标记表示此文件夹已添加到项目的已知源位置,构建器将检查这些目录以查找要翻译/编译的源文件。为此,请转到项目设置 -> C/C++ 常规 -> 路径和符号;在 Source Locations 选项卡中单击 Add Folder,在显示项目文件夹的浏览对话框中选择包含要构建的源文件(C 和程序集)的文件夹。单击确定并应用新设置。至少它对我有用

【讨论】:

以上是关于警告:找不到入口符号 Reset_Handler的主要内容,如果未能解决你的问题,请参考以下文章

未知的警告来源:“找不到虚拟表的链接器符号...”

GDB 警告:在 0x7ffff7ffd000 添加的符号文件系统提供的 DSO 中找不到可加载部分

iOS5 无法读取 Riven.bundle 的符号(找不到文件)

如何在 webpack 中正确注入 app 元素? - 接收 [Vue 警告]:找不到元素:#app

App Bundle 包含本机代码,我找不到调试符号 .zip

模块qtcore.dll已经加载,但找不到入口点怎么解决