【问题标题】:How hard is it for a software developer to learn how to program a microcontroller?软件开发人员学习如何编程微控制器有多难?
【发布时间】:2011-01-09 05:54:09
【问题描述】:

我是一名软件开发人员。几年来我一直在使用高级语言进行编程。

我想知道,如何迈出我进入硬件编程的第一步。不是什么疯狂复杂的东西,但也许是一些普通的 CE 设备?假设我不需要将 PCB 与各种组件放在一起,而只是对微型 cpu 进行编程?

我必须达到多低的水平? ASM? C?操纵寄存器?还是开发套件现在水平很高? Java甚至在图片中吗? OO 硬件编码,这是梦想还是现实?需要现实检查。

我也倾向于通过以教程格式编写的书籍或网站来更好地学习。一些东西引导我从简单的东西到更复杂的东西。有什么建议吗?也许可以让我了解当今流行的硬件(微处理器/微控制器)?

非常感谢,谢谢大家。

【问题讨论】:

    标签: embedded microcontroller


    【解决方案1】:

    我在 C 语言中作为业余爱好和专业人士已经有大约 16 年的时间了,但始终是针对用户态代码(即程序,而不是内核或驱动程序)。我的大部分工作都涉及高级语言(我做过很多 Perl 和 Ruby 编程,偶尔也会用到 Java、Python 和 shell 脚本)。我确实为 MS-DOS 开发了很多东西(这可能与你在 x86 机器上的裸机编程一样接近),但我的上一份工作涉及 5 年的 Perl 和 Ruby on Rails Web 开发。

    话虽如此,我现在是嵌入式 Linux 开发的高级工程师,在 Blackfin 平台上为 uClinux 开发驱动程序(包括内核模块内的传统简单微处理器的模拟器)。有时我对硬件相关问题(即由于引脚上没有上拉/下拉导致的浮动信号电平)缺乏经验确实会妨碍我,但这主要是一次非常愉快和激动人心的体验。正如其他人所说,了解你的工具是必不可少的——对于 uClinux,这意味着 GNU Toolchain,幸运的是,由于我在 FOSS 技术方面的背景,我已经熟悉了。

    Blackfin 几乎不是入门级微处理器(特别是它没有MMU,它有一些relevant effects on Linux development),但如前所述,您可以用大约200 美元购买Beagleboard所有必需的配件,并在短短几天内开始摆弄它。如果你想要更简单的东西,有很多 Arduino 选项,但如果你有一些真正的开发经验,我相信你会发现他们的开发环境有点限制(我知道我这样做了)。

    在您熟悉您的工具后,您可能想在in-circuit emulator(或 ICE)上花一些钱。这些通常是高度特定于平台的(就目标架构和开发环境而言),但强烈推荐用于除了通常的按钮按下后闪烁 LED 示例之外的任何内容,我相信您会很快适应。

    几个月后,您会发现自己使用Buildroot 为hackable customer devices 构建自定义图像并获得很多乐趣。我只能说,去吧,它很容易上瘾,而且现在做起来也不是特别贵。

    【讨论】:

    • Beagleboard,与 Arduino 相比如何?似乎它已经是 Linux 上的计算机了……就像类固醇上的微控制器?它已经在linux上运行了吗?那么..相对于Arduino,它的编程水平会更高吗?谢谢。
    • @Henry Beagleboard 几乎是几年前的 PC,它运行 linux,有网络,插入键盘和显示器 - 你甚至可以直接在其上开发 Arduino 是一个真正的微控制器。它是原始的 C 加命令来改变引脚上的电压。您在 PC 上编码,下载完成的程序,连接电源并希望!
    • Beagleboard 也能做 Arduino 做的事情吗?比如...改变引脚和东西上的电压?
    • Beagleboard 似乎没有任何 GPIO 引脚。不过,请尝试证明我错了。
    【解决方案2】:

    好吧,如果你想知道你在做什么,你需要了解处理器的汇编语言和处理器的架构。

    您需要学习 C 才能胜任微控制器。没有办法解决这个问题。

    嵌入式系统上有一些 VM 级别的语言。我不时在手机上看到 Java 内存不足异常(这也有助于我对 VM 级嵌入式语言有一个强烈的看法)。

    ARM 对硬件级 Java 字节码有一些支持。

    最好的选择是拿起 PIC 或 Atmel 芯片之类的东西,然后开始使用它们。

    如果您想使用现有硬件来实现,请为您的 PC 获取一个虚拟机管理程序并开始编写基本内核。

    【讨论】:

      【解决方案3】:

      买一个小猎犬板。便宜,大量用户(社区支持将是关键),许多操作系统选项。 http://beagleboard.org/

      【讨论】:

      • Beagleboard,与 Arduino 相比如何?好像它已经是 Linux 上的计算机了……我说的对吗?编程这类似于编写 linux 应用程序吗?
      • Arduino 级别较低,非常适合与硬件连接。这就是为什么我认为对于不从事硬件黑客的人来说,beagleboard 可能更平易近人。示例:letsmakerobots.com/node/11252
      • 我明白了……编程 Beagleboard 就像编程高端 LEGO MINDSTORMS?
      【解决方案4】:

      还有一点值得研究的是Microsoft Robotics Studio。它们支持相当多的硬件板(包括 CE),并且很容易让小型机器人启动并运行。还有什么比学习嵌入式编程更酷的项目?

      这一切都很好地集成在 Visual Studio (express) 中,并且他们的 devkit 还附带一个免费的 express 版本。

      【讨论】:

      • irobot、fischertechnik、roombo、mindstorms、pilot 等... 最好的事情是你可以用 C# 编程。更好的是,在购买机器人之前,您可以模拟整个事物及其 3D 世界。当它开始工作时,你购买硬件,它应该只需最少的调整即可运行
      【解决方案5】:

      实际的编程没什么大不了的。令人沮丧、烦人的部分是设置您的开发环境并让工具正常工作。一旦你这样做了,你就成功了。

      我建议购买内置 USB 并与您选择的操作系统配合使用的开发套件(“开发套件”)。让它发挥作用,你就完成了一半。

      如果您缺少相关知识,了解处理器工作原理的基础知识也很重要。你的编程水平比任何其他编程都要低得多,所以基础知识更重要。

      【讨论】:

      • 你具体推荐什么样的开发套件?
      • or.. PC 上是否有用于 uController/微处理器的 VM?喜欢.. 在没有 J2ME 手机的情况下进行 J2ME 开发?只是想知道......
      • @Henry:我建议从 Atmel 处理器(它们非常流行且简单)或摩托罗拉 MSP430 或类似处理器(低功耗)开始。基本上任何带有 USB 的开发套件都可以。至于 PC 上的虚拟机 - 我不知道这些天你能不能得到它们,但我建议 不要 得到一个 - 一半的挑战/实践/满足是让工具链正常工作。
      • 如果我想选择 Atmel 处理器,我可以使用 Arduino,如果我想选择 Motorola/Freescale 处理器怎么办?我应该得到哪个开发套件?编程爱特梅尔与摩托罗拉/飞思卡尔有何不同?
      • 这里是第二个彼得。努力获得 一些 图像——不管它做什么——你可以下载到板上并运行。也许是一些 linux,也许是制造商提供的演示。以这种方式,您可以确保过程的那部分有效。然后,尝试构建您自己的程序(“Hello World”)并下载它。下一件你知道的事,嵌入式乐趣。
      【解决方案6】:

      如果您了解 C,那么只需学习工具链步骤即可下载代码。

      容易上手(便宜的硬件/软件)http://www.arduino.cc/en/Guide/HomePage

      【讨论】:

      • 这里还学习了 IO 端口的工作原理、内存限制/要求,包括。可能分页,中断服务程序。这不仅仅是了解 C 和工具链。
      • 保罗,你有推荐的书来学习你提到的那些吗?谢谢。
      • @Henry:我个人还没有遇到过一本很好的教科书/演练。我应该写一个。 :-) 您会在给定处理器的技术文档中找到对这些(在某种程度上)的讨论。其中一些区域在 1 个 cpu 中,而不是在另一个中。
      • 我不确定这是否是正确的问题,但这里是.. 哪些是广泛可用的基本 CE 设备最流行的处理器?一般来说,他们的能力是什么?
      • @Henry:定义 CE。 CE 窗口?
      猜你喜欢
      • 1970-01-01
      • 2010-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-27
      • 1970-01-01
      相关资源
      最近更新 更多