TI中文支持网
TI专业的中文技术问题搜集分享网站

osal_start_timerEx 一个taskID最多只能支持16个定时器如何破?

我们知道,osal是基于event消息驱动的,timer也不类外,也是通过bitmask来存储event的,问题是现有的uint16类型bitmask最多只能存储16个event,也就是16个事件,业务比较复杂的情况下,显然不够用。

不知能否通过修改为uint32,这样就能同时存储32个事件bitmask了。

 

分析了OSAL的所有代码,发现如果修改,问题出在macEventLoop、nwk_event_loop这些非公开的函数代码,参数还是原来的uint16,不知如何破,大家有什么思路没有?

 

另外,查看osal_set_event函数的注释代码,也能发现该函数早期的参数event_flag类型还是uint8,只能存储8个event,看来后来还是做了修改。

lemon:

你可以自己再加一个eventId.意思就是一层套一层.或者使用硬件定时器,或者在osal_event里再加一个任务。你是什么应用,要用到这么多。

miffy:

回复 lemon:

感觉协议栈给做死了,只能设置uint16,也就16个定时器,显然业务负载的根本不够用,如果修改为uint32或者uint64,虽然增加了一部分RAM的开销,但是定时器明显就会多很多。

现在这种event使用bitmask来处理case,也有一定局限性,比如一个定时器只用了一次,也不能再别的地方使用了,因为消息处理loop里面是固定死的。

赞(0)
未经允许不得转载:TI中文支持网 » osal_start_timerEx 一个taskID最多只能支持16个定时器如何破?
分享到: 更多 (0)