Keil STM32 C++混合編程要點
1. 檔案名稱必須是.CPP和.h
2. .h檔案中要增加如下代碼:
#ifndef __LEDTASK_H#define __LEDTASK_H#ifdef __cplusplusextern "C" {#endif#include "stm32_led.h"void led1_task (void *pdata);#ifdef __cplusplus} #endif#endif
3. 調用.cpp檔案中資源時(如類,函數等),那個檔案也必須是.cpp檔案。即.cpp檔案裡才能調用C++文法的程式
4. –C99要去掉
其實到最後,我是放棄了這種C++混合編程的,一開始非常想這樣做,這樣我的那部分C++代碼就可以無縫移植到MFC上了,後來Keil也編譯通過了,但是由於上述條件的束縛(第一條OK,第二條也OK,第3條有束縛,即別人想嵌入My Code,必須也要是cpp檔案,別人改完相應尾碼名-.cpp後,該檔案對應的標頭檔還有很繁瑣的增加第二條所述的代碼;第四條也有束縛,–C99有一個特性是,可以在代碼中定義變數,而無需在函數開頭定義,且可以初始化結構體,如下面的代碼片:
while(1) { int key_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, };
當然也可以這樣(無需–C99支援):
DeviceInfo_TypeDef tDeviceInfoMem = { {0x84, 0x39, 0xBE, 0x90, 0x00, 0x00}, {10, 10, 2, 1}, {255, 255, 252, 0x00}, {10, 10, 3, 254}, 19200, };
考慮到以上修改的代碼配量度,決定先不用C++混合編程啦