BLE中OSAL的运行机理怎么理解?
来源:互联网 发布:行车记录仪支架淘宝 编辑:程序博客网 时间:2024/05/17 01:19
OSAL的中文意思就是操作系统抽象层
在蓝牙4.0BLE协议栈中,OSAL负责调度各个任务的运行,如果有事件发生了,则会调用相应的事件处理函数进行处理,其工作原理示意图如下。
1.其中,值得我们关注的就是事件和事件处理函数是如何联系起来的呢?
(1)首先,建立一个事件表,保存各个任务对应的事件,建立另一个函数表,保存各个任务事件处理函数的地址,然后对这两个表建立某种对应关系,当某一个事件发生时则查找到相应的事件处理函数即可。
(2)现在问题转换为:用什么样的数据结构来实现时间表和函数表呢?如何将事件表和函数表建立某种对应关系呢?
在蓝牙4.0BLE协议栈中,有三个变量至关重要!!!!!!
1)taskCnt:该变量保存了任务的总个数。
该变量的声明为:uint8 taskCnt。其中uinit8的定义为:typedef unsigned char uinit8。
2)taskEvents:是一个指针,指向了事件表的首地址。
该变量的声明为:uinit16 *taskEvents。其中uinit16的定义为:typedef unsigned short uinit16。
3)taskArr:这是一个数组,该数组的每一项都是一个函数指针,指向了事件处理函数。该数组的声明:
pTaskEventHandlerFn task[]。其中pTaskEventHandlerFn的定义如下:
type unsigned short (*pTaskEventHandlerFn)(unsigned char task_id,unsigned short event)
这定义了一个函数指针。
所以taskArr数组的每一项都是一个函数指针,指向了对应的事件处理函数。其中事件表和函数表的关系如下图所示。
我们谈到这里不知道大家有没有清楚认识一点,我接着总结一下:
OSAL的工作原理就是通过taskEvents指针方位事件表的每一项,如果有事件发生,则查找函数表找到事件处理函数进行处理,处理完后,继续访问事件表,查看是否有事件发生,无线循环。
从某种意义上说,OSAL是一种基于事件驱动的轮训是操作系统。事件驱动是指发生事件后采取相应的事件处理方法,轮训是指不断的查询是否有事件发生。
- BLE中OSAL的运行机理怎么理解?
- ble学习笔记九----------ble协议栈之OSAL的运行机理
- Zigbee协议栈中OSAL的运行机理
- 在Tomcat中理解Servlet的运行机理
- Z-Stack/ble OSAL 中OSAL按键事件的触发流程分析
- OSAL系统的运行
- TI BLE STACK - OSAL
- java虚拟机的运行机理
- java虚拟机的运行机理
- zigbee学习一OSAL运行方式的理解和简单组网实验
- 精读OSAL --回调函数的理解
- Android BLE中传输数据的最大长度怎么破
- Android BLE中传输数据的最大长度怎么破
- 垃圾收集器GC的运行机理
- 默认复制构造函数的运行机理
- MapReduce的运行机理 很详细。
- 深入了解Struts1的运行机理
- Filter过滤器的运行机理与作用
- FastStone Cpture 8.5和Snagit 13.1.3使用比较
- 小红书学习——HTML简介:
- 不区分大小写的输入和ajax请求数据
- c语言中链表的实现
- JMeter处理返回结果unicode
- BLE中OSAL的运行机理怎么理解?
- bzoj水题
- 比特币脚本及其改进一例
- 二叉树最近公共父节点(记录根到某一节点路径)
- Elasticsearch 插件head 端增加一条记录和增加一个字段
- == 和equals 区别
- ubuntu 查看可用的shell和当前使用的shell
- 小红书学习——JS(不定时更新)
- SQL总结(六)触发器