购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.5.2 样例工程任务设计

依据MQX第一样例工程的功能要求,需在苏州大学飞思卡尔嵌入式中心设计的AMQXFW工程组织框架下,在工程09_MQX\app目录中添加相关的任务函数,包括小灯1闪烁任务函数task_A()、小灯2闪烁任务函数task_B()、串口4发送数据到PC的task_C()任务函数、自启动任务函数task_main()、应用任务公共头文件app_inc.h,以及任务模板列表文件task_templates.c等。

1.小灯闪烁任务函数task_A()

小灯1任务函数task_A()和小灯2任务函数task_B()基本功能和实现方法是一样的,区别在于闪烁频率不同,小灯1每1秒闪烁一次,小灯2每2秒闪烁一次。下面仅对小灯1的程序实现进行分析。这里给出任务函数task_A()的源码。

在while(TRUE)永久循环体内,通过_time_delay函数实现时间的延时,每隔1 000 ms执行一次,切换灯的亮暗,_time_delay()的具体功能在3.4.4节延时函数_time_delay的使用方法与剖析中详细剖析。在延时期间操作系统可以调度执行其他的任务。

2.帧数据发送任务函数task_C()

对于串口4通信的实现包含接收中断的功能,依据ISR设计的基本原则,中断服务例程的设计尽可能简短,以便其他异步中断事件能得到响应。在串口4接收中断服务例程UART4_RX_ISR()中只完成数据接收到全局变量数组g_UART_ISR_buffer[]中,再由task_C()任务函数将全局变量中的数据通过串口发送到PC。中断服务例程UART4_RX_ISR()位于工程\source\isr.c文件中,这是兼容无操作系统的中断服务例程进行布置的,实现代码如下。

3.任务模板和任务公共头文件

编写好以上各任务后,必须在任务模板列表文件task_templates.c中按任务模板的格式进行登记,设置任务栈的大小、任务优先级以及任务属性等,为任务创建做好准备。在任务公共头文件app_inc.h中对各个任务进行声明,并在任务公共头文件定义任务模板索引号。 需要 注意的是,任务模板列表的最后一个任务模板必须为{0}, 它表示任务模板列表的结束。在任务创建过程中,经常需从任务模板列表的第一条信息,按模板索引号进行查找,若找到的模板索引号为0,表示已经到模板列表最后一项,查找过程结束。

4.自启动任务及任务的创建

自启动任务task_main是MQX启动后执行的第一个应用任务,它是在MQX系统初始化时由_mqx函数创建的。自启动任务的功能就是调用_task_create()函数创建其他的任务。根据给定的任务索引号,_task_create()函数从模板列表查找任务的相关信息创建任务,即把任务的相关信息填写到任务描述符节点,并把该节点加入任务就绪队列,供任务调度器调度。有关_task_create()函数详细功能参看5.2节。

5.串口4中断服务例程

串口4中断服务例程从串口接收数据组建数据帧。接收过程严格遵守数据帧格式的定义,当收到数据若为“A”,则认为是帧头,接着收到的第二个数据为数据长度,根据数据长度决定接收有效数据的个数,接收完有效数据后必须再收一个“D”作为帧尾,至此接收一帧数据操作结束,置接收成功信号量。若最后一个帧尾数据不为“D”,则认为前面收到的数据均为无效数据重新开始接收计数。 PFTKWCSVE6Qmkxm4blOZ+P4U0VyKbPfikpfFwjMEh/22VTFU4oq9w6wVjRqb5iKA

点击中间区域
呼出菜单
上一章
目录
下一章
×