当前位置:   article > 正文

FreeRTOS移植(STM32F103C8T6)_stm32f103c8t6移植freertos

stm32f103c8t6移植freertos

一、获取源码

官网下载

官网地址:https://www.freertos.org

二、下载完解压

三、获取需要移植的文件

点来FreeRTOS文件夹,只需要看Source

 1.打开Source文件夹

 include文件夹 :包含了一些我们需要移植的头文件

portable文件夹:包含一些适配不同内核的东西,我们需要用到以下框选的文件

 内存管理选择移植 heap_4.c 

 内核管理选择移植 CM3内核的文件 

2.找到 FreeRTOSConfig.h     配置文件

 

 四、打开一个keil工程

1、创建group,添加相应的文件,添加头文件路径

2、修改相关用到的FreeRTOS的配置和中断

1)系统配置文件修改

FreeRTOSConfig.h 中添加如下3个配置:

  1. #define xPortPendSVHandler PendSV_Handler
  2. #define vPortSVCHandler SVC_Handler
  3. #define INCLUDE_xTaskGetSchedulerState 1

 2)修改 stm32f1xx_it.c 文件

1.引入头文件

2.注释掉2个中断函数(由于 FreeRTOS 已经实现了)

3.将 Systick_Handler 中断和 FreeRTOS关联起来

  1. extern void xPortSysTickHandler(void);
  2. if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED)
  3. {
  4. xPortSysTickHandler();
  5. }

 五、移植完成

关于Systick 可能会出现的问题:系统时钟HAL和FreeRTOS共同使用systick?

  1. void SysTick_Handler(void)
  2. {
  3. /* USER CODE BEGIN SysTick_IRQn 0 */
  4. /* USER CODE END SysTick_IRQn 0 */
  5. HAL_IncTick(); //hal库的时间函数依赖这个
  6. /* USER CODE BEGIN SysTick_IRQn 1 */
  7. if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED)
  8. {
  9. xPortSysTickHandler(); //freertos依赖这个函数
  10. }
  11. /* USER CODE END SysTick_IRQn 1 */
  12. }

FreeRTOS有些地方会屏蔽中断,造成 delay 不准--》出现这种情况时 可以将 Sys 配置的 Timebase Source 由原来默认的 Systick 改为其他 TIM(定时器)!!!

六、测试工程

1.main.c中简单创建两个任务

  1. //1.包含头文件
  2. /* FreeRTOS头文件 */
  3. #include "FreeRTOS.h"
  4. #include "task.h"
  5. //2.任务相关
  6. static TaskHandle_t AppTaskCreate_Handle;/* 创建任务句柄 */
  7. static TaskHandle_t LED_Task_Handle; /* LED任务句柄 */
  8. static void AppTaskCreate(void); /* 用于创建任务 */
  9. static void LED_Task(void* pvParameters);/* LED_Task任务实现 */
  10. int main(void)
  11. {
  12. HAL_Init();
  13. BaseType_t xReturn = pdPASS;/* 定义一个创建信息返回值,默认为pdPASS */
  14. /* 配置优先级分组为4 */
  15. HAL_NVIC_SetPriorityGrouping( NVIC_PRIORITYGROUP_4 );
  16. /* Configure the system clock */
  17. SystemClock_Config();
  18. /* Initialize all configured peripherals */
  19. LED_GPIO_Config();
  20. /* 创建 AppTaskCreate 任务 */
  21. xReturn = xTaskCreate((TaskFunction_t )AppTaskCreate, /* 任务入口函数 */
  22. (const char* )"AppTaskCreate",/* 任务名字 */
  23. (uint16_t )128, /* 任务栈大小 */
  24. (void* )NULL,/* 任务入口函数参数 */
  25. (UBaseType_t )1, /* 任务的优先级 */
  26. (TaskHandle_t* )&AppTaskCreate_Handle);/* 任务控制块指针 */
  27. if(pdFAIL != xReturn)/* 创建成功 */
  28. vTaskStartScheduler(); /* 启动任务,开启调度 */
  29. while (1)
  30. {
  31. }
  32. /* USER CODE END 3 */
  33. }

2.实现两个任务

  1. /***********************************************************************
  2. * @ 函数名 : AppTaskCreate
  3. * @ 功能说明: 为了方便管理,所有的任务创建函数都放在这个函数里面
  4. * @ 参数 : 无
  5. * @ 返回值 : 无
  6. **********************************************************************/
  7. static void AppTaskCreate(void)
  8. {
  9. BaseType_t xReturn = pdPASS;/* 定义一个创建信息返回值,默认为pdPASS */
  10. taskENTER_CRITICAL(); //进入临界区
  11. /* 创建LED_Task任务 */
  12. xReturn = xTaskCreate((TaskFunction_t )LED_Task, /* 任务入口函数 */
  13. (const char* )"LED_Task",/* 任务名字 */
  14. (uint16_t )512, /* 任务栈大小 */
  15. (void* )NULL, /* 任务入口函数参数 */
  16. (UBaseType_t )2, /* 任务的优先级 */
  17. (TaskHandle_t* )&LED_Task_Handle);/* 任务控制块指针 */
  18. if(pdFAIL != xReturn)/* 创建成功 */
  19. {
  20. //...
  21. }
  22. vTaskDelete(AppTaskCreate_Handle); //删除AppTaskCreate任务
  23. taskEXIT_CRITICAL(); //退出临界区
  24. }
  25. /**********************************************************************
  26. * @ 函数名 : LED_Task
  27. * @ 功能说明: LED_Task任务主体
  28. * @ 参数 :
  29. * @ 返回值 : 无
  30. ********************************************************************/
  31. static void LED_Task(void* parameter)
  32. {
  33. while (1)
  34. {
  35. HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);
  36. vTaskDelay(500); /* 延时500个tick */
  37. HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
  38. vTaskDelay(500); /* 延时500个tick */
  39. }
  40. }

3.编译烧入程序,可以看到 LED(PC13) 按指定的delay 闪烁!!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/730342
推荐阅读
相关标签
  

闽ICP备14008679号