历史上的今天
今天是:2025年07月31日(星期四)
2019年07月31日 | Keil STM32 C++混合编程要点
2019-07-31 来源:eefocus
1. 文件名必须是.CPP和.h
2. .h文件中要增加如下代码:
#ifndef __LEDTASK_H
#define __LEDTASK_H
#ifdef __cplusplus
extern "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条有束缚,即别人想嵌入我的代码,必须也要是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++混合编程啦
史海拾趣
|
S3c610 Codec移植的工作经验总结[bootloader级] 1. S3C6410与WM9713的I2S,AC97,PCM相比较: 1.I2S,AC97,PCM是不同的,各是各的,三者时序不同,要双方通信,必须要是 同一种时序,要么均是I2S,要么均是AC97,要么均是PCM 2.S3C6410的I2S,AC97,PCM复用同一组Pin脚,但同一时间只能用一种类型 ...… 查看全部问答> |
|
前几天拿到一个mini2440,板子很精致。400M的主频,在跑uCos2的时候,发现速度很慢,可是却不知道为什么。怀疑是cache没有利用起来,可是我对于MMU也不是很明白,有没有点建议? void MMU_Init(void) { int i,j; / ...… 查看全部问答> |
|
本人在使用该芯片过程中遇到一些问题,想请有经验的朋友指教一下。 本人用720极的圆感应同步器作为角度传感器,想利用AD2S80来解码。 激磁信号使用的是5Khz的正弦波,AD2S80设置的分辨率为12位,该芯片的外围电路完全按照芯片手册上的针对5KHZ/12 ...… 查看全部问答> |
|
对于FPGA芯片,在上电的时候从EPCS内加载配置文件的信息,我想知道数据从EPCS传输到FPGA的过程中,是否存在冗余校验,就像422,485等通信过程中存在的校验。或者,我想为FPGA的*.pof文件内是否存有数据的冗余校验信息。谢谢… 查看全部问答> |
|
Firmware Lib的应用及C++工程建立过程杂谈Firmware Lib下在地址:http://www.st.com/stonline/products/support/micro/files/um0427.zipFirmware Lib用户手册下载地址:http://www.st.com/stonline/products/literature/um/134 ...… 查看全部问答> |
|
有没有一款好的STM8/32的烧写仿真器,大家推荐一下。 我先前有的是ST LINK ,用了快一年,用坏了4个ST LINK,有什么替代的东西吗? 再问一下,STM8还有什么烧写器?… 查看全部问答> |




