|
雅特力AT3F437系列是基于ARM公司的Cortex-M4内核的一款高性能、高主频的国产MCU,其有高达240MHz的主频和400KB+的SRAM,以及多种外设的资源丰富。这么高级的MCU怎么可能不跑RTOS呢?移植一下FreeRTOS试试。 参考FreeRTOS官方的示例,我们把对应的文件在Keil工程中组织好。在移植FreeRTOS的步骤中,有一步是选择MemManage的方式,我们选择heap_1,即无Free()具体实现的Mem管理组织方式。其余文件我们保持官方原样。 移植完毕,我们就根据需求修改一下FreeRTOSConfig.h。主要是对宏定义的开开关关罢了。 我们再编写一个led灯的闪烁的任务。 - TaskHandle_t led_handler;
- /* led task */
- void led_task_function(void *pvParameters);
- int main(void)
- {
- bsp_init();
- taskENTER_CRITICAL();
- xTaskCreate((TaskFunction_t)led_task_function,
- (const char *)"LED_task",
- (uint16_t)64,
- (void *)NULL,
- (UBaseType_t)2,
- (TaskHandle_t *)&led_handler);
- /* exit critical */
- taskEXIT_CRITICAL();
- /* start scheduler */
- vTaskStartScheduler();
- while (1)
- {
- ;
- }
- }
- void led_task_function(void *pvParameters)
- {
- while (1)
- {
- led_toggle(LED0_PIN);
- vTaskDelay(100);
- }
- }
跑起来了! 相较于使用CMSIS_V2封装API,此方法源于FreeRTOS原生API。对学习RTOS的原理更加适合。毕竟谁都不愿意仅会API调用嘛! P.S. FreeRTOS的宏定义GUI界面配置方式,可直接通过AT WorkBench来生成。中文的,方便的。 特别注意:如果在Keil软件里面使用了AC6编译器,则要移植GCC的版本。我使用的是FreeRTOS 2024LTS版本。
|