【问题标题】:I have an embedded project idea that i want to start. I have many questions我有一个想要开始的嵌入式项目想法。我有很多问题
【发布时间】:2011-03-11 05:38:44
【问题描述】:

这是我在 stackoverflow 上的第一篇文章,我听说过这个网站,我觉得它很棒!让我们看看我是否可以就如何开始我的项目获得一些指导。

理念: 基本上我想构建自己的自定义 OSC 控制器(OSC 是基于 UDP 的协议,旨在替换 MIDI)。有趣的是,我想将控制器构建为吉他,因此我可以将其用作合成器,并在吉他主体上包含一些典型的 MIDI 控制器硬件。这将包括力度感应垫、光学编码器、LCD 面板、力度感应琴弦和触感音柱。 Here's an example.

我的问题:我对如何启动如此庞大和复杂的项目感到困惑。在基本的低级别,固件似乎只是处理基本整数并转换为适当的 OSC 信号。我不确定如何选择我的硬件和编程语言,甚至不确定如何实现这个协议。也许我吃的太多了,但我认为这是一个很好的项目,可以很好地了解嵌入式硬件的工作原理和编程低延迟并发系统。

  1. 什么是作为此设备基础的好的硬件平台?我认为 PIC18 处理 OSC 的速度会很慢,因为它是一种现代协议。哪种类型的微控制器可以处理 OSC 实现?
  2. 用什么语言来实现这个协议是好的?我知道 C 通常用于嵌入式软件,但 Ada 激发了我的兴趣。这里的目标是创建一个可以处理来自用户的多个输入的低延迟固件。我了解 Ada 用于许多此类情况并且“更稳定”?您对此有何看法?
  3. 是否可以在没有物理硬件的情况下模拟硬件和微控制器?在不知道它是否适合我的需求的情况下,我有点难以在硬件上投资几百美元(我在学生预算中)。如果我能够在没有硬件的情况下模拟所有输入并编写固件,那将使我对完成这个项目的能力更有信心。即使能够模拟我的想法的基本版本也比没有更理想。

我希望我能在这方面得到一些意见,如果我关于硬件的问题不适合这个网站,如果你们对就硬件方面的建议犹豫不决,我理解。

再次感谢!

【问题讨论】:

    标签: c embedded microcontroller ada opensoundcontrol


    【解决方案1】:
    1. 支持以太网和可用网络堆栈的东西似乎是明智的。您是在寻找现成的电路板还是开发自己的电路板?许多 ARM 微控制器包括片上以太网控制器。您需要考虑对网络硬件的支持以及这种支持(或者实际上是应用程序本身)是否需要操作系统或 RTOS。

    2. C 编译器几乎适用于从 8 位到 64 位的所有体系结构。但是,如果您使用具有超过几十 KB RAM 的 32 位部件,C++ 是可行的并且几乎无处不在。艾达是一种罕见的不太受支持的野兽,在军事/航空航天之外,IMO 将是一个不寻常的选择。您可能需要第三方支持,例如网络堆栈和以太网驱动程序——Ada 是否可以使用这些支持?价格合理?

    3. 您可能不需要在指令或周期级别模拟硬件。如果使用 C 或 C++,您可以在 PC 上制作大部分代码的原型。优点是PC已经有网络支持。许多嵌入式开发工具链包括指令模拟器,有些还模拟片上外围设备,但它们的使用受到限制——它们不能实时执行,模拟外部 I/O 可能很复杂且不切实际。

    **[编辑]**关于 C++(回应 Jason S 的评论)。并不是说 C++ 一定需要更多的内存;您为使用的功能付费。但是需要小心,因为 C++ 使简单和有吸引力的事情可能具有隐藏的资源成本。我在嵌入式系统中使用 C++,但很少使用例如 C++ 标准库 - 它很棒并且可以节省大量时间,但在资源和确定性方面的成本很高,某些系统可能无法承受。我已经在 8 位和 16 位系统上成功使用了 C++,但是当使用的子集受到高度限制并且代码体很小时,优势就不是那么重要了。例如,我不会建议您学习 C++ 只是为了在 8 位系统上使用它;但如果您已经了解 C++,请继续(小心)。我目前正在开发 dsPICF33 设备,缺乏 C++ 支持非常令人沮丧。

    【讨论】:

    • C++ 的生存能力与 32 位部件或数十 K 的 RAM 无关。这是一个神话。如果您使用动态分配的内存和复杂的构造函数和虚拟函数 + 等进行编程,您将需要更多的 RAM。但是基础很好,一个好的编译器会优化。 C++ 有助于封装 + 模块化,我希望更多的嵌入式处理器制造商能够确保他们提供 C++ 编译器。
    • 同意;使用 C++,您为使用的东西付费——我当然不打算传播“神话”。但是,如果约束很严格,如果您需要同时跟上 C++ 的速度,您可能使用的内容可能会降低吸引力。正如 Stroustrup 所说:“在 C++ 中,射中自己的脚更难,但是当你这样做时,你会炸掉整条腿”。此外,在 32 位平台上,有成熟且可靠的 C++ 编译器可用(例如,GCC 无处不在);在较小的目标上,质量和合规性可能会更加多变。
    【解决方案2】:
    1. 首先,看看 Arduino 和 Make Controller。两者都是可以处理 OSC 并拥有强大用户社区的开源 (hw&sw) 微控制器模块。您可以在 youtube 上找到两者的示例视频。

    2. C 和 Ada 仍然会被编译成机器代码,因此如果您想最大限度地控制您的硬件,您可能需要查看汇编语言 - 但只有在绝对必要时才可以。在那之前,我会坚持使用 C。它会让你走得很远。

    3. 是的,可以在软件中模拟您的电路。但是,使用实际硬件会更容易一些事情。但是,对于一些好的软件示例,请查看 Cycling '74 网站上的 Max/MSP 教程。 Max/MSP 是一种经常用于计算机/硬件交互的图形编程语言。 This article 会给你一些关于它可以做什么的想法。

    4. 类似于 Max/MSP 的是一个开源产品,称为 Pd。它不如 Max/MSP 精致,但可以免费使用,您可以随时开始使用它。

    5. Tom Igoe 的 Physical Computing 和 Paul Scherz 的 Practical Electronics for Inventors 是一些适合初学者的好书。 Tom Igoe 还有一个信息量很大的网站。

    6. Make、Circuit Cellar 和 Nuts & Volts 是一些您可能会觉得有帮助的好杂志。所有这些都涉及到您将用于此类项目的电子设备类型。

    7. 除非您正在为商业企业设计原型,否则您可能会考虑启动一个开源项目。这听起来是个好主意,我相信它会引起很多人的兴趣。

    【讨论】:

      【解决方案3】:

      您可能想查看gumstix 之类的内容。体积小、功耗低、运行 linux、无线且便宜!

      看起来有可用的 linux OSC 库。您绝对可以在 linux PC 上制作应用程序原型,然后在嵌入式 linux 平台上进行交叉编译。

      【讨论】:

        【解决方案4】:

        还有基于 MIPS CPU 的 PIC32。我会说使用 Ada 来实现它的实时功能,但您还必须移植运行时才能使其工作,除非您使用具有零足迹配置文件运行时的语言,这也是可行的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-11-23
          • 1970-01-01
          • 2020-01-15
          • 1970-01-01
          • 2012-10-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多