聪聪哥哥 发表于 2025-6-17 17:08

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

本帖最后由 聪聪哥哥 于 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任务也很方便,参考例程添加任务很方便,也很容易上手。
测试代码:


xinxianshi 发表于 2025-6-17 20:00

这OS好用吗

聪聪哥哥 发表于 2025-6-18 07:54

xinxianshi 发表于 2025-6-17 20:00
这OS好用吗

底层库直接使用官方的,简单跑了个任务,添加任务很方便。
页: [1]
查看完整版本: 【AT-START-M412测评】+ 03 添加RTOS任务,实现串口输出