2018-06-21

自学单片机以来,使用频率最高的是Keil,但是后面学了MFC,特别希望MFC的代码能够无缝移植到单片机里,所以就研究了一下Keil环境下的C++编程方案,下面是我总结的要点:

Keil STM32 C++混合编程要点

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. 调用.cpp文件中资源时(如类,函数等),那个文件也必须是.cpp文件。即.cpp文件里才能调用C++语法的程序 

4. –C99要去掉 

其实到最后,我是放弃了这种C++混合编程的,一开始非常想这样做,这样我的那部分C++代码就可以无缝移植到MFC上了,后来Keil也编译通过了,但是由于上述条件的束缚(第一条OK,第二条也OK,第3条有束缚,即别人想嵌入我的代码,必须也要是cpp文件,别人改完相应后缀名-.cpp后,该文件对应的头文件还有很繁琐的增加第二条所述的代码;第四条也有束缚,–C99有一个特性是,可以在代码中定义变量,而无需在函数开头定义,且可以初始化结构体,如下面的代码片:

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, 

};

当然也可以这样(无需–C99支持):

DeviceInfo_TypeDef tDeviceInfoMem ={

    {0x84, 0x39, 0xBE, 0x90, 0x00, 0x00},{10, 10, 2, 1},{255, 255, 252, 0x00},{10, 10, 3, 254},19200, };

考虑到以上修改的代码量程度,决定先不用C++混合编程啦

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 2,727评论 0 3
  • 在iOS中框架是一个目录,包含了共享资源库,用于访问该资源库中储存的代码的头文件,以及图像、声音文件等其他资源。共...
    nkk阅读 622评论 0 1
  • 中介者模式,就是用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可...
    涵仔睡觉阅读 1,316评论 0 0
  • 电脑型号:MacBook Pro (Retina, 13-inch, Early 2015) 1.安装Anacon...
    点赞小能手阅读 1,515评论 0 0