level 2
SEegg♀
楼主
zigbee osal_start_timerEx( )
最近一直在学习关于ZIGBEE方面的知识,其实和大多数学习者一样,刚开始什么都不懂,也就是到网上看一些资料。在这里我感谢那么无私奉献的网友们,是你们让我们这些想学习的新手有了很好的学习机会!谢谢!但是呢,随着学习的不断加深,我发现网上有些东西并不完全正确。我拿个例子来说吧!比如说:osal 里面的osal_start_timerEx( ) 这个函数、我在网上看到一些高人的解释是这样的。定时循环向任务发送事件。。其实函数解释原型是这样的:
osal_start_timerEx( )
Description
This function is called to start a timer. When the timer expires, the given event bit will be set. The event will be set for the task specified by taskID. This timer is a one shot timer, meaning that when the timer expires it isn’t reloaded.
我觉得吧英文差不能这个也读不懂吧!我个人的解释是这样的。这个函数的意思就是在定时执行处理事件的任务。也就是时间过完之后才把这个事件用事件处理函数执行、起到一个时间管理事件的作用。
很多时候,事件并不要求立即得到处理,而是要求过一定的时间后再
进行处理。因此,往往会遇到下面情况:假设A事件发生后要求lO秒之后执行,
B事件在A事件发生1秒后产生,且B事件要求5秒后执行。从时间轴的角度
上,我们可以知道,B事件虽然在A事件之后发生,但应当在A事件之前被处
理。为了按照合理的时间顺序来处理不同事件的执行,这就需要对各种不同的事
件进行时间管理。OSAL调度程序设计了与时间管理相关的函数,用来管理各种
不同的要被处理的事件。
对事件进行时间管理,OSAL也采用了链表的方式进行,每当发生一个要被
处理的事件后,就启动一个逻辑上的定时器,并将此定时器添加到链表之中。利
用硬件定时器作为时间操作的基本单元。设置时间操作的最小精度为lms,每
lms硬件定时器便产生一个时间中断,在时间中断处理程序中去更新定时器链
表。每次更新,就将链表中的每一项时间计数减l,如果发现定时器链表中有某
一表项时间计数已经减到0,则将这个定时器从链表中删除,并设置相应的事件
标志。这样任务调度程序便可以根据事件标志进行相应的事件处理。根据这种思
路,来自协议栈中的任何事件都可以按照时间顺序得到处理。从而提高了协议栈
设计的灵活性。
我最后想说的是:如果自己真的没有足够的水平就不要在网上发表技术性的文章。这样会误导很多学生、
2014年07月07日 03点07分
1
最近一直在学习关于ZIGBEE方面的知识,其实和大多数学习者一样,刚开始什么都不懂,也就是到网上看一些资料。在这里我感谢那么无私奉献的网友们,是你们让我们这些想学习的新手有了很好的学习机会!谢谢!但是呢,随着学习的不断加深,我发现网上有些东西并不完全正确。我拿个例子来说吧!比如说:osal 里面的osal_start_timerEx( ) 这个函数、我在网上看到一些高人的解释是这样的。定时循环向任务发送事件。。其实函数解释原型是这样的:
osal_start_timerEx( )
Description
This function is called to start a timer. When the timer expires, the given event bit will be set. The event will be set for the task specified by taskID. This timer is a one shot timer, meaning that when the timer expires it isn’t reloaded.
我觉得吧英文差不能这个也读不懂吧!我个人的解释是这样的。这个函数的意思就是在定时执行处理事件的任务。也就是时间过完之后才把这个事件用事件处理函数执行、起到一个时间管理事件的作用。
很多时候,事件并不要求立即得到处理,而是要求过一定的时间后再
进行处理。因此,往往会遇到下面情况:假设A事件发生后要求lO秒之后执行,
B事件在A事件发生1秒后产生,且B事件要求5秒后执行。从时间轴的角度
上,我们可以知道,B事件虽然在A事件之后发生,但应当在A事件之前被处
理。为了按照合理的时间顺序来处理不同事件的执行,这就需要对各种不同的事
件进行时间管理。OSAL调度程序设计了与时间管理相关的函数,用来管理各种
不同的要被处理的事件。
对事件进行时间管理,OSAL也采用了链表的方式进行,每当发生一个要被
处理的事件后,就启动一个逻辑上的定时器,并将此定时器添加到链表之中。利
用硬件定时器作为时间操作的基本单元。设置时间操作的最小精度为lms,每
lms硬件定时器便产生一个时间中断,在时间中断处理程序中去更新定时器链
表。每次更新,就将链表中的每一项时间计数减l,如果发现定时器链表中有某
一表项时间计数已经减到0,则将这个定时器从链表中删除,并设置相应的事件
标志。这样任务调度程序便可以根据事件标志进行相应的事件处理。根据这种思
路,来自协议栈中的任何事件都可以按照时间顺序得到处理。从而提高了协议栈
设计的灵活性。
我最后想说的是:如果自己真的没有足够的水平就不要在网上发表技术性的文章。这样会误导很多学生、