完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一:C++引用C文件 注意:C++文件能引用C文件,但是C文件不能引用C++文件 1:在C头文件中加上extern修饰符: 1. #ifdef __cplusplus 2. extern "C" { 3. #endif 4. 5. 6. 。。。。。。。。。。。。。这里写c语言代码 7. 8. 9. #ifdef __cplusplus 10. } 11. #endif 这样在使用C++调用时就使用C++编译器编译,c语言调用时就是用c语言方式编译 2:编写一个C++风格的头文件,在这里添加extern修饰符: (一般用在调用已经封装好的库文件或者无法或不想修改.c文件所引用的头文件时) 1. // CStack.h 2. extern "C" { 3. #include "Stack.h"; 4. } 或者是直接在需要引用c头文件的cpp文件中 1. // .cpp 2. extern "C" { 3. #include "delay.h"; 4. } 二:在新建cpp文件之后,MDK可能会把它识别为image文件 现象如下: 此处这个iic.cpp便被识别成了image文件,main.cpp则是正常的。对它单机右键,选择option for file ”iic.cpp”即可查看。 解决:将File Type 修改为C++ sourcefile 即可。 三:C++中相对于C独有的new以及堆地址设置及内存分配问题。 (当然,如果不必使用new功能,则可以不分配堆空间) 这个new 就是从堆里取一块内存空间,并执行类的构造函数。 那么这里就要涉及到堆的问题,你必须得告诉程序一个问题: (1)堆在哪里?(2)堆有多大? MDK中主要使用_init_alloc( startAddr, endAddr );(rt_heap.h中声明)来设置堆的地址 1:定义数值作为堆空间 Eg: 1. #defineHEAP_SIZE (0x3000) 2. u32 heap_zone[HEAP_SIZE] = { 0 }; 然后初始化时调用 3. _init_alloc((u32)heap_zone,(u32)&heap_zone[HEAP_SIZE - 1]); 来指定堆的起始和结束地址。 2:扩展SRAM空间来作为堆空间 4. #define HEAP_BASE Bank1_SRAM3_ADDR 5. #define HEAP_TOP (Bank1_SRAM3_ADDR+0x100000) 然后初始化 1. FSMC_SRAM_Init(); //初始化对SRAM的访问 2. _init_alloc(HEAP_BASE, HEAP_TOP); // 设置堆空间 注: MDK 版本: keil μvision5.11.1.0 编写时使用系统: Windows 10 测试时使用芯片: STMA32f103ZET6 整理者:Neucrack 参考资料: 2:C++调用C函数 |
|
|
|
995 浏览 0 评论
STM32配合可编程加密芯片SMEC88ST的防抄板加密方案设计
1152 浏览 0 评论
2546 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
2330 浏览 3 评论
4977 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-4 17:22 , Processed in 0.674238 second(s), Total 68, Slave 50 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号