【问题标题】:What is the best way to implement my program for Keil MCB1700 evaluation board?为 Keil MCB1700 评估板实施我的程序的最佳方式是什么?
【发布时间】:2012-02-04 21:32:33
【问题描述】:

我想为 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 的情况下实现我的软件会更好吗?

【问题讨论】:

    标签: embedded interrupt-handling keil rtx


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我的任务如下: 1) 服务器(在 MCB1700 上)读取数据包。 2)如果服务器不执行任何命令,一个特殊的函数会解析这个包(像一个字符符号数组)并定义必须执行的命令。在另一种情况下,程序读取特定命令中的包并定义如何处理它们。 3) 命令结束。返回 (1)。另一个任务:来自 CAN、ADC 的事件可能由中断处理(处理程序只有几行代码),将图片保存到 USB 记忆棒并在 LCD 上显示在读取包后立即执行(所以它看起来像一个任务)。
    • 排除同时执行两个任务。据我了解,“大循环”架构在我的情况下是可以接受的吗?是否存在其他类型的嵌入式软件架构? “大循环”架构最适合我的情况吗?
    • @Lucky Man:不,RTOS 是 IMO 最合适的架构。你说你可以使用 RL-ARM 库,那你现在为什么要排除它!?你移动了球门柱!查看您的要求,我建议至少有 4 或 5 个任务。 CAN 和 USB 堆栈也需要定期维修。如果您没有某种多任务内核,则必须有某种永无止境的循环,因为如果 main() 终止,您的系统将停止。在 RTOS 中,任务通常是由执行人员安排运行的单个无限循环。
    猜你喜欢
    • 2012-02-04
    • 2017-05-17
    • 2017-11-19
    • 2017-12-18
    • 2022-11-09
    • 2022-10-08
    • 1970-01-01
    • 1970-01-01
    • 2019-01-29
    相关资源
    最近更新 更多