我们知道,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里面是固定死的。