很久以前就想用c++来写嵌入式,特别是有时在写界面的时候.一年多来的不断GOOGLE,网上仍然还是只有那几篇文章,经过不断的尝试后都以失败告终.今天又得写界面了,在写各种绘制函数的过程中,非常想用C++的重载...
所以又开始疯狂的搜索及尝试,终于,经过一天的努力,成功编译通过,并且很完美....很纯的C++
步骤:
- 将STM32库的源文件中的.c文件全改为.cpp,并去掉对应头文件中的extern "C",注意还有下面的那个"}".(不是必须,只是为了上面说的很纯的c++,:) ).
- 打开system_stm32f10x.h头文件(注意是头文件),在void SystemInit(void);前加上extern "C" ,提示编译器按照C的方式来办事.(加这个的原因是因为第一步,如果在第一步中你没有去掉#ifdef __cplusplus extern "C" { #endif 的话,这一步就不用了),其实主要是因为如果按照C++方式来编译这个函数的话,因为编译后的函数名字原因,会导致启动文件找不到这个函数,而且编译的时候会弹出找不到符号什么的错误导致编译不过.
- 你完全可以在这时将上面的文件编译为一个库.(不想麻烦的话跳过这步)
- 把stm32f10_it.c改为stm32f10_it.cpp,并且保留stm32f10_it.h头文件中的extern "C".(保留stm32f10_it.h里的extern "C" 的原因:因为启动文件里保存了所有中断函数的入口,如果不按C方式编译的话,程序将找不到中断函数,也就进不了中断了)
- OK,现在你的所有工程文件都可以是CPP了,除了system_stm32f10x.h和stm32f10_it.h这两个头文件里有extern "C"外,其它的都是很纯的C++文件了.(注意:前面加了extern "C"只是让编译器按照C方式编译,并不影响我们在其中使用C