为Keil MCB1700评估板实施我的程序的最佳方法是什么?

时间:2012-01-07 13:13:18

标签: embedded interrupt-handling keil rtx

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

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

  • 将图片保存到USB记忆棒;
  • 从USB记忆棒读取图片并通过套接字发送给客户端;
  • 通过CAN发送和接收信息
  • COM-日志记录。

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

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

我一直认为,嵌入式编程使用无限循环是一种糟糕的方式。 而且,我读了这么有趣的陈述

  

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

我认为通过中断处理所有事件会更好。

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

1 个答案:

答案 0 :(得分:3)

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

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

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

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