实验教程八---zstack操作系统原理之任务调度实验
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
初始化所有任务与各任务对应的事件清除所有任务的事增加任务初始uint8osalseteventuint8taskiduint16eventflagtaskid任务ideventflag事件触发事件精简os中与任务调度相关的函数api事件可以预先定义好但不知道会在哪个确定时间点被触发
无线传感器网络实验教程
精简OS中与任务调度相关的数据结构
任务---事件映射表
任务事件对应位由用户程序自己定义; 例如: #define TEST_EVENT_EVT 0x0001 #define TEST_TIMER_EVT 0x0002
精简OS中与任务调度相关的函数API
void OS_IntTasks( void )
参数:
精简OS中与任务调度相关的函数API
void OS_Scan( void );
功能:该函数执行一些扫描任务,例如按键,LED 等
精简OS中与任务调度相关的函数API
void OS_Start( void );
功能:OS的主循环
源代码分析
精简OS中与任务调度相关的数据结构
任务ID
uint8 taskId;
这个声明引入了 OSEventHandle类型 uint8 testOSTaskID 作为函数指针的同义 字,该函数有两个 当前系统中的任务数 uint8、uint16类型的参 const uint8 TaskCont; 数以及一个 uint16类 型的返回值。 任务---处理函数映射表
OSAL的主要功能
任务的登记,加载, 初始化及启动任务调 度 任务之间的信息传递 任务同步 中断操作 定时器功能 内存单元管理
OSAL任务调度
基本思想
每个任务给一个优先级,优先级高的先执行,优先 级低的后执行。优先级0的优先级最高; 每个任务内通过事件控制程序流程; 一旦发生中断,先执行中断处理程序,在返回操作 系统进行任务调度
精简OS中与任务调度相关的函数API
uint8 osal_clr_event( uint8 task_id, uint16 event_flag );
功能:
清除一个/组指定任务的事件,事件可以是在事件列表中 已经初触发也可以是没有被触发的事件。 task_id 任务ID event_flag 事件
当前任务ID
typedef uint16 (*OSEventHandle)( uint8 taskId,uint16 events );
精简OS中与任务调度相关的数据结构
任务---处理函数映射表
const OSEventHandle TasksFn[] = { testOsProcess //C:将任务进程写入到任务函数 指针列表中 ; }; 该数组中存放的是
OSAL轮询操作系统
OSAL(Operating System Abstraction Layer) 操作系统抽象层
定义了其它模块中事件的处理机制。它将每一模块 内的所有事件放在一个任务中进行处理,任务间的 通信通过传递系统消息来完成,这使得协议栈中的 事件处理更类似于一个操作系统; 同时它还定义了堆内存管理、NV(non-volatile,非 易失)存储系统的管理、电源管理、时钟管理等。
参数:
例如:
精简OS中与任务调度相关的函数API
OSAL使用事件与消息来控制程序流程;
事件可以预先定义好,但不知道会在哪个确定时间 点被触发; 消息是用来传递信息的,即有两个主体(如task1 和task2),在这两个主体想要通信的时候,就会 用到消息。 精简OS中只使用了事件。
功能:初始化所有任务与各任务对应的事件
清除所有 任务的事 件
增加任 务初始 化
精简OS中与任务调度相关的函数API
uint8 osal_set_event( uint8 task_id, uint16 event_flag )
功能:
触发一个/组指定任务的事件。 task_id 任务ID event_flag 事件 osal_set_event(testOSTaskID,0x8001 ); //触发事件
事件处理函数的入 口地址;数组下标 与任务编号taskId对 应
精简OS中与任务调度相关的数据结构
任务---事件映射表
uint16 TaskEvents[];
数组下标对应任务编号; 每个任务可以有16个事件; 数组的每一个元素对应一个任务所有的事件,16位对应了16 个事件,其中最高位表示是否为系统事件,最高位为1,表 示系统事件,最高位为0,表示非系统事件。
z-stack操作系统原理实验 之任务调度
主讲教师:柯宗武 2013年9月
Copyright:柯宗武
本章内容
介绍ZStack软件流程 介绍ZStack任务调度机制
实验内容
阅读分析精简OS代码,理解任务调度。 添加一个串口接收数据的用户事件,并从串口 发送收到串口数据的信息显示 添加一个任务,周期性点亮led
无线传感器网络实验教程
精简OS中与任务调度相关的数据结构
任务---事件映射表
任务事件对应位由用户程序自己定义; 例如: #define TEST_EVENT_EVT 0x0001 #define TEST_TIMER_EVT 0x0002
精简OS中与任务调度相关的函数API
void OS_IntTasks( void )
参数:
精简OS中与任务调度相关的函数API
void OS_Scan( void );
功能:该函数执行一些扫描任务,例如按键,LED 等
精简OS中与任务调度相关的函数API
void OS_Start( void );
功能:OS的主循环
源代码分析
精简OS中与任务调度相关的数据结构
任务ID
uint8 taskId;
这个声明引入了 OSEventHandle类型 uint8 testOSTaskID 作为函数指针的同义 字,该函数有两个 当前系统中的任务数 uint8、uint16类型的参 const uint8 TaskCont; 数以及一个 uint16类 型的返回值。 任务---处理函数映射表
OSAL的主要功能
任务的登记,加载, 初始化及启动任务调 度 任务之间的信息传递 任务同步 中断操作 定时器功能 内存单元管理
OSAL任务调度
基本思想
每个任务给一个优先级,优先级高的先执行,优先 级低的后执行。优先级0的优先级最高; 每个任务内通过事件控制程序流程; 一旦发生中断,先执行中断处理程序,在返回操作 系统进行任务调度
精简OS中与任务调度相关的函数API
uint8 osal_clr_event( uint8 task_id, uint16 event_flag );
功能:
清除一个/组指定任务的事件,事件可以是在事件列表中 已经初触发也可以是没有被触发的事件。 task_id 任务ID event_flag 事件
当前任务ID
typedef uint16 (*OSEventHandle)( uint8 taskId,uint16 events );
精简OS中与任务调度相关的数据结构
任务---处理函数映射表
const OSEventHandle TasksFn[] = { testOsProcess //C:将任务进程写入到任务函数 指针列表中 ; }; 该数组中存放的是
OSAL轮询操作系统
OSAL(Operating System Abstraction Layer) 操作系统抽象层
定义了其它模块中事件的处理机制。它将每一模块 内的所有事件放在一个任务中进行处理,任务间的 通信通过传递系统消息来完成,这使得协议栈中的 事件处理更类似于一个操作系统; 同时它还定义了堆内存管理、NV(non-volatile,非 易失)存储系统的管理、电源管理、时钟管理等。
参数:
例如:
精简OS中与任务调度相关的函数API
OSAL使用事件与消息来控制程序流程;
事件可以预先定义好,但不知道会在哪个确定时间 点被触发; 消息是用来传递信息的,即有两个主体(如task1 和task2),在这两个主体想要通信的时候,就会 用到消息。 精简OS中只使用了事件。
功能:初始化所有任务与各任务对应的事件
清除所有 任务的事 件
增加任 务初始 化
精简OS中与任务调度相关的函数API
uint8 osal_set_event( uint8 task_id, uint16 event_flag )
功能:
触发一个/组指定任务的事件。 task_id 任务ID event_flag 事件 osal_set_event(testOSTaskID,0x8001 ); //触发事件
事件处理函数的入 口地址;数组下标 与任务编号taskId对 应
精简OS中与任务调度相关的数据结构
任务---事件映射表
uint16 TaskEvents[];
数组下标对应任务编号; 每个任务可以有16个事件; 数组的每一个元素对应一个任务所有的事件,16位对应了16 个事件,其中最高位表示是否为系统事件,最高位为1,表 示系统事件,最高位为0,表示非系统事件。
z-stack操作系统原理实验 之任务调度
主讲教师:柯宗武 2013年9月
Copyright:柯宗武
本章内容
介绍ZStack软件流程 介绍ZStack任务调度机制
实验内容
阅读分析精简OS代码,理解任务调度。 添加一个串口接收数据的用户事件,并从串口 发送收到串口数据的信息显示 添加一个任务,周期性点亮led