- 1、本文档共17页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验教程八---zstack操作系统原理之任务调度实验
无线传感器网络实验教程z-stack操作系统原理实验之任务调度 主讲教师:柯宗武 2013年9月 本章内容 介绍ZStack软件流程 介绍ZStack任务调度机制 实验内容 阅读分析精简OS代码,理解任务调度。 添加一个串口接收数据的用户事件,并从串口发送收到串口数据的信息显示 添加一个任务,周期性点亮led OSAL轮询操作系统 OSAL(Operating System Abstraction Layer) 操作系统抽象层 定义了其它模块中事件的处理机制。它将每一模块内的所有事件放在一个任务中进行处理,任务间的通信通过传递系统消息来完成,这使得协议栈中的事件处理更类似于一个操作系统; 同时它还定义了堆内存管理、NV(non-volatile,非易失)存储系统的管理、电源管理、时钟管理等。 OSAL的主要功能 任务的登记,加载,初始化及启动任务调度 任务之间的信息传递 任务同步 中断操作 定时器功能 内存单元管理 OSAL任务调度 基本思想 每个任务给一个优先级,优先级高的先执行,优先级低的后执行。优先级0的优先级最高; 每个任务内通过事件控制程序流程; 一旦发生中断,先执行中断处理程序,在返回操作系统进行任务调度 精简OS中与任务调度相关的数据结构 任务ID uint8 taskId; 当前任务ID uint8 testOSTaskID 当前系统中的任务数 const uint8 TaskCont; 任务---处理函数映射表 typedef uint16 (*OSEventHandle)( uint8 taskId,uint16 events ); 精简OS中与任务调度相关的数据结构 任务---处理函数映射表 const OSEventHandle TasksFn[] = { testOsProcess //C:将任务进程写入到任务函数指针列表中 ; }; 精简OS中与任务调度相关的数据结构 任务---事件映射表 uint16 TaskEvents[]; 数组下标对应任务编号; 每个任务可以有16个事件; 数组的每一个元素对应一个任务所有的事件,16位对应了16个事件,其中最高位表示是否为系统事件,最高位为1,表示系统事件,最高位为0,表示非系统事件。 精简OS中与任务调度相关的数据结构 任务---事件映射表 任务事件对应位由用户程序自己定义; 例如: #define TEST_EVENT_EVT 0x0001 #define TEST_TIMER_EVT 0x0002 精简OS中与任务调度相关的函数API void OS_IntTasks( void ) 功能:初始化所有任务与各任务对应的事件 精简OS中与任务调度相关的函数API uint8 osal_set_event( uint8 task_id, uint16 event_flag ) 功能: 触发一个/组指定任务的事件。 参数: task_id 任务ID event_flag 事件 例如: osal_set_event(testOSTaskID,0x8001 ); //触发事件 精简OS中与任务调度相关的函数API OSAL使用事件与消息来控制程序流程; 事件可以预先定义好,但不知道会在哪个确定时间点被触发; 消息是用来传递信息的,即有两个主体(如task1和task2),在这两个主体想要通信的时候,就会用到消息。 精简OS中只使用了事件。 精简OS中与任务调度相关的函数API uint8 osal_clr_event( uint8 task_id, uint16 event_flag ); 功能: 清除一个/组指定任务的事件,事件可以是在事件列表中已经初触发也可以是没有被触发的事件。 参数: task_id 任务ID event_flag 事件 精简OS中与任务调度相关的函数API void OS_Scan( void ); 功能:该函数执行一些扫描任务,例如按键,LED等 精简OS中与任务调度相关的函数API void OS_Start( void ); 功能:OS的主循环 源代码分析 * Copyright:柯宗武 这个声明引入了 OSEventHandle类型作为函数指针的同义字,该函数有两个 uint8、uint16类型的参数以及一个 uint16类型的返回值。 该数组中存放的是事件处理函数的入口地址;数组下标与任务编号taskId对应 清除所有任务的事件 增加任务初始化 *
文档评论(0)