正在试用一个 STM32 开发板提供的 ucGUI 3.9,里面的 GUI_TIMER_xxx 逻辑真是恶心啊
谁手上有 ucGUI 源码的,贴一下 GUITimer.c 的 GUI_TIMER_Exec() 函数代码我看看
看看我手上的是某人写的,还是官方源码本来就如此?
我不信官方的连一个简单的 Timer 逻辑都做不好,猜测还是板作者自己写的
代码的意思:
每次 GUI_TIMER_Exec() 去链表 List 里取一个 timer 来处理
如果它的时间到了,处理它,然后 hFirstTimer 指向下一个,等待 GUI_TIMER_Exec 处理
GUI_TIMER_Exec() 的调用就是
main() {
while(1) {
…
GUI_TIMER_Exec();
…
}
}
的逻辑了
这是个单向 LIST 链表,
这个 _Exec() 是个“排队”、“跑完一圈就算”的操作(跑完一圈 hFirstTimer == 0 ),
它跑一圈后,你要再想办法让 hFirstTimer 赋值、让 _Exec 重新生效
要让 hFirstTimer 赋值,得重新有 add/remove LIST 的操作
“排队”呢,还好,在 add/remove 时它给你重新排序插入到合适位置。你修改 Delay/Restart 都是重新 remove 再 add 再 sort
但 SetPeriod 呢,是不会的,也就是你中途修改 Timer 参数 小心 哦
…
谁设计的这 Timer 烂逻辑啊
逻辑极不友好、难用
离线