代码改变世界

使用MDK编译stm32程序中的错误

2012-03-23 09:27  上帝之骰  阅读(586)  评论(0编辑  收藏  举报

最近调试stm32f103的usb接口,因为库文件比较多,编译时出了挺多错误,一些错误是以前没有发现,由于新添加库文件引起冲突才浮出水面。

错误1:提示s8等类型重定义

  这是由于未正确包含库文件,或者包含了错误的库文件造成的。我现在用的stm32官方库文件版本为3.3.0,而MDK4中包含的则是2.0.1,如果在工程目录中没有添加正确的库文件地址,则编译器将到默认目录下寻找,也就是使用MDK4中的旧版本库文件,这样冲突就无可避免了。

  另一个可能的原因是包含头文件时候使用#include "" 和 <> 的区别,前者是先查找当前工作目录,再搜索系统目录,后者则相反。至于搜索系统目录的过程则是由mdk编译器决定的了。只是猜想,未经验证,实在不想翻uVision的说明文档了。

 

错误2:Undefined symbol xxx

     一般是由于没有包含相应的头文件造成的

 

错误3:变量声明位于可执行部分之后

  用惯了c++的人可能很习惯随手定义变量的方便,即便是c99标准也支持这一特性,但是mdk默认是不支持c99标准的,如果需要启动,可以使用编译器选项--c99启动。

 

其他错误还会随时整理进来。