[AT32M412] 【AT-START-M412测评】+ 03 添加RTOS任务,实现串口输出

[复制链接]
 楼主| 聪聪哥哥 发表于 2025-6-17 17:08 | 显示全部楼层 |阅读模式
本帖最后由 聪聪哥哥 于 2025-6-17 17:21 编辑

提起RTOS,相信大家并不陌生,这次在官方的RTOS中添加串口输出的任务。
一:RTOS的基本知识:
RTOS(Real-Time Operating System,实时操作系统)是一种专为实时应用程序设计的操作系统,其核心特点是能够在严格的时间限制内完成任务。以下是RTOS的基本知识总结:
1. 实时系统的关键特征
确定性:任务响应时间可预测,确保在截止时间(Deadline)前完成。
优先级驱动:高优先级任务可抢占低优先级任务(Preemptive Scheduling)。
低延迟:中断响应时间和任务切换时间极短(通常为微秒级)。
2. 核心组件
任务(Task/Thread):独立执行单元,拥有自己的栈和优先级。
调度器(Scheduler):决定任务执行顺序(如优先级抢占、时间片轮转)。
中断管理:快速响应外部事件,触发高优先级任务。
同步与通信机制:
信号量(Semaphore):资源访问控制。
互斥量(Mutex):防止优先级反转。
消息队列(Message Queue):任务间数据传输。
事件标志(Event Flags):任务间事件通知。
3:调度算法
抢占式调度:高优先级任务立即抢占CPU(如FreeRTOS、VxWorks)。
时间片轮转:同优先级任务轮流执行(适用于非严格实时场景)。
静态优先级:任务优先级在编译时确定。
动态优先级:运行时调整优先级(如EDF算法,按截止时间动态分配)。
二:在官方的代码中添加任务:
2.1 添加串口1的任务指针
  1. TaskHandle_t UART1_handler;
2.2 创建串口1任务:
  1.   /* create URAT1 task */
  2.   if(xTaskCreate((TaskFunction_t )UART1_task_function,
  3.                  (const char*    )"UART1_task",
  4.                  (uint16_t       )512,
  5.                  (void*          )NULL,
  6.                  (UBaseType_t    )3,
  7.                  (TaskHandle_t*  )&UART1_handler) != pdPASS)
  8.   {
  9.     printf("UART1 task could not be created as there was insufficient heap memory remaining.\r\n");
  10.   }
  11.   else
  12.   {
  13.     printf("UART1 task was created successfully.\r\n");
  14.   }
2.3  编写串口1的发送任务
  1. int count = 0 ;

  2. void UART1_task_function(void *pvParameters)
  3. {
  4.   while(1)
  5.   {
  6.     printf("UART1 task is ok autor by:congconggege count = %3d\r\n",count);
  7.     vTaskDelay(500);
  8.                 count++ ;
  9.   }
  10. }
三:测试图如下所示:
5.png
四:后记:
在官方的例程中,二次开发RTOS任务也很方便,参考例程添加任务很方便,也很容易上手。
测试代码: WeChat_20250617172025 00_00_00-00_00_30.gif
at32m412_416_freertos_demo.zip (5.62 MB, 下载次数: 0)

xinxianshi 发表于 2025-6-17 20:00 | 显示全部楼层
这OS好用吗
 楼主| 聪聪哥哥 发表于 2025-6-18 07:54 | 显示全部楼层

底层库直接使用官方的,简单跑了个任务,添加任务很方便。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

93

主题

238

帖子

1

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