FreeRTOS移植

FreeRTOS移植




一、手动移植

  1. 到FreeRTOS官网下载最新版本的FreeRTOS
  2. 创建一个新的工程(可以将SYS中的时钟设置为TIM2,使用于延时函数,SysTikc被用作任务切换了),其它的和裸机一样
  3. 在keil软件的项目中创建两个文件夹(FreeRTOS/SourceFreeRTOS/Other
  4. 在实际的工程根目录下创建一个FreeRTOS文件夹,
  5. 先将下载的FreeRTOS源码中的FreeRTOSv202212.01\FreeRTOS\Source两个文件夹includeportable,以及所有的*.c文件复制到工程的FreeRTOS文件夹下
  6. 裁剪工程中的FreeRTOS\portable文件夹下的文件,只保留keil,MemMangRVDS文件夹.
  7. RVDS文件夹中只保留ARM_CM3
  8. 在keil软件里将移植的文件添加到工程中。
  • FreeRTOS下的所有.c文件(不包括文件夹中的)添加到工程FreeRTOS/Source中。
  • FreeRTOS\portable\MemMang下的heap_4.c添加到工程FreeRTOS/Other中。
  • FreeRTOS\portable\RVDS\ARM_CM3下的port.c添加到工程FreeRTOS/Other中。
  1. 在工程中添加头文件路径,FreeRTOS\includeFreeRTOS\portable\RVDS\ARM_CM3,以及FreeRTOS(在后面FreeRTOSConfig.h会用到)
  2. 将源码FreeRTOSv202212.01\FreeRTOS\Demo\CORTEX_STM32F103_Keil下的FreeRTOSConfig.h文件复制到工程的FreeRTOS下。(可以顺便加到keil的工程目录FreeRTOS/Source中)
  3. 修改FreeRTOSConfig.h文件,在文件最后(#endif前)添加几个宏定义
1
2
3
#define xPortPendSVHandler  PendSV_Handler
#define vPortSVCHandler SVC_Handler
#define xPortSysTickHandler SysTick_Handler
  1. 找到stm32f1xx_it.c,将其中的void SVC_Handler(void),void PendSV_Handler(void),void SysTick_Handler(void),注释掉
  2. 编译工程,如果没有错误,就可以开始使用FreeRTOS了

要在FreeRTOS中使用任务,需要在main函数前添加任务函数,然后在main函数中创建任务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39


TaskHandle_t LED1handler,LED2handler;//对应任务的句柄

//任务执行函数
void vTask1(void *pvParameters){
while(1){
HAL_GPIO_WritePin(LED_1_GPIO_Port,LED_1_Pin,0);
HAL_Delay(1000);
HAL_GPIO_WritePin(LED_1_GPIO_Port,LED_1_Pin,1);
HAL_Delay(1000);
}
}

void vTask2(void *pvParameters){
while(1){
HAL_GPIO_WritePin(LED_2_GPIO_Port,LED_2_Pin,0);
HAL_Delay(500);
HAL_GPIO_WritePin(LED_2_GPIO_Port,LED_2_Pin,1);
HAL_Delay(500);
}
}


int main(void)
{
//创建任务(函数名,任务名,堆栈大小,传递参数,任务优先级,句柄地址)
xTaskCreate(vTask1,"LED1",128,NULL,2,&LED1handler);
xTaskCreate(vTask2,"LED2",128,NULL,2,&LED2handler);

vTaskStartScheduler(); //开启任务

while (1)
{

}

}




二、使用CubeMX移植

  1. 前面一样,创建一个基础工程,配置时钟,SYS中的时钟设置为TIM2。
  2. 左边菜单栏下的Middleware中找到FreeRTOS,点击配置,选择版本(一般CMSIS_V2)
  3. 配置FreeRTOS基本设置

1

  1. 按需求配置任务,队列,信号量等
Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2020-2024 nakano-mahiro
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信