1、OSAL的运行机理Operation mechanism of osal农业物联网技术导论目 录CONTENTSOSAL主要工作原理Main working principle of osalOSAL实现流程Osal implementation processMain working principle of osalOSAL主要工作原理任务2处理函数OSAL任务1任务2任务n任务1处理函数任务n处理函数工作方式:分时轮询任务工作时:按照预定的顺序查询各个任务如果某个任务有事件发生,则调用相应的事件处理函数进行处理如果没有,则继续查询下一个任务Osal implementation proc
2、essOSAL实现流程OSALOSAL启动启动任务任务初始化初始化任务调度任务调度与处理与处理Osal implementation processOSAL实现流程OSAL启动调用函数osal_init_system()完成Osal implementation processOSAL实现流程OSAL启动osal_init_system()osal_init_system()在在OSAL.cOSAL.c主要负责对OSAL相关使用资源的初始化Osal implementation processOSAL实现流程OSAL任务初始化调用osalInitTasks()完成Osal implementa
3、tion processOSAL实现流程OSAL任务初始化OSAL.c OSAL.c osalInitTasksosalInitTasks()()负责对于每一类型的任务进行初始化,压入数组Osal implementation processOSAL实现流程OSAL任务调度与处理OSAL.cOSAL.c调用osal_run_system()完成负责任务的查询与处理 Osal implementation processOSAL实现流程OSAL任务调度与处理 osal_run_system()一旦运行就会一直重复下去死循环Osal implementation processOSAL实现流程OS
4、AL轮询机制osal_run_systemosal_run_system()()轮询查看是否有事件发生有(通过break语句跳出循环):调用事件处理函数进行事件处理没有:循环继续查询下去Osal implementation processOSAL实现流程OSAL轮询机制如果有事件发生,则调用事件处理函数进行事件处理同时将未处理的事件返回 Osal implementation processOSAL实现流程轮询方式的实现事件表和函数表具体实现事件表和函数表具体实现事件事件表表定义一个整数类型的数组 taskEvent每一个数组单元存放一类 任务的事件是否发生的信息Osal implement
5、ation processOSAL实现流程轮询方式的实现事件表和函数表具体实现事件表和函数表具体实现Mac类型事件发生的信息放在taskEvent0 用户自定义的事件放在最后taskEventtasksCnt所有数组单元初始化为0(即初始化为没有事件发生)事件事件表表Osal implementation processOSAL实现流程轮询方式的实现事件表和函数表具体实现事件表和函数表具体实现事件事件表表对应一个函数表taskArr,taskArr存放事件处理函数的地址Osal implementation processOSAL实现流程轮询方式的实现事件表和函数表具体实现事件表和函数表具体实
6、现事件事件表表当轮询查到mac层有任务发生时taskEvent0 不为0调用taskArr0找到对应的处理函数对任务进行处理Osal implementation processOSAL实现流程事件表 该数组存放一个16位的整数每一位整数可以是0,也可以是1,每一位可以定义为一个事件的发生与否这个整数可以定义一类任务的16个不同的事件的发生接收到无线数据的事件为0 x02=0000 0010taskCnt为任务的总个数课程小结OSALOSAL实现流程实现流程OSALOSAL采用轮询式查询工作方式采用轮询式查询工作方式OSAL的启动、OSAL任务初始化、OSAL任务调度与处理三部分工作时不断地查看是否有事件发生如果有事件发生,就调用事件处理函数进行事件响应处理