历史上的今天
今天是:2024年09月26日(星期四)
2019年09月26日 | 关于keil中的c语言和c++的混合编程
2019-09-26 来源:eefocus
c语言编程简单,但是对于编写面向对象来说,实在是不方便。
一个工程是很多驱动文件的集合,底层驱动文件一般使用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"
上一篇:STM8中GPIO的12种模式
史海拾趣
|
给做射频朋友们推荐款微型低功耗可过日本电波法认证的ASK发射模块 工作电压:3V(2.4-3.6V) 工作电流:14mA 发射强度:10dBm 发射频率:315MHz、433MHz、390MHz 发射天线:18-25mm 工作温度:-20-- +85℃… 查看全部问答> |
|
在wince开发程序遇到了问题,个人判断应该是unicode 编码问题 在wince开发程序遇到了问题,个人判断应该是unicode 编码问题,比如有如下问题; CString a(\"$ABCDE\"); 个人认为a.left(6)应该是=\"$ABCDE\",结果返回值是\"$\",难道CString 不支持unicode?,left函数参数不应该是字符数量吗? 另外希望本人自己 ...… 查看全部问答> |
|
首先,我用kmalloc(30*sizeof(char),GFP_DMA)分配了两段存储空间,分别作为源地址和目的地址,就是想要通过dma方式把源地址的数据传送到目的地址。 我采用的是信道0,设置了其相应寄存器, (源地址和目的地址寄存器的值是通过 virt_to_phys(mem) ...… 查看全部问答> |
|
请问Altium Designer 6的library里面找不到intel的8031或者8051怎么办 请问Altium Designer 6的library里面找不到intel的8031或者8051怎么办,是去下载个元件库吗???能不能给个有效的链接,,谢谢了.… 查看全部问答> |
|
我用MAX436对信号进行处理 MAX436的资料看了,但实际上用的时候和理论上相反 想请教一下高手来帮助下 我是按照MAX.PDF文件里的图12那图连接方法,各个参数是与图13的那些参数一样 但出来的信号时衰减的啊 而且,我调节RL,信号的幅值在中心幅 ...… 查看全部问答> |
|
本人在大学学习期间曾经学习过电源设计课程,但是相对于TI公司的“易电源”产品,在没有大量实践经验积累的基础上是很难设计出一款合格的电源的。TI公司所提供的该系列产品,从硬件到软件,使我们可以设计出符合电磁干扰、散热、大电流、高电压等要 ...… 查看全部问答> |




