UCOSIII实验:任务内建消息队列与倒数粗糙熵图像阈值化

需积分: 12 194 下载量 98 浏览量 更新于2024-08-09 收藏 6.12MB PDF 举报
"任务内建消息队列实验-倒数粗糙熵图像阈值化分割算法" 在UCOSIII操作系统中,任务内建消息队列是一种高效的数据通信机制,它允许任务之间通过消息进行通信,实现数据交换。在这个实验中,我们看到了如何设计一个使用内建消息队列的应用程序。实验主要涉及了以下几个知识点: 1. **任务创建**:实验中有三个任务,start_task、main_task 和 msgdis_task。start_task 是启动任务,负责创建其他两个任务。在创建 msgdis_task 时,需要指定内建消息队列的长度,这通过宏定义 TASK_Q_NUM(这里是4)来设定。 2. **内建消息队列**:msgdis_task 任务拥有一个内建的消息队列,用于接收和处理来自其他任务或定时器的消息。这种队列是任务创建时的一部分,节省了系统资源,提高了效率。 3. **定时器**:实验中使用了一个定时器 1,其回调函数 tmr1_callback。当定时器超时,它会向 msgdis_task 的内建消息队列发送定时器运行次数的信息。 4. **消息传递**:定时器回调函数通过任务内建的消息队列将信息发送到 msgdis_task,而不是直接调用任务函数,这样避免了任务间的直接交互,遵循了操作系统对任务间通信的规则。 5. **主任务**:main_task 是主任务,负责检测按键输入和控制 LED0 的闪烁。当检测到按键 KWD_UP 被按下时,main_task 开启或关闭定时器 1,并监控 msgdis_task 的消息队列状态。 6. **UCOSIII API**:实验中会用到UCOSIII提供的API函数来创建任务、启动定时器、发送和接收消息等。例如,创建任务可能使用 OS_TaskCreate() 函数,启动定时器可能使用 OSTmrStart() 或 OSTmrStop(),而发送消息可能使用 OSQPost(),接收消息则使用 OSQReceive()。 7. **系统初始化**:在开始任务 start_task 中,执行了 CPU_Init() 来初始化CPU,并且如果 OS_CFG_STAT_TASK_EN 设置为大于0,还会初始化统计任务以监控CPU的使用情况。 这个实验提供了一个实际应用UCOSIII内建消息队列的示例,帮助开发者理解如何在多任务环境中有效地使用消息队列进行数据通信。同时,通过STM32F103系列开发板的实践,加深了对UCOSIII操作系统理解和嵌入式开发的技能。