赞
踩
一个工程是很多驱动文件的集合,底层驱动文件一般使用c语言来编写,但是一般数据封装和功能实现使用c++开发会更加方便。
所以在工程中使用c语言和c++混合编程是非常又必要的。
第一步先设置一下keil的c++编译环境,只需设计下面一步即可。
- a.h文件:
- #ifndef _A_
- #define _A_
-
- void funA();
-
- #endif
-
- a.c文件:
- #include "a.h"
-
- void funA()
- {
-
- }
-
- b.h文件:
- #ifndef _B_
- #define _B_
- class B
- {
- public:
- void funB();
-
-
- }
-
- #endif
- b.cpp文件:
- #include "b.h"
- #include "a.h"
- void B::funB()
- {
- funA();
- }
-
- 上面2文件是cpp文件里面调用了c文件的函数,这样显然是行不通的。
- 我们需要把要调用的函数定义和声明的地方添加 extern “C”
- a.h文件:
- #ifndef _A_
- #define _A_
-
- extern “C” void funA();
-
- #endif
-
- a.c文件:
- #include "a.h"
-
- extern “C” void funA()
- {
-
- }
-
- 这样cpp文件去调用c文件的函数就没有问题了,当然在c文件中去使用cpp文件的对象也是ok的。
- c.h文件:
- #ifndef _C_
- #define _C_
-
- extern “C” void funC();
-
- #endif
-
- c.c文件:
- #include "c.h"
- #include "b.h"
- extern “C” void funC()
- {
- B a;
- a.funB();
- }
-
- main函数
-
- #include "b.h"
-
- void main()
- {
- B a;
- a.funB();
- }

2018-1-5结
到这里kiel中的c和c++混合编程完成
不过最近我发现了一个bug,那就是stm32的定时器用不了,一用程序就会死掉。目前还不知道是什么原因。
2018-1-6结
结果寻找原因和验证,发现是因为中断函数使用c++编译时无法被找到的,所有导致中断函数指针为不可描述的初始地址
导致程序无法执行(死机)。需要在中断函数前加上 extern "C" 即可。
2018-1-9结
使用c++编译,所有的中断函数都需加上 extern "C"
2018-1-9结
使用c++编译,所有c文件调用的c函数都需加上 extern "C"
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。