STM32 keil uvision3 MDK 到 keil uvision4 MDK的
版本转换可能会出现的问题小结
这是自己在学习原子的stm32 mini开发板新建RVMDK工程所遇到的问题的一个简单总结。自己新手一枚,本文档仅针对于刚入门学习新建RVMDK工程的初学者,老手请自行略过。写此文档一方面是加深自己对keil工程建立的理解,另一方面是为了帮助在这方面遇到问题的初学者少走弯路。
作为一个初学者,遇到的问题很多,尤其在新建工程就遇到各种问题,编译器的英文提示,虽然都认识,但自己并不知道该如何下手去解决。这种心情,极度的让人心里不爽,说多了都是泪…
小结正式开始->
先声明本人使用的keil版本。低版本的是MDK3.80A,高版本的是MDK4.70A。
原子提供的例程可以在低版本的MDK3.80中使用,也可以在高版本的4.70中使用。关于这两个
版本的转换问题,在原子的论坛说的非常清楚,网址是www.openedv/posts/list/10955.htm
按照教程转换后,有可能会出现的问题是:编译器错误提示STM32_TEST.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f10x_md.o).
造成这个问题的原因原子也解释的非常清楚,网址是www.openedv/posts/list/3010.htm
原子没有详细解释为什么会出现这个问题,这里我按照自己的理解解释一下。
出现这个问题是加载启动文件的问题。原子的例程中用的启动文件是STM32F10x.s 而我们新建keil工程时,选择相应的芯片型号后,MDK编译器错误会弹出一个对话框,问你是否加载启动代码到当前工程下面,如果我们选择是,MDK就把启动代码加入到了我们的工程下面。这个加载的启动代码,我所用的MDK默认加载的都是startup_stm32f10x_md.s这个启动文件。注意:这个启动文件,和原子例程中加载的启动文件是不同的。原子的例程中加载的启动文件是STM32F10x.s,我们新建工程默认加载的是startup_stm32f10x_md.s。
STM32F10x.s在安装目录D:\Program Files\Keil\ARM\Startup\ST下,startup_stm32f10x_md.s则默认加载。
这两个不同的启动文件的区别在于:
startup_stm32f10x_md.s文件
STM32F10x.s文件
就是因为这个地方的不同,编译的时候才会出现STM32_TEST.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f10x_md.o)这个错误提示。
解决这个问题的方法原子描述的非常清楚,网址是www.openedv/posts/list/3010.htm
把以下三句注释掉即可
IMPORT SystemInit
LDR R0, =SystemInit
BLX R0
如图:
这样,问题就算解决了。我这里只是把过程简单的捋顺了一下,非常感谢提供解决方法的原子以及各位网友。希望我这个简答的解释能对初学者提供点帮助,祝愿一起进步。
欢迎交流,QQ 470599357
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论