打印
[AT32M412]

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

[复制链接]
144|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 聪聪哥哥 于 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的任务指针
TaskHandle_t UART1_handler;
2.2 创建串口1任务:
  /* create URAT1 task */
  if(xTaskCreate((TaskFunction_t )UART1_task_function,
                 (const char*    )"UART1_task",
                 (uint16_t       )512,
                 (void*          )NULL,
                 (UBaseType_t    )3,
                 (TaskHandle_t*  )&UART1_handler) != pdPASS)
  {
    printf("UART1 task could not be created as there was insufficient heap memory remaining.\r\n");
  }
  else
  {
    printf("UART1 task was created successfully.\r\n");
  }
2.3  编写串口1的发送任务
int count = 0 ;

void UART1_task_function(void *pvParameters)
{
  while(1)
  {
    printf("UART1 task is ok autor by:congconggege count = %3d\r\n",count);
    vTaskDelay(500);
                count++ ;
  }
}
三:测试图如下所示:

四:后记:
在官方的例程中,二次开发RTOS任务也很方便,参考例程添加任务很方便,也很容易上手。
测试代码:
at32m412_416_freertos_demo.zip (5.62 MB)

使用特权

评论回复
沙发
xinxianshi| | 2025-6-17 20:00 | 只看该作者
这OS好用吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

69

主题

192

帖子

1

粉丝