|
看了楼主的分享,又进一步了解其过程了,有一个地方就是“至于定时器具体是怎么操作的,那些程序被TI 封了”,这个应该没有被TI封装起来吧,osalTimerUpdate()函数中的如下代码应该就是判断时间是否到达超时的,
// Look for open timer slot 开始轮询,看看哪个事件到时间了,如果到时间了会设置相应的标志位
while ( srchTimer )
{
osalTimerRec_t *freeTimer = NULL;
HAL_ENTER_CRITICAL_SECTION( intState ); // Hold off interrupts.
if (srchTimer->timeout <= updateTime)
{
srchTimer->timeout = 0;
}
else
{
srchTimer->timeout = srchTimer->timeout - updateTime;
}
每一次运行到这个函数里,都会对定时器列表里的每个定时器的Timeout值进行判断和更新,首先判断Timeout值是否大于本次的时间更新值updatetime,如果大于,则表示从上次轮询到本次轮询之间过去的时间updatetime超过了Timeout值,表示该定时器超时了,所以将Timeout = 0;如果小于的话,则表示超时时间还没有到,于是执行srchTimer->timeout = srchTimer->timeout - updateTime,更新Timeout值,在这个函数里,Timeout更像是剩余时间值。新手拙见,不知是否正确 |
|