在C++工程里加入C文件

本文展示了如何在C++工程中引入并使用C语言编写的源文件。通过`extern "C"`来处理C++的名称修饰问题,使得C函数可以在C++中调用。示例中包括了`nx003_c.cpp`主文件,它包含`nx003_c.h`头文件,而头文件中引用了`test.h`和`test2.h`。`test.h`定义了C函数`func1()`,`test.c`实现了这个函数,`test2.h`则定义了C++的`func2()`,并使用了`iostream`库。

// nx003_c.cpp : Defines the entry point for the console application.
//在C++工程里加入C文件

#include "nx003_c.h"
int main(int argc, char* argv[])
{
 func1();
 func2();

 cout<<"test"<<endl;
 return 0;
}

===========================================

nx003_c.h

extern "C"
{  
#include "test.h"
}

#include "test2.h"

===========================================

test.h

#ifndef _TESTH_
#define _TESTH_

#include <stdio.h>

void func1();

#endif

===========================================

test.c

#include "test.h"

void func1()
{
 printf("enter here !/r/n");
 return;
}

===========================================

test2.h

#ifndef _TEST2H_
#define _TEST2H_

#include "iostream"
using namespace std;void func2();
#endif

===========================================

test2.cpp

#include "test2.h"

void func2()
{
 printf("2 enter here !/r/n");
 return;
}

===========================================

map文件:

 0001:000014a0       _func1                     004024a0 f   test.obj
 0001:00001710       ?func2@@YAXXZ              00402710 f   test2.obj

 

:)

 

### 如何在Keil项目中添加并配置FreeRTOS文件组 要在Keil项目中成功添加并配置FreeRTOS文件组,需按照以下方法操作: #### 1. 创建FreeRTOS相关文件夹结构 为了保持工程整洁有序,在创建FreeRTOS文件组前,建议先构建合理的文件夹结构。通常情况下,将FreeRTOS相关的`.c`文件放置于`src`目录下,而对应的头文件则存储在`include`目录中[^3]。 ```plaintext ├── FreeRTOS │ ├── include // 存放所有的.h文件 │ └── src // 存放所有的.c文件 ``` #### 2. 添加FreeRTOS源码至Keil工程 从FreeRTOS官方网站下载最新版的FreeRTOS源码包,并解压获取其内部文件。根据实际需求筛选必要的文件,将其复制到上述构建好的`src`和`include`文件夹中。具体需要哪些文件取决于目标平台以及所使用的外设功能。 - **核心文件**:位于`Source`目录下的所有子目录中的`.c`文件均应被加入。 - **移植层文件**:针对特定处理器架构(如ARM Cortex-M系列),还需引入相应的移植代码,一般存在于`portable/GCC/ARM_CMx`路径下[^5]。 #### 3. 配置Keil工程项目设置 打开已有的Keil MDK工程或者新建一个空白工程之后执行下面几步操作: ##### (1)新增文件组 通过右键点击左侧资源管理器窗口内的“Groups”,选择“Add Group...”命令来定义新的分组名称,比如命名为“FreeRTOS”。 ##### (2)导入文件 再次利用鼠标右键菜单选项——即“Add Existing Files to Group '...'”——选取刚才准备完毕后的那些`.c`文件连同它们所在的整个目录一并加载进来[^4]。 注意此时仅限于处理实现逻辑的部分;至于声明接口用途的`.h`头部文档,则无需单独重复此过程因为编译器能够自动识别关联关系。 ##### (3)调整包含路径 进入“Options for Target -> C/C++ Tab”的界面修改“Includes Paths”。确保包含了先前设定的那个顶层公共头文件位置(`include`)以及其他可能涉及第三方库的地方[^1]。 例如: ```makefile -I..\FreeRTOS\include -I..\Other_ThirdParty_Libs ``` #### 4. 修改FreeRTOSConfig.h配置项 最后一步也是至关重要的环节就是编辑属于自己的定制化参数列表—`FreeRTOSConfig.h`。这边涵盖了众多影响调度行为的关键数值,像堆栈大小、优先级分配策略等等都需要仔细斟酌确定下来才能保障最终运行效果达到预期标准。 以下是几个常见的宏定义示例及其作用说明: - `configCPU_CLOCK_HZ`: 定义系统的时钟频率。 - `configTICK_RATE_HZ`: 设置节拍中断的时间间隔,默认单位为Hz。 - `configMINIMAL_STACK_SIZE`: 给定最低限度的任务堆栈尺寸限制。 - `configTOTAL_HEAP_SIZE`: 整体可用内存池规模界定。 --- ### 示例代码片段 假设我们要初始化一个简单的任务函数作为演示目的,可以参照如下模板编写相应的内容: ```c // Task function prototype. void vATaskFunction(void *pvParameters); BaseType_t xReturned; TaskHandle_t xCreatedTask; xReturned = xTaskCreate( vATaskFunction, /* Function that implements the task. */ "ATASK", /* Text name for the task. */ configMINIMAL_STACK_SIZE,/* Stack size in words, not bytes. */ NULL, /* Parameter passed into the task. */ tskIDLE_PRIORITY, /* Priority at which the task is created. */ &xCreatedTask ); /* Used to pass out the created task's handle. */ if( xReturned != pdPASS ) { // The task was not created correctly... } ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值