ZIGBEE:协议栈工作流程简要分析与学习方法记录
2015-04-28 09:55
656 查看
消息处理机制:一般是通过回调函数实现的。例如:在按键发生时,它会调用按键的回调函数(响应函数也叫),通过回调函数生成一个任务出来,然后通过任务发送osal_msg_send函数,发送消息处理循环,注册事件,等待处理。最后应用层事件处理函数监测到事件之后,调用相应的处理函数。
如果出现本次任务处理周期中的间隙时间内没有完成任务,就会等到下一个 周期继续处理。所以,协议栈调试中,单步调试是没有作用的,整个协议栈都是运用定时器控制,单步运行无法控制定时器。个人觉得没必要去探究无线数据是如何发送的,协议栈分层比较多,底层的802.15.4,深究没必要,用户只需关注APP文件夹就行了。
看了几天的协议栈,一个学成的同事就告诉我,协议栈如果去一句话一句话的探究,少说3个月才能搞定。费时费力。
个人方法:了解协议栈的运行流畅,消息处理流程,就可以知道怎么去添加任务,也就是你需要加载进去的处理事件(传感器这些处理函数),还有怎么去初始化IO口,时钟,串口这些,这样就够了,很快就能上手项目。
下面对ZigBee协议栈对事件的处理做一个总结:
在ZigBee协议栈中处理事件有三种方式:轮询、中断、(操作系统)任务。
其中轮询与中断学过单片机的都用过,在这就不必多说了。唯独任务(至少我所了解的)是操作系统才有的概念。使用任务处理事件就需要在一个事件产生时添加任务,在任务处理完毕时删除任务,还需要在不同任务间进行切换。在ZigBee协议栈中tasksEvents是一个任务是否存在的标志,当需要添加任务时通过调用函数osal_set_event()在tasksEvents中添加相应的掩码,当任务处理完毕时直接把相应的掩码清零即可。而任务切换则必须等到前一个任务处理完毕,并且没有优先级更高的任务时才被处理。而优先级是由数组tasksArr[]的成员的顺序决定的。在一些比较强大的操作系统当中这些东西都有,当然是会有所区别的,只不过要复杂得多,并且引入了一些新的概念像PCB、任务调度、进程、线程等,其中任务调度我的理解就是任务切换。像这些东西我所知道的与不知道的讲也讲不完,就并不多说了,还是回到我们的话题。
在ZigBee协议栈中任务的处理总结起来就一句话:任何一个任务都只有调用了函数osal_set_event()之后才能被处理。
当然事件与任务不是一回事,任务同中断一样只是处理事件的一种方式。而且通常是先有事件然后注册一个与事件对应的任务。没有事件当然也可以注册任务,不过这又有点扯远了。
如果出现本次任务处理周期中的间隙时间内没有完成任务,就会等到下一个 周期继续处理。所以,协议栈调试中,单步调试是没有作用的,整个协议栈都是运用定时器控制,单步运行无法控制定时器。个人觉得没必要去探究无线数据是如何发送的,协议栈分层比较多,底层的802.15.4,深究没必要,用户只需关注APP文件夹就行了。
看了几天的协议栈,一个学成的同事就告诉我,协议栈如果去一句话一句话的探究,少说3个月才能搞定。费时费力。
个人方法:了解协议栈的运行流畅,消息处理流程,就可以知道怎么去添加任务,也就是你需要加载进去的处理事件(传感器这些处理函数),还有怎么去初始化IO口,时钟,串口这些,这样就够了,很快就能上手项目。
下面对ZigBee协议栈对事件的处理做一个总结:
在ZigBee协议栈中处理事件有三种方式:轮询、中断、(操作系统)任务。
其中轮询与中断学过单片机的都用过,在这就不必多说了。唯独任务(至少我所了解的)是操作系统才有的概念。使用任务处理事件就需要在一个事件产生时添加任务,在任务处理完毕时删除任务,还需要在不同任务间进行切换。在ZigBee协议栈中tasksEvents是一个任务是否存在的标志,当需要添加任务时通过调用函数osal_set_event()在tasksEvents中添加相应的掩码,当任务处理完毕时直接把相应的掩码清零即可。而任务切换则必须等到前一个任务处理完毕,并且没有优先级更高的任务时才被处理。而优先级是由数组tasksArr[]的成员的顺序决定的。在一些比较强大的操作系统当中这些东西都有,当然是会有所区别的,只不过要复杂得多,并且引入了一些新的概念像PCB、任务调度、进程、线程等,其中任务调度我的理解就是任务切换。像这些东西我所知道的与不知道的讲也讲不完,就并不多说了,还是回到我们的话题。
在ZigBee协议栈中任务的处理总结起来就一句话:任何一个任务都只有调用了函数osal_set_event()之后才能被处理。
当然事件与任务不是一回事,任务同中断一样只是处理事件的一种方式。而且通常是先有事件然后注册一个与事件对应的任务。没有事件当然也可以注册任务,不过这又有点扯远了。
相关文章推荐
- 基于Andoird 4.2.2的Account Manager源代码分析学习:AccountManager的简要工作流程
- openVswitch(OVS)实现之源代码分析之工作流程
- HISI3520DV300 折腾记录(一)之 《Uboot-Start.S分析 以及 相关启动流程分析》
- 天天记录 - Android invalidate流程方法调用堆栈分析
- Parcel数据传输过程,简要分析Binder流程
- 如何在qualcomm平台Android点亮一个LED工作流程分析
- HDFS源码分析心跳汇报之BPServiceActor工作线程运行流程
- Android 4.4 Kitkat Phone工作流程浅析(三)__MO(去电)流程分析
- 离职后,失业金领取流程记录(杭州工作)
- 具体分析Struts工作流程
- Libevent源码分析-----Libevent工作流程探究
- NSURLSession使用说明及后台工作流程分析
- apache shiro的工作流程分析
- openVswitch(OVS)源代码分析之工作流程(数据包处理)
- Ztack学习笔记(5)-协议栈工作流程和无线收发控制LED
- Twitter Storm源代码分析之acker工作流程
- storm源代码分析之acker工作流程
- lvs的DR模型工作流程从ip数据层的详细分析
- 开源社区提交patch的工作流程分析
- nova云主机迁移简要流程分析