[其他] HC32F460工程添加FreeRTOS

[复制链接]
10703|5
 楼主| yuyy1989 发表于 2024-2-5 21:46 | 显示全部楼层 |阅读模式
如何创建HC32F460的工程就不介绍了,下面介绍向工程中添加FreeRTOS的方法
首先下载FreeRTOS源码 https://github.com/FreeRTOS/FreeRTOS/releases
在midwares文件夹中创建FreeRTOS文件夹
QQ截图20240205205454.png
打开下载的FreeRTOS源码,将FreeRTOS\Source中的全部文件解压到刚才创建的FreeRTOS文件夹
QQ截图20240205205552.png
在Keil中创建FreeRTOS分组,将FreeRTOS文件夹下的.c文件添加到分组中
QQ截图20240205210909.png
然后将portable\RVDS\ARM_CM4F中的port.c也添加到分组中
QQ截图20240205211035.png
portable文件夹中是FreeRTOS针对不同编译平台和不同内核提供的适配代码,我这里用的是Keil,但是Keil文件夹里只有这么个文件
QQ截图20240205211302.png
HC32F460是M4内核的,这里只能选M4F
QQ截图20240205211404.png
还需要添加MemMang中的内存管理代码,这里有5个
QQ截图20240205211511.png
打开那个readme看看
QQ截图20240205211540.png
推荐是heap4.c,将它添加到FreeRTOS分组中
添加FreeRTOS的头文件路径
QQ截图20240205211712.png
在FreeRTOS的例程里复制1个FreeRTOSConfig.h文件到代码文件夹,最后结构是这样
QQ截图20240205214225.png
修改一下FreeRTOSConfig.h内容,添加extern uint32_t SystemCoreClock;,下面几个宏定义如果不是0修改为0
QQ截图20240205212103.png
接下来修改main.c,我这个工程原来是控制4个LED闪烁的,修改一下,创建2个任务分别以不同的速度控制LED亮灭,原来的LED控制代码就不放了,官方例程中都有
  1. #include "FreeRTOS.h"
  2. #include "task.h"

  3. static TaskHandle_t frt_test_led12_task_handler = NULL;
  4. static TaskHandle_t frt_test_led34_task_handler = NULL;
  5. static void Led12Task(void* pvParameters)
  6. {       
  7.     while (1)
  8.     {
  9.       LED_R_TOGGLE();
  10.       vTaskDelay(500);
  11.       LED_G_TOGGLE();
  12.       vTaskDelay(500);
  13.     }
  14. }

  15. static void Led34Task(void* pvParameters)
  16. {       
  17.     while (1)
  18.     {
  19.       LED_Y_TOGGLE();
  20.       vTaskDelay(1000);
  21.       LED_B_TOGGLE();
  22.       vTaskDelay(1000);
  23.     }
  24. }

  25. int32_t main(void)
  26. {
  27.     SystemCoreClockUpdate();
  28.     LL_PERIPH_WE(LL_PERIPH_GPIO);
  29.     LED_Init();
  30.     LL_PERIPH_WP(LL_PERIPH_GPIO);
  31.     xTaskCreate(Led12Task, "Led12Task", configMINIMAL_STACK_SIZE,  NULL,1, &frt_test_led12_task_handler);
  32.     xTaskCreate(Led34Task, "Led34Task", configMINIMAL_STACK_SIZE,  NULL,1, &frt_test_led34_task_handler);
  33.     vTaskStartScheduler();
  34. }
运行效果
WeChat_20240205213507 00_00_00-00_00_30~1.gif

chenjun89 发表于 2024-2-5 21:58 来自手机 | 显示全部楼层
现在都在转国产化,可以看看RTTread。
储小勇_526 发表于 2024-2-6 08:31 | 显示全部楼层
23年也用了FREERTOS,暂时是STM32,直接有很多现成的工程用
怀揣少年梦 发表于 2024-2-6 09:59 | 显示全部楼层
大佬,KEIL配色方案赞一个
Alohaq 发表于 2024-2-21 09:15 | 显示全部楼层
有个疑问,新的库好像没有调用Systick_Init,那Systick_Handler还会被调用吗?
cmyldd 发表于 2024-2-22 09:19 | 显示全部楼层
heap4.c 用得比较多
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:同飞软件研发工程师
简介:制冷系统单片机软件开发,使用PID控制温度

168

主题

826

帖子

10

粉丝
快速回复 在线客服 返回列表 返回顶部