MQX培训1_调度器.pptx_第1页
MQX培训1_调度器.pptx_第2页
MQX培训1_调度器.pptx_第3页
MQX培训1_调度器.pptx_第4页
MQX培训1_调度器.pptx_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、RTOS - Kernel,MQX 培训- 1,Guo Jia,Applications Engineer,Updated May 2012,培训内容,RTOS上的程序运行 任务 任务典型代码 状态转换 调度器 抢占 配置 任务同步 Lightweight(轻量级) semaphore Lightweight event Lightweight message queue,进一步了解 示例 Hello MQX Schedule FIFO Schedule Round robin Semaphore Event Message Queue,RTOS上的程序运行,Task management(S

2、cheduler),CPU,Interrupt,Task 1,Task 2,Task ,Idle,Int1,Int2,Int,程序要么运行中断处理程序,要么运行任务处理程序 从应用角度,我们需要设计中断和任务的处理内容 中断是不受调度器管理的 当中断处内容较大时,建议放到任务里去做,通过同步机制进行通信,4,任务 典型的任务代码结构,void task(uint_32 para) while(1) wait(); process(); ,由于调度器的存在,任务不会一直占用CPU。,5,Active,Ready,Blocked,Blocking Call,Event comes,Terminat

3、ed,Higher-priority Task becomes Ready Time Slice Expires Interrupt comes in,Explicit Termination,TaskStarts,任务 状态转换,Event comes,Higher-priority Task get blocked. Interrupt exit.,6,6,调度器 抢占,当有更高优先级的任务就绪时,发生抢占,之前占用CPU的任务仍然在就绪的状态,但不占用CPU。 发生条件 中断或任务内调用任务同步函数使更高优先级的任务就绪,调度器 同等优先级的任务调度模式配置,可配置为 : FIFO调度

4、先入先调度 Round Robin调度 按时间片进行轮转,FIFO 调度,优先级,低,高,就绪任务FIFO,CPU,时间,调度器启动,FIFO 调度,优先级,低,高,就绪任务FIFO,CPU,时间,调度器启动,FIFO 调度,优先级,低,高,就绪任务FIFO,CPU,时间,调度器启动,Round-Robin 调度,time,50ms,100ms,150ms,T0,200ms,75ms,Task 1,50ms,Task 2,60ms,Task 3,Time Slice = 50ms Task 1 = First In,Task1,Task2,Task3,Task1,Task3,time,Same

5、 Priority,175ms,185ms,创建任务,const TASK_TEMPLATE_STRUCT MQX_template_list = /* Task Index, Function, Stack, Priority, Name, Attributes, Param, Time Slice */ INDEX0, task_compute, 4000, 8, task1, MQX_AUTO_START_TASK, 0, 0 , INDEX1, task_i2c_slave, 4000, 9, task2, MQX_AUTO_START_TASK, 0, 0 , INDEX2, tas

6、k_print, 1000, 10, “task3, MQX_AUTO_START_TASK, 0, 0 , 0 ; Note: 1.优先级必须大于 7, 最小为 8. 2.使用连续优先级,比如 8,9,10,11, 不要使用 8, 9, 100, 200 3.使能robin调度: MQX_AUTO_START_TASK | MQX_TIME_SLICE_TASK 4. 对于Round Robin,在user_config.h添加 #define MQX_HAS_TIME_SLICE 1 , 并且重编译 BSP and PSP.,13,同步机制,同步机制用于解决: 互斥 控制同步 数据同步 同

7、步机制包含: Semaphores(信号量) Events(事件) Message Queues(消息队列) 根据当前具体的应用设计正确的同步机制,13,14,Light weight 和 non light weight,Light weight 新推出的接口 低指令开销 低内存开销 Non - light weight 开销较大 建议: 尽量使用轻量级接口。,14,信号量 控制同步,_lwsem_wait(),_lwsem_create(count),TaskA,TaskB/Interrupt,_lwsem_post(),当COUNT不是0, task A会继续执行. COUNT 在调用

8、_lwsen_wait() 后减1 COUNT 在调用_lwsen_post()后加1,信号量 互斥控制,_lwsem_wait(),_lwsem_create(1),TaskA,TaskB,COUNT,_lwsem_wait() 和 _lwsem_post()在同一个任务里匹配调用 COUNT 只能是0 或1,不会大于1,_lwsem_post(),_lwsem_wait(),_lwsem_post(),Lightweight Event,OR, 任何一个bit有效,事件有效. AND, 所有比特有效,事件有效.,_lwevent_wait_for (mask, all)_lwevent_c

9、lear(mask),_lwevent_wait_for (mask, any)_lwevent_clear(mask),32 bits,_lwevent_create,Task C/Interrupt,TaskB,TaskA,18,Lightweight Message Queue,_lwmsgq_init() _lwmsgq_send(),_lwmsgq_receive() Blocking wait Read the message Process,Task A/Interrupt,Task B,数据控制,任务B在被唤醒的同时,还会接收到数据做进一步处理 典型情况下,一个任务有一个属于自

10、己的消息队列,其他任务或中断向消息队列发生消息 队列的大小是按32bit的word计算的,不是按byte!,进一步了解,MQX Release Notes MQX Users Guide Writing First MQX Application (AN3905) Using MQX: RTCS, USB, and MFS (AN3907) How to Develop I/O Drivers for MQX (AN3902) IP Camera and USB Snapshot with MQX (AN4022) Supporting New Tool chains with Freescale MQX RTOS (AN4190) Motor Control Under the Freescale MQX Operating System (AN4254) MQX Board Support Package Porting Guide (AN4287),示例,Hello world Schedule Preempty Schedule Round robin Lightweight Semaphore Light

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论