本文主要是介绍【单片机】STM32 axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f10x_md.o),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 先说结论
- 说说详细经过
先说结论
assembling startup_stm32f10x_md.s...
linking...
..\OBJ\test.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f10x_md.o).
Not enough information to list image symbols.
Finished: 1 information, 0 warning and 1 error messages.
"..\OBJ\test.axf" - 1 Error(s), 2 Warning(s).
需要改写启动文件。
启动文件选取是根据flash大小来的:https://qq742971636.blog.csdn.net/article/details/132215006
这么改就可以了:
说说详细经过
我要写一个stm32f103的程序,是基于寄存器开发的。
官网的文件 STM32F10x_StdPeriph_Lib_V3.5.0.rar
里面是包含库函数如何开发的,在这个路径你会找到所有启动文件:
我的芯片是STM32F103RBT6,选芯片:
改写定义:
官网的启动文件就需要注释掉那几句话,或者自己外部定义一个SystemInit函数,我选择注释掉。
这三句汇编指令是用于STM32单片机的Keil开发环境中的代码片段。它们用于初始化系统并跳转到初始化函数。
-
;IMPORT SystemInit
:这是一个注释行,指示代码库应该导入名为 “SystemInit” 的函数。该函数通常用于系统的初始化设置,如时钟配置、外设初始化等。 -
;LDR R0, =SystemInit
:这是一条汇编指令,将名为 “SystemInit” 的函数的地址加载到寄存器 R0 中。这将使 R0 包含 “SystemInit” 函数的地址,以便后续的跳转。 -
;BLX R0
:这是一条分支并链接指令,它将跳转到 R0 寄存器中存储的地址,并在跳转之前将返回地址保存到链接寄存器 LR 中。这实际上是一个函数调用指令,它将执行 “SystemInit” 函数,并且在函数返回时,程序将从保存在 LR 中的地址处继续执行。
总的来说,这三句指令的目的是从地址存储在 R0 中的 “SystemInit” 函数开始执行,以完成系统的初始化过程。
这篇关于【单片机】STM32 axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f10x_md.o)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!