首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一个循环还是MultiTasking与FreeRTOS在ESP32项目中?

一个循环还是MultiTasking与FreeRTOS在ESP32项目中?
EN

Software Engineering用户
提问于 2019-12-09 10:35:04
回答 1查看 588关注 0票数 1

我用静电除尘器-以色列国防军为ESP32编写了一个CAN总线记录器.

目前,这只是一个主程序与一个循环。在该循环中,数据从CAN总线接收器读取并写入SD卡上的一个日志文件。

现在,我还想从UART串口接收数据。这些数据也应该写到同一个SD卡上的同一个日志文件中。

我的问题是:我应该在现有循环中添加几行代码来读取UART中的数据并将其写入SD卡上的日志文件中吗?还是将代码分离成两个或多个任务,用于从CAN总线读取数据,从UART读取数据,并将其写入SD-Card上的日志文件?

到目前为止,我还不确定波特率。但是UART的数据将比CAN总线的数据少得多。因此,可能有10或100条来自CAN总线的日志文件行,然后是UART的1行日志文件行。

这个问题是关于我是否应该使用带有多个任务的FreeRTOS来实现这个或仅仅一个循环的原则。直到现在,我认为一个循环更容易,更好,因为然后,我准确地控制发生了什么,以哪个顺序。这并不复杂,只有几行。但很明显,如果我的想法有意义的话,我会在这里征求专家的意见。

EN

回答 1

Software Engineering用户

发布于 2019-12-09 11:35:13

您可以通过一个主循环完成所有的日志记录,但是添加UART的日志记录肯定会超过几行简单的代码。当所有东西都在一个主循环中时,您必须手动处理

  • 没有任何来自高速协议的消息丢失(例如,由于低速协议上的阻塞读取)。
  • 从非阻塞读取返回的部分消息被正确地重新组装。
  • 消息边界(例如,来自UART的流中的新行)被正确检测和处理。

所有这些都不是不可能的,但它不仅仅是“现有循环中的几行”。

另一方面,如果使用多线程操作系统(如FreeRTOS ),则可以为每个协议和SD卡的写入创建一个单独的任务。如果您使到写入任务的通信是原子化的(日志行的所有信息都是一次传递的),那么其他任务可以只关注记录该特定协议的技巧。虽然现在还需要做更多的工作,但是添加第三个协议将再次是“几行”。

票数 2
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/402246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档