freertos移植f103
时间: 2025-03-05 12:48:39 浏览: 34
### FreeRTOS 移植至 STM32F103 教程
#### 准备工作
为了成功将 FreeRTOS 移植到 STM32F103,需先准备一个基于库函数的基础工程。在此基础上创建一个新的名为 `FreeRTOS` 的文件夹用于存放 FreeRTOS 源码[^2]。
#### 添加 FreeRTOS 源码
在新建立的 `FreeRTOS` 文件夹内放置 FreeRTOS 源代码,并构建两个子目录:`FreeRTOS_CORE` 和 `FreeRTOS_PORTABLE`。对于 `portable` 文件夹而言,仅保留 `keil`, `MemMang` 及 `RVDS` 子文件夹即可,其余部分可予以移除。
#### 工程配置调整
- **添加源文件**:确保已向 Keil MDK 中对应的项目分组 (`FreeRTOS_CORE` 和 `FreeRTOS_PORTABLE`) 下加入必要的 C 文件。
- **设置头文件路径**:更新编译器选项以包含 FreeRTOS 头文件所在位置,这一步骤至关重要,能有效防止编译过程中可能出现的找不到头文件错误。
#### 关键配置项修改
- 将位于 `FreeRTOSv202212.01\FreeRTOS\Demo\CORTEX_STM32F103_Keil` 路径下的 `FreeRTOSConfig.h` 文件拷贝至基础工程项目内的 `User` 文件夹下。随后,在此 `.h` 文件中适当位置增加两条宏定义语句来适应具体应用场景的需求[^1]。
```c
#define configUSE_PREEMPTION 1
#define configMAX_PRIORITIES (5U)
```
以上操作完成后即完成了初步移植过程,后续可根据实际需求进一步优化调度策略及其他参数设定。
#### 示例代码片段展示如何启动第一个任务
下面给出一段简单的初始化并运行首个任务的例子:
```c
#include "FreeRTOS.h"
#include "task.h"
void vTaskFunction(void *pvParameters);
int main() {
// 初始化硬件...
// 创建任务
xTaskCreate(vTaskFunction, /* Task function */
"TASK", /* Name of task */
configMINIMAL_STACK_SIZE,/* Stack size */
NULL, /* Parameter passed into the task */
tskIDLE_PRIORITY + 1,/* Priority at which the task is created */
NULL); /* Used to pass out a handle */
// 开始调度
vTaskStartScheduler();
for (;;);
}
// 定义的任务实现
void vTaskFunction(void *pvParameters) {
while(1){
// 执行一些有用的工作...
// 让出CPU给其他同优先级或更高优先级的任务执行
vTaskDelay(pdMS_TO_TICKS(100));
}
}
```
阅读全文
相关推荐












