本帖最后由 聪聪哥哥 于 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)
|