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); } }
基于MDKK70-EK_T7硬件平台
![](https://i-blog.csdnimg.cn/blog_migrate/41196079415127479a44a4baf72ee9f8.jpeg)
具体请参考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); } }
![](https://i-blog.csdnimg.cn/blog_migrate/df96fa64ac3470ed04079df63a049f6e.jpeg)
例程及示例:
链接:
http://pan.baidu.com/s/1bnzQnkr 密码: 5q5i