ZIGBEE:协议栈工作流程简要分析与学习方法记录



     消息处理机制:一般是通过回调函数实现的。例如:在按键发生时,它会调用按键的回调函数(响应函数也叫),通过回调函数生成一个任务出来,然后通过任务发送osal_msg_send函数,发送消息处理循环,注册事件,等待处理。最后应用层事件处理函数监测到事件之后,调用相应的处理函数。

    如果出现本次任务处理周期中的间隙时间内没有完成任务,就会等到下一个 周期继续处理。所以,协议栈调试中,单步调试是没有作用的,整个协议栈都是运用定时器控制,单步运行无法控制定时器。个人觉得没必要去探究无线数据是如何发送的,协议栈分层比较多,底层的802.15.4,深究没必要,用户只需关注APP文件夹就行了。

   看了几天的协议栈,一个学成的同事就告诉我,协议栈如果去一句话一句话的探究,少说3个月才能搞定。费时费力。

   个人方法:了解协议栈的运行流畅,消息处理流程,就可以知道怎么去添加任务,也就是你需要加载进去的处理事件(传感器这些处理函数),还有怎么去初始化IO口,时钟,串口这些,这样就够了,很快就能上手项目。

   

下面对ZigBee协议栈对事件的处理做一个总结:

ZigBee协议栈中处理事件有三种方式:轮询、中断、(操作系统)任务。

其中轮询与中断学过单片机的都用过,在这就不必多说了。唯独任务(至少我所了解的)是操作系统才有的概念。使用任务处理事件就需要在一个事件产生时添加任务,在任务处理完毕时删除任务,还需要在不同任务间进行切换。在ZigBee协议栈中tasksEvents是一个任务是否存在的标志,当需要添加任务时通过调用函数osal_set_event()在tasksEvents中添加相应的掩码,当任务处理完毕时直接把相应的掩码清零即可。而任务切换则必须等到前一个任务处理完毕,并且没有优先级更高的任务时才被处理。而优先级是由数组tasksArr[]的成员的顺序决定的。在一些比较强大的操作系统当中这些东西都有,当然是会有所区别的,只不过要复杂得多,并且引入了一些新的概念像PCB、任务调度、进程、线程等,其中任务调度我的理解就是任务切换。像这些东西我所知道的与不知道的讲也讲不完,就并不多说了,还是回到我们的话题。

ZigBee协议栈中任务的处理总结起来就一句话:任何一个任务都只有调用了函数osal_set_event()之后才能被处理。

当然事件与任务不是一回事,任务同中断一样只是处理事件的一种方式。而且通常是先有事件然后注册一个与事件对应的任务。没有事件当然也可以注册任务,不过这又有点扯远了。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值