[AT32F437] 移植FreeRTOS并闪个灯

[复制链接]
167|5
GalaxyStroll 发表于 2025-12-28 21:19 | 显示全部楼层 |阅读模式
雅特力AT3F437系列是基于ARM公司的Cortex-M4内核的一款高性能、高主频的国产MCU,其有高达240MHz的主频和400KB+的SRAM,以及多种外设的资源丰富。这么高级的MCU怎么可能不跑RTOS呢?移植一下FreeRTOS试试。
参考FreeRTOS官方的示例,我们把对应的文件在Keil工程中组织好。在移植FreeRTOS的步骤中,有一步是选择MemManage的方式,我们选择heap_1,即无Free()具体实现的Mem管理组织方式。其余文件我们保持官方原样。
AT32-FreeRTOS文档架构.jpg
移植完毕,我们就根据需求修改一下FreeRTOSConfig.h。主要是对宏定义的开开关关罢了。 我们再编写一个led灯的闪烁的任务。
  1. TaskHandle_t led_handler;

  2. /* led task */
  3. void led_task_function(void *pvParameters);

  4. int main(void)
  5. {
  6.   bsp_init();

  7.   taskENTER_CRITICAL();
  8.   xTaskCreate((TaskFunction_t)led_task_function,
  9.               (const char *)"LED_task",
  10.               (uint16_t)64,
  11.               (void *)NULL,
  12.               (UBaseType_t)2,
  13.               (TaskHandle_t *)&led_handler);
  14.   /* exit critical */
  15.   taskEXIT_CRITICAL();

  16.   /* start scheduler */
  17.   vTaskStartScheduler();

  18.   while (1)
  19.   {
  20.     ;
  21.   }
  22. }

  23. void led_task_function(void *pvParameters)
  24. {
  25.   while (1)
  26.   {
  27.     led_toggle(LED0_PIN);
  28.     vTaskDelay(100);
  29.   }
  30. }

跑起来了!
相较于使用CMSIS_V2封装API,此方法源于FreeRTOS原生API。对学习RTOS的原理更加适合。毕竟谁都不愿意仅会API调用嘛!
P.S. FreeRTOS的宏定义GUI界面配置方式,可直接通过AT WorkBench来生成。中文的,方便的。
特别注意:如果在Keil软件里面使用了AC6编译器,则要移植GCC的版本。我使用的是FreeRTOS 2024LTS版本。



时光迷宫 发表于 2026-1-5 21:16 | 显示全部楼层
我一看FreeRTos都到2024版本了?感觉我代码里还是很古老的版本
穷得掉渣大侠 发表于 2026-1-7 18:50 | 显示全部楼层
选择heap_1作为内存管理方式是一个明智的选择,特别是在资源受限的系统中
低语之树 发表于 2026-1-13 10:19 | 显示全部楼层
时光迷宫 发表于 2026-1-5 21:16
我一看FreeRTos都到2024版本了?感觉我代码里还是很古老的版本

能用即可啊不用每次都追求最新的版本
 楼主| GalaxyStroll 发表于 2026-2-15 16:03 | 显示全部楼层
时光迷宫 发表于 2026-1-5 21:16
我一看FreeRTos都到2024版本了?感觉我代码里还是很古老的版本

您这是大佬了,
早些年使用Freertos都是好厉害的人啊
时光迷宫 发表于 2026-2-25 08:57 | 显示全部楼层
时光迷宫 发表于 2026-1-5 21:16
我一看FreeRTos都到2024版本了?感觉我代码里还是很古老的版本

找一个稳定的版本,没必要每次都要去升级
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

58

帖子

0

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