自學(xué)單片機(jī)以來书聚,使用頻率最高的是Keil扬霜,但是后面學(xué)了MFC处嫌,特別希望MFC的代碼能夠無縫移植到單片機(jī)里,所以就研究了一下Keil環(huán)境下的C++編程方案偎球,下面是我總結(jié)的要點(diǎn):
Keil STM32 C++混合編程要點(diǎn)
1. 文件名必須是.CPP和.h?
2. .h文件中要增加如下代碼:
#ifndef __LEDTASK_H#define __LEDTASK_H#ifdef? __cplusplusextern"C"{#endif#include "stm32_led.h"voidled1_task? (void*pdata);#ifdef? __cplusplus}#endif#endif
3. 調(diào)用.cpp文件中資源時(如類洒扎,函數(shù)等),那個文件也必須是.cpp文件衰絮。即.cpp文件里才能調(diào)用C++語法的程序?
4. –C99要去掉?
其實到最后袍冷,我是放棄了這種C++混合編程的,一開始非常想這樣做猫牡,這樣我的那部分C++代碼就可以無縫移植到MFC上了胡诗,后來Keil也編譯通過了,但是由于上述條件的束縛(第一條OK,第二條也OK煌恢,第3條有束縛骇陈,即別人想嵌入我的代碼,必須也要是cpp文件瑰抵,別人改完相應(yīng)后綴名-.cpp后你雌,該文件對應(yīng)的頭文件還有很繁瑣的增加第二條所述的代碼;第四條也有束縛二汛,–C99有一個特性是婿崭,可以在代碼中定義變量,而無需在函數(shù)開頭定義肴颊,且可以初始化結(jié)構(gòu)體氓栈,如下面的代碼片:
while(1) {
????????intkey_value = Read_key();
}
DeviceInfo_TypeDef tDeviceInfoMem = {
????????.mac_addr? ? ? = {0x84,0x39,0xBE,0x90,0x00,0x00},
????????.ip_addr? ? ? ? = {10,10,2,1},
????????.netmask= {255,255,252,0x00},
????????.gateway= {10,10,3,254},
????????.projBaud=19200,?
};
當(dāng)然也可以這樣(無需–C99支持):
DeviceInfo_TypeDef tDeviceInfoMem ={
? ? {0x84, 0x39, 0xBE, 0x90, 0x00, 0x00},{10, 10, 2, 1},{255, 255, 252, 0x00},{10, 10, 3, 254},19200, };
考慮到以上修改的代碼量程度,決定先不用C++混合編程啦