内核实验七(消队列).pptVIP

  • 0
  • 0
  • 约3.47千字
  • 约 19页
  • 2019-02-14 发布于上海
  • 举报
内核实验七(消队列)

* * * * * * * 肇庆学院嵌入式嵌入式系统应用研究所 内核实验(七) 消 息 队 列 实验目的 掌握嵌入式实时操作系统μC/OS-II中消息队列机制的基本原理和使用方法。 消息队列是μC/OS-II中的一种通讯机制,它可以使一个任务或者中断服务子程序向另一个任务发送以指针方式定义的变量。因具体的应用有所不同,每个指针指向的数据结构变量也有所不同。 消息队列原理 7个应用任务: TA0TA1TA2TA3TA4TA5TaskCon(控制任务) 创建队列 以FIFO方式释放消息 以LIFO方式释放消息 清空消息队列、查询消息队列 删除消息队列 实验设计 #define OS_LOWEST_PRIO   11 /*任务优先级不可以大于11*/ #define OS_TASK_CREATE_EN 1 /*允许使用OSTaskCreate()*/ #define OS_MAX_TASKS    8 /*最多可以创建8个任务*/ #define OS_TASK_STAT_EN 0 /* 禁止统计任务*/ 操作系统配置 #define OS_Q_EN 1 /*是否允许使用消息队列功能*/ #define OS_Q_DEL_EN 1 /*是否允许使用OSQDel()*/ #define OS_Q_FLUSH_EN 1 /*是否允许使用 OSQFlush()*/ #define OS_Q_POST_EN 1 /*是否允许使用 OSQPost()*/ 操作系统配置 #define OS_TICKS_PER_SEC 200 /*设置每秒之内的时钟节拍数目*/ #define OS_MAX_EVENTS 2 /*最多可以有2个事件*/ #define OS_Q_POST_FRONT_EN 1 /*是否允许使用OSQPostFront()*/ #define OS_Q_QUERY_EN 1 /*是否允许使用OSQQuery()*/ OSTaskCreate():建立一个新任务 本实验中所用到的μC/OS-II相关函数 OSQCreate() :建立一个消息队列 OSQPend() :等待消息 OSQPostFront() :向消息队列发送消息 OSQPost():向消息队列发送消息 OSQQuery() :取得消息队列的信息 OSQDel() :删除消息队列 OSTimeDlyHMSM():将一个任务延时若干时间 OSQFlush ():清空消息队列 1、建立队列和创建起始任务TaskStart OSTaskCreate(TaskStart, (void *)0, TaskStartStk[TASK_STK_SIZE - 1], 0); q1 = OSQCreate(Msg1[0],6); q2 = OSQCreate(Msg2[0],6); 源程序说明 TaskStart负责: 安装时钟中断服务例程 ucos_x86_idt_set_handler(0x20,(void *)OSTickISR,0x8e00); 初始化操作系统时钟 ucos_timer_init(); 创建应用任务 TaskStartCreateTasks(); 源程序说明 2、创建任务 for (i = 0; i N_TASKS; i++) { OSTaskCreate(Taskq1, (void *)TaskData1[i], TaskStk1[i][TASK_STK_SIZE - 1], i+1); } for (i = 0; i N_TASKS; i++) { OSTaskCreate(Taskq2, (void *)TaskData2[i], TaskStk2[i][TASK_STK_SIZE - 1], i+4); } OSTaskCreate(TaskCon, (void *)0, TaskConStk[TASK_STK_SIZE - 1],i+4); 源程序说明 void Taskq1 (void *pdata) { …… for (;;) {

文档评论(0)

1亿VIP精品文档

相关文档