1

我想为 MCB1700 评估板开发一个程序。PC 客户端软件从硬盘读取图片。然后通过socket(以太网)将图片发送到MCB1700评估板。MCB1700 服务器通过Socket 连接从PC 接收图片并显示在LCD 上。

服务器还必须执行以下任务:

  • 将图片保存到 U 盘;
  • 从U盘中读取图片并通过socket发送给客户端;
  • 通过 CAN 发送和接收信息
  • COM 日志记录。
  • 等等

套接字连接可以在 CMSIS 和 RL-ARM 库的帮助下实现。

但是,据我了解,在这两种情况下,软件都必须监听传入的 TCP 连接并在无限循环中处理网络事件——Keil 的所有示例都基于这样的原则。

我一直认为,嵌入式编程使用无限循环是一种糟糕的方式。此外,我读到了这样有趣的声明

“当然可以在没有 RTOS 的情况下创建实时程序(通过在循环中执行一个或多个任务)”

我认为最好通过中断来处理所有事件。

是否可以使用 CMSIS 和 RL-ARM 库的套接字连接并通过处理中断来组织我的所有软件?我的服务器(在 MCB1700 上)必须执行很多任务。我想,我应该在我的软件中使用 RTOS RTX。不是这样吗?在没有 RTX 的情况下实施我的软件会更好吗?

4

1 回答 1

3

简单的实时系统通常在“大循环”架构中运行,其中一些时间关键事件由中断处理。它不是一个“糟糕”的架构,它有点不灵活,扩展性很差,任何更改都可能影响系统的时序和/或所有部分。

RL-TCPnet 并非必须以这种方式工作,但它被设计为独立运行,并且示例以这种方式工作,因此不依赖于其他库以获得最广泛的适用性。它们只是示例,旨在演示 RL-TCPnet,仅此而已。从这个意义上说,这些示例是不现实的,应该根据您的要求进行调整。

您可能会设计一个系统,其中所有应用程序代码都在中断处理程序中运行,并且网络堆栈是线程上下文中无限循环中的服务,但在架构上这可能比“大循环”架构差得多,因为您可能会结束使用非常长的中断处理程序,较高优先级的中断处理程序会挨饿并影响较低优先级的实时响应。您最终会得到一个难以令人满意地安排的系统。此外,并非所有库例程都适合在中断处理程序中执行,因此它会受到相当大的限制。

可以在 RTOS 中的低优先级线程中服务网络堆栈。此类操作的框架在以下部分的文档中进行了描述:将 RL-TCPnet 与 RTX 内核一起使用。. 这将要求您理解和使用 RL-RTX 内核库,但鉴于您对“大循环”代码的保留,以及系统必须执行的任务的描述,听起来这就是您无论如何都想做的事情。如果您选择使用不同的 RTOS,则 RL-TCPnet 可以以类似的方式与任何 RTOS 一起工作。

于 2012-01-07T20:17:43.723 回答