Keil STM32 C++混合编程要点

发布者:陈熙琼最新更新时间:2019-07-31 来源: eefocus关键字:Keil  STM32  C++  混合编程 手机看文章 扫描二维码
随时随地手机看文章

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++混合编程啦


关键字:Keil  STM32  C++  混合编程 引用地址:Keil STM32 C++混合编程要点

上一篇:STM32 之六 USB IP(USB模块)、官方驱动版本 详解
下一篇:用VisualStudio开发STM32遇到的问题(一)

推荐阅读最新更新时间:2024-11-12 13:38

红旗E-HS9车型搭载移远C-V2X模组,打造旗舰级智能网联
移远通信宣布联合高通技术公司,共同支持红旗 E-HS9 车型在智能网联技术领域的创新。全新红旗 E-HS9 是红旗品牌的全尺寸智慧纯电 SUV,搭载了集成高通芯片组的移远通信 C-V2X(蜂窝车联网)AG15 模组,是全球率先在多个 LTE-V2X(也称为 C-V2X)通信场景下实现 100%辅助预警验证的量产车型,也是率先采用 LTE-V2X 技术的商用车型。 移远 AG15 模组基于高通 9150 C-V2X 芯片组研发,是公司面向 C-V2X 领域推出的首款车规级通信产品,旨在通过提供车辆之间的高性能实时直连通信以及车辆与路侧基础设施之间的通信,来提升汽车安全、交通效率和自动驾驶能力。 同时,通过搭配内置高通 M
[嵌入式]
红旗E-HS9车型搭载移远<font color='red'>C</font>-V2X模组,打造旗舰级智能网联
全新Netduino 3登陆Mouser 新增Wi-Fi连接功能 助力快速建立原型
贸泽电子(Mouser Electronics) 开始分销Netduino 3电子平台,能够使商业硬件解决方案和个人电子项目快速上市,同时提供了最大的设计灵活性并降低了风险。最新版本的开源Netduino平台不但具有让先前版本广受欢迎的最佳功能,还增加了Wi-Fi连接功能。 Mouser分销的 Netduino 3为针对Microsoft .NET Micro Framework而设计的开源电子平台,结合了高级编码的便利性与STM32 F4系列微控制器的原始功能集。Netduino 3基板型采用搭载168MHz ARM Cortex-M4处理器的32位STM32F427VG 微控制器(内置可实现读写同步的1MB双区
[嵌入式]
STM32的can现场总线实验心得分享
最近在搞stm32实验板的can现场总线实验,之前只是搞过STC51的串口通信,相比之下,发觉can总线都挺复杂的。开始时,知道自己是新手,只知道can总线跟串行通信,485通信,I2C通信一样都是用来传输数据通信的,对其工作原理一窍不通,还是从基础开始看书看资料,先了解它的基本原理吧。 原来can总线有以下特点: 主要特点 支持CAN协议2.0A和2.0B主动模式 波特率最高可达1兆位/秒 支持时间触发通信功能 发送 3个发送邮箱 发送报文的优先级特性可软件配置 记录发送SOF时刻的时间戳 接收 3级深度的2个接收FIFO 14个位宽可变的过滤器组-由整个CAN共享 标识符列表 FIFO溢
[单片机]
<font color='red'>STM32</font>的can现场总线实验心得分享
单片机keil 常见问题
一、混合编程 1、模块内接口: 使用如下标志符: #pragma asm 汇编语句 #pragma endasm 注意:如果在c51程序中使用了汇编语言,注意在keil编译器中需要激活Properties中的“Generate Assembler SRC File” 和“Assembler SRC File ”两个选项 来个实例吧: #i nclude void main(void) { P2=1; #pragma asm MOV R7,#10 DEL:MOV R6,#20 DJNZ R6,$ DJNZ R7,DEL #pragma endasm P2=0; } 另: 1、把"xx.c"加
[单片机]
关于 STM32 的几点内容
主要内容: 1.为什么STM32F0没有AFIO时钟呢? 2.关于STM32中的各种电源 3.IAR中如何查看外设寄存器 4.关于问问题 1为什么STM32F0没有AFIO时钟呢? 前面写过一篇文章【关于STM32时钟配置的那些坑】里面有讲述关于什么时候开启AFIO时钟,有朋友下来去研究AFIO时钟时发现STM32F0芯片中没有AFIO时钟,于是就问了这么一个问题:你好,为什么STM32F0没有AFIO时钟呢? 答案就是STM32F0没有AFIO时钟。那又是怎样实现重定义这个功能的呢? 实现重定义功能也是由特定的控制器完成的,需要使用某个控制器,就需要开启对应的时钟。 而STM32F1就是由“Alternate function
[单片机]
关于 <font color='red'>STM32</font> 的几点内容
51系列-C语言控制逐级娱乐
注意51系列8位(bit)一个字节,应用汇编语言简洁高效。16位的处理器需要用0000 0000H 表示。16或32位以上,使用操作系统(WinCE、Linux等)更有效,可以利用大量的、底层的、专业化、标准化的面向控制的库函数(如:API等)。高级语言具有对底层硬件的无关性,则可移植性好、可重用性好;高级语言描述控制更接近人的自然语言,可描述性好,表达力好。Linux的代码与模块的开放性、可剪裁性、自我构造等特点使其前景广阔。 1.单个LED灯,单个按键 //C语言的头文件 //这是第一种注释方式; //预处理命令 #include #define uchar uns
[单片机]
51系列-<font color='red'>C</font>语言控制逐级娱乐
STM32默认启动
TM32默认启动时PB4、PB3、PA15三个引脚不是普通IO,而是JTAG的复用功能,分别为JNTRST、JTDI、JTDO。 当我们试用SWD接口调试仿真时,这三个引脚可以用作普通IO。 具体做法就是禁用JTAG功能。只需使用以下语句即可。 #define GPIO_Remap_SWJ_JTAGDisable ((uint32_t)0x00300200) GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
[单片机]
C8051F(330)精确延时程序(24.5M)
//********************************************** // 功能:C8051F(330)精确延时 24.5M //********************************************** #include c8051f330.h #include intrins.h //---------------------------------------------- void Reset_Sources_Init() { RSTSRC = 0x04; } void PCA_Init() { PCA0MD &= ~0x40; PCA
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved