operating-system - 在 MCU 上使用实时操作系统而不是 while-loop 的原因/好处
问题描述
我正在研究一个轮式机器人平台。我的团队正在 MCU 上实现一些算法
- 不断获取传感器读数(声纳阵列、红外阵列、电机编码器、IMU)
- 接收用户命令(通过连接到平板电脑的串行端口)
- 控制执行器(电机)以执行用户命令。
- 继续向平板电脑发送传感器读数以获取更复杂的算法。
我们目前在全局 while 循环中实现所有内容,而我知道大多数其他用例使用实时操作系统执行相同的操作。
请告诉我使用实时操作系统而不是简单的 while 循环的好处和理由。
谢谢。
解决方案
RTOS 将提供基于优先级的抢占。如果您的代码未解析串行命令并执行它,则它无法响应任何其他内容,直到它返回到您的野兽循环。RTOS 将提供基于中断事件的即时上下文切换所需的抽象。否则,事件响应的最坏情况延迟将是主循环之外的最长可能偏移,有时您确实需要长时间运行的进程。例如,更新 LCD 面板或响应 USB 设备枚举。抢占允许您在知道以 CPU 时钟运行的 16 位定时器在完成之前不会翻转几次的情况下安全地执行这些操作。而对于简单的控制工作,一个循环就足够了,从它开始的问题是,当你进入 USB 设备枚举之类的东西时,它不再实用,需要完全重写。从 RTOS 提供的抢占式框架开始,您将拥有更多未来的灵活性。但是肯定有更多的前期工作,而且肯定是一个学习曲线。
推荐阅读
- function - I want to transfer text from one text field to another. Like first text field to second text field, second to third, third to first in JAVASCRIPT
- python - discord py - Why doesn't my ban command work?
- react-native - 在反应中单击按钮时如何提示相机权限?
- python - 将列表中的 2 个元素组合成嵌套列表
- javascript - Javascript 和异步问题(使用 yandex maps api 构建距离矩阵)
- python - 如何生成随机值,然后使用 pop 方法将其删除?
- java - 如何删除依赖于 for 循环内用户输入的 Map 键?
- python - 摆脱我在数据帧中列的不同行中的额外空格
- javascript - electron 获取本地 javascript 文件的 URL 并返回
- javascript - 如何使 iframe 点击到基本 html