【K70EK_T7_MQX例程】019Task_queue(任务队列)

By Mcuzone

调试串口波特率:115200-uart2
基于MDKK70-EK_T7硬件平台


具体请参考MQX用户手册
串口输出:
Tick

任务队列:
3.7.8.1 创建和撤消任务队列
在应用程序执行具体任务调度前,必须通过调用_taskq_create()按照任务队列的排队规则初始化任务队列。MQX创建任务队列并返回一个队列ID,该队列ID被用于访问任务队列。 任务队列不是创建它的任务的资源,而是系统资源,在创建它的任务没有终止时不会被撤消。 任务可通过调用_taskq_detroy()撤消一任务队列。如果任务队列中有任务,MQX将它们移入就绪队列中。
3.7.8.2 挂起任务
任务通过调用_taskq_suspend()在指定的任务队列中挂起自己。MQX按照任务队列规则将任务置入队列中(阻塞任务)。
74
3.7.8.3 重启任务
任务通过调用_taskq_resume()从指定的任务队列中删除一个或所有任务。MQX将任务置入就绪队列。
3.7.8.4 举例:任务同步
一个任务被一个ISR同步,另一个任务模拟中断。Service_task任务等待周期性的中断,每当中断产生时,打印出消息。任务首先创建任务队列,然后在队列中将自己挂起。Simulated_ISR_task任务调用_time_delay()模拟一个周期性中断。当时间溢出时,调度service_task任务。
3.7.8.4.1 代码分析
/* taskq.c */ 
#include <mqx.h> 
#include <fio.h> 
/* Task IDs */ 
#define SERVICE_TASK 5 
#define ISR_TASK 6 
extern void simulated_ISR_task(uint_32); 
extern void service_task(uint_32); 
TASK_TEMPLATE_STRUCT MQX_template_list[] = { 
{SERVICE_TASK, service_task, 600, 5, "service", MQX_AUTO_START_TASK, 0L, 0}, 
{ISR_TASK, simulated_ISR_task, 600, 5, "simulated_ISR", 0, 0L, 0}, 
{0, 0, 0, 0, 0, 0, 0L, 0} }; 
pointer my_task_queue; 
/*任务*-----------------------------------------------------* 
* 任务名 : 模拟ISR任务 
* 注释 : 
* 该任务暂停和恢复任务队列 
*结束*-----------------------------------------------------*/ 
void simulated_ISR_task(uint_32 initial_data) {
while (TRUE) {
_time_delay(200); 
_taskq_resume(my_task_queue, FALSE); } } 
/*任务*-----------------------------------------------------* 
* 任务名 : service_task 
* 注释 :该任务创建任务队列以及simulated_ISR_task任务,然后进入无限循环,打印“Tick”并且挂起任务队列。 
*结束*-----------------------------------------------------*/ 
void service_task(uint_32 initial_data) { 
_task_id second_task_id; /* Create a task queue: */ 
my_task_queue = _taskq_create(MQX_TASK_QUEUE_FIFO); 
if (my_task_queue == NULL) { _mqx_exit(0); } 
/* 创建任务*/ 
second_task_id = _task_create(0, ISR_TASK, 0); 
if (second_task_id == MQX_NULL_TASK_ID) { 
printf("\n Could not create simulated_ISR_task\n"); 
_mqx_exit(0); } 
while (TRUE) 
{ printf(" Tick \n"); 
_taskq_suspend(my_task_queue); } }



例程及示例:

链接: http://pan.baidu.com/s/1bnzQnkr 密码: 5q5i
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值