while(1){if(按键按下)处理();if(收到数据)处理();if(定时到了)处理();}
你一直在来回转圈检查:
门口有没有人?
电话响没响?
定时器到没到?
串口数据来没来?
累死,还容易漏掉。
而eventOS是这样的:
秘书(OS)负责盯着所有事情:
按键来了 → 秘书记下来
定时器到了 → 秘书记下来
串口收到数据 → 秘书记下来
秘书攒了一堆事,然后一件一件交给你。你处理完,继续睡。
三、总结
所有动作都叫 “事件”(按键、定时、消息、CAN 收到、4G 上线…)
所有功能都写成 “处理函数”
系统只干一件事:分发事件 → 调用函数
没有循环,没有等待,没有轮询。
答疑:
Q1:我怎么知道什么时候运行我的代码?
A1:不是你调用代码,是事件触发代码。
你写:
当【事件:按键按下】发生 → 执行【按键处理】
当【事件:500ms 到】→ 执行【LED 闪烁】
当【事件:CAN 收到数据】→ 执行【解析报文】
你不用管什么时候来,系统会叫你。
Q2:那我原来 while (1) 里的代码放哪?
A2:全部拆成事件:
原来的 1ms 定时 → 变成 1ms 事件
原来的按键检测 → 变成按键事件
原来的串口处理 → 变成串口事件
原来的状态机 → 变成状态事件
不再有大循环,只有一堆小任务。
Q3:为什么我比较难懂代码结构?
A2:因为 EventOS 里永远看不到主循环。
你看到的是:
注册事件
发布事件
处理事件
没有 while (1),没有 for (;;),没有延时。
夜雨聆风