乐于分享
好东西不私藏

软件编程_应用篇_13.eventOS_讨论

软件编程_应用篇_13.eventOS_讨论
    大家好!最近实在太忙了,很久没更新了。让我们今天继续聊一聊eventOS。
     今天就聊一个话题:
为什么eventOS,理解起来那么吃力呢?(当然也有不少理解起来不吃力,纯属小子愚钝了哈哈哈哈,那我们将关注点放回如何理解运用eventOS上)
   一、可能我们之前习惯了“超级循环 while (1)” 思维:
我们之前在简单的单片机/嵌入式编程里,一般是主动去查,去轮询,去等。比方说:
while(1){  if(按键按下)处理();  if(收到数据)处理();  if(定时到了)处理();}
而eventOS(事件驱动系统)不是这样的。
eventOS顾名思义,是由事件进行驱动的。
eventOS是:我啥也不做,等系统叫我,我才动。
从主动,变成了,被动。
发送什么事→系统把事件发过来→你处理一下→继续睡大觉。
    二、模拟个场景告诉你eventOS是怎么运作的:
你=老板
EventOS=秘书
中断/按键/定时器/串口=客人
传统的while(1)的你是这样的:

你一直在来回转圈检查:

门口有没有人?

电话响没响?

定时器到没到?

串口数据来没来?

累死,还容易漏掉。

而eventOS是这样的:

秘书(OS)负责盯着所有事情:

按键来了 → 秘书记下来

定时器到了 → 秘书记下来

串口收到数据 → 秘书记下来

秘书攒了一堆事,然后一件一件交给你。你处理完,继续睡。

三、总结

所有动作都叫 “事件”(按键、定时、消息、CAN 收到、4G 上线…)

所有功能都写成 “处理函数”

系统只干一件事:分发事件 → 调用函数

没有循环,没有等待,没有轮询。

答疑:

Q1:我怎么知道什么时候运行我的代码?

A1:不是你调用代码,是事件触发代码。

你写:

当【事件:按键按下】发生 → 执行【按键处理】

当【事件:500ms 到】→ 执行【LED 闪烁】

当【事件:CAN 收到数据】→ 执行【解析报文】

你不用管什么时候来,系统会叫你。

Q2:那我原来 while (1) 里的代码放哪?

A2:全部拆成事件:

原来的 1ms 定时 → 变成 1ms 事件

原来的按键检测 → 变成按键事件

原来的串口处理 → 变成串口事件

原来的状态机 → 变成状态事件

不再有大循环,只有一堆小任务。

Q3:为什么我比较难懂代码结构?

A2:因为 EventOS 里永远看不到主循环。

你看到的是:

注册事件

发布事件

处理事件

没有 while (1),没有 for (;;),没有延时。

相关学习资料