我正在启动一个使用LittleVGL作为其GUI库的项目。
我使用的是STM32H743,运行频率为480。(这款手机的耗电量相当大,但仅比速度快、内存和闪存少的东西贵1/15%,后者本身就需要额外的外部闪存。)
最坏情况下的屏幕绘制是10毫秒。当我实现LittleVGL的闪电战和用ChromART/DMA2D填充钩子时,这会变得更好。
如果延迟20‘s,董事会的非GUI操作都不会受到影响。
如果屏幕绘制速度较慢,并且需要被更紧急的操作所中断,则显然需要一个RTOS。
当所有操作都比最紧急的截止日期更快时,是否有理由使用RTOS而不是单一的无限循环?
(我不熟悉FreeRTOS,最重要的是,我没有调试FreeRTOS项目的经验。)
发布于 2020-04-06 23:09:57
首先,我从问题块中挑出主要问题:
是否有理由使用实时操作系统,而不是单一的无限循环,当所有操作都比最紧急的截止日期更快的时候?
是的,有。最重要的是: RTOS是将复杂的软件分割成简单(甚至是琐碎)的一种方式!来维持。此分区考虑CPU在当前软件上花费的时间。当您的软件在同一个CPU/控制器上做几件不相关的事情时,您可以很小地应用它。我想将这与将一个大的单块源代码分解成小模块和函数进行比较,这些模块和函数处理内存和程序代码的一小部分。相反,每个RTOS任务都负责由控制器固件完成的一件事情。
这就是原因中微不足道的部分,我自由地回答了一些不精确的问题,强调了要点。现在,出于不那么琐碎的原因:
使用RTOS,您还可以将不独立运行但表示从输入数据(度量值)到输出数据(设置值)的不同处理阶段的软件分割。在一个现实的嵌入式系统中,您通常需要处理太多的需求,以至于在一个主循环中实现所有这些需求,最终都会在一些程序代码中(或者沿途崩溃),您可以只写一次,但是如果您在一周后返回到代码中(通过修复越来越小的but,将软件扩展到一些新的想法和要求),那么您很难维护这些代码。
对我来说,使用一些RTOS的主要动机(它不一定是freertos,但这一点一点也不坏),以便将一个完整的软件分解成我的头脑能够处理的部分。
你的问题最初指向一个不同的方面:
我要开始一个使用.桂..。
我使用的是STM32H743,运行频率为480。(这款手机的耗电量相当大,但仅比速度快、内存和闪存少的东西贵1/15%,后者本身就需要额外的外部闪存。)
最坏情况下的屏幕绘制是10毫秒。..。没有一个..。如果延迟至多20毫秒,操作就会受到影响。
如果屏幕绘制速度较慢,并且需要被更紧急的操作所中断,则显然需要一个RTOS。
您是对的,使用RTOS的另一个原因是以或多或少的动态方式将系统上的不同进程交织在一起,这样每个任务都能在其截止日期之前完成。我没有调查你具体案例的所有情况(见引文中我的精辟之处),但我确信这个论点不适用于你目前的情况。只是对这个观点提出几个注意事项:
。
也许我错了,而且你没有任何限制去执行任何超过20 ms的反应,或者在某一天用更便宜的STM32取代STM32。那么,剩下的唯一论据就是处理复杂性。当然,您可以尝试继续使用主循环。只要需求足够简单,你就能用一种“全神贯注”的架构来处理所有的事情,你就会成功。
感谢那些在早些时候的评论中贡献了部分答案的人:@Lundin,@Clifford
https://stackoverflow.com/questions/60651134
复制相似问题