弄了这么久ZigBee协议栈,今天终于有一点头绪了,基本上知道了整个系统任务怎么被添加,又是怎么被切换的一个过程。下面就简单讲一讲这部分内容。
首先看的当然是main()函数,不过这个函数不是今天的重点,里面有我添加的注释,先就一笔带过吧。
下面对ZigBee协议栈对事件的处理做一个总结。
在ZigBee协议栈中处理事件有三种方式:轮询、中断、(操作系统)任务。
其中轮询与中断学过单片机的都用过,在这就不必多说了。唯独任务(至少我所了解的)是操作系统才有的概念。使用任务处理事件就需要在一个事件产生时添加任务,在任务处理完毕时删除任务,还需要在不同任务间进行切换。在ZigBee协议栈中tasksEvents是一个任务是否存在的标志,当需要添加任务时通过调用函数osal_set_event()在tasksEvents中添加相应的掩码,当任务处理完毕时直接把相应的掩码清零即可。而任务切换则必须等到前一个任务处理完毕,并且没有优先级更高的任务时才被处理。而优先级是由数组tasksArr[]的成员的顺序决定的。在一些比较强大的操作系统当中这些东西都有,当然是会有所区别的,只不过要复杂得多,并且引入了一些新的概念像PCB、任务调度、进程、线程等,其中任务调度我的理解就是任务切换。像这些东西我所知道的与不知道的讲也讲不完,就并不多说了,还是回到我们的话题。
在ZigBee协议栈中任务的处理总结起来就一句话:任何一个任务都只有调用了函数osal_set_event()之后才能被处理。
当然事件与任务不是一回事,任务同中断一样只是处理事件的一种方式。而且通常是先有事件然后注册一个与事件对应的任务。没有事件当然也可以注册任务,不过这又有点扯远了。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !