一个软件开发者学习如何编程微控制器有多难?

14

我是一名软件开发者。我已经使用高级语言编程了几年。

我想知道如何迈出编程硬件的第一步。不是什么特别复杂的东西,而是可能普通的消费电子设备?假设我不需要与多种组件一起组装PCB,只需编程微小的CPU?

我需要去多低层次?汇编语言?C?操作寄存器?或者现在的开发工具包相当高级吗?Java是否也涉及其中?硬件中的面向对象编程,是梦想还是现实?需要进行现实检验。

我也倾向于通过以教程形式编写的书籍或网站来更好地学习。希望能有一些指导,从简单到复杂的引导方式。有任何建议吗?也许是介绍当今流行的硬件(微处理器/微控制器)的东西?

非常感谢,谢谢大家。

6个回答

9
实际的编程并不是问题。让人沮丧和烦恼的是设置开发环境和使工具运行起来的过程。一旦完成,你就已经完成了一半。
建议购买一个带有 USB 并能与你选择的操作系统配合使用的开发套件(“dev kit”)。让它工作起来,你就完成了一半。
如果你缺少知识,了解处理器的基础知识也很重要。你将在比任何其他编程更低的层次上进行编程,因此基础知识更加重要。

你有什么特别推荐的开发工具包吗? - Henry
有没有针对单片机/微处理器的虚拟机可以在PC上运行?就像不用J2ME手机进行J2ME开发一样?只是好奇... - Henry
@Henry:我建议你从Atmel处理器(它们非常流行和简单)或Motorola MSP430或类似的低功耗处理器开始。基本上,任何带有USB接口的开发套件都可以。至于在PC上使用虚拟机-我不知道现在是否还能获取到,但我建议不要获取-因为一半的挑战/实践/满足感就是让工具链正常工作。 - Peter
如果我想选择Atmel处理器,我可以使用Arduino,但如果我想选择Motorola/Freescale处理器呢?我应该选择哪个开发套件?在编程Atmel和Motorola/Freescale之间有多大的差异? - Henry
在这里支持Peter的建议。尽力获取任何图像 - 无论它是什么 - 您可以下载到板子上并运行。也许是一些Linux,也许是制造商提供的演示。这样,您就可以确保过程的工作方式。然后,尝试构建自己的程序(“Hello World”)并将其下载。接下来,您就可以享受嵌入式乐趣了。 - doppelfish
我建议暂时远离Arduino,因为它抽象了很多程序员在直接编程处理器时所接触到的东西。经过一些低级别的工作后,你可以转向Arduino这个对程序员友好的环境。 - Saulius Žemaitaitis

2

2
还有学习IO端口的工作原理,内存限制/要求,包括可能的分页和中断服务例程。这不仅仅是了解C语言和工具链那么简单。 - Paul Nathan
Paul,你有没有推荐学习你提到的那些内容的书籍?谢谢。 - Henry
刚刚发现这篇文章,非常有趣,关于Atmel、Microchip和Freescale的比较:http://diydrones.com/profiles/blogs/atmel-v-microchip-v-freescale - Henry
@Henry:你会发现大多数嵌入式编程工具都很糟糕,每个处理器通常都面向特定的目标。 - Paul Nathan
Arduino对于初学者仍然是最好的选择吗?那么直接支持AVRStudio的产品呢?会更好吗? - Henry
显示剩余9条评论

2
我已经从事C语言编程约16年,既作为业余爱好,也作为职业,但一直都是用于用户空间代码(即程序,而非内核或驱动程序)。我的大部分工作涉及高级语言(我做过很多Perl和Ruby编程,偶尔还会使用Java、Python和shell脚本语言)。我确实开发了很多MS-DOS的程序(这可能是在x86机器上最接近裸机编程的方式),但我最后一份工作则涉及5年的Perl和Ruby on Rails网站开发。
话虽如此,我现在是一名嵌入式Linux开发的高级工程师,为uClinuxBlackfin平台上开发驱动程序(包括内核模块中旧微处理器仿真器)。有时我缺乏硬件相关问题的经验(比如由于针脚上没有上拉/下拉电阻而导致的浮动信号电平)会妨碍我的工作,但这大多数时候都是一次非常愉快和激动人心的经历。正如其他人所说,理解你的工具是必要的——对于uClinux来说,这意味着GNU Toolchain,幸运的是,由于我在自由开源软件技术方面的背景,我已经熟悉了它。
黑鲔鱼处理器并非入门级微处理器(特别是它没有MMU,这对Linux开发有一些相关影响),但正如先前所述,您可以花大约200美元购买一个Beagleboard及其所有必需的附件,并在短短几天内开始尝试。如果您想要更简单的东西,有许多Arduino选项可供选择,但是如果您已经具备了一些真正的开发经验,我相信您会发现它们的开发环境有点受限制(我知道我是这样认为的)。

在你熟悉工具后,你可能想要花一些钱购买一个电路仿真器(或ICE)。这些通常非常特定于平台(无论是目标架构还是开发环境),但如果你想做更多的事情而不仅仅是闪烁LED灯的话,这是强烈推荐的。

几个月后,你会发现自己正在使用Buildroot可黑客客户设备构建自定义镜像,并且会有很多乐趣。我所能说的就是,去尝试吧,这非常容易上瘾,现在也不是特别昂贵。


Beagleboard,它与Arduino相比如何?看起来它已经是一个运行在Linux上的计算机...像类固醇的微控制器?它已经运行在Linux上了吗?那么,相对于Arduino,编程会更高级吗?谢谢。 - Henry
@Henry,Beagleboard几乎是几年前的一台PC,它运行Linux系统,有网络功能,可以插入键盘和显示器 - 你甚至可以直接在上面进行开发。 Arduino是一款真正的微控制器。它使用原始的C语言加上命令来改变引脚电压。你可以在PC上编写代码,下载完成的程序,连接电源并希望一切顺利! - Martin Beckett
贝葛尔板也能像Arduino一样执行任务吗?例如...改变引脚上的电压等操作? - Henry
Beagleboard似乎没有任何GPIO引脚。不过,你可以试着证明我错了。 - doppelfish

0
另外一个值得关注的是Microsoft Robotics Studio。它支持许多硬件板(包括CE),使用它可以很容易地启动一个小型机器人项目,这是一个学习嵌入式编程的很酷的项目。而且,它与Visual Studio(express)完美集成,他们的开发工具包还附带了免费的express版本。

irobot、fischertechnik、roombo、mindstorms、pioneer等等...最好的事情是你可以用C#编程。更好的是,在购买机器人之前,你可以在3D中模拟整个过程和它的世界。当它开始工作时,你购买硬件并进行最小的调整即可运行。 - Toad

0

购买一块BeagleBoard。价格便宜,有很多用户(社区支持非常重要),提供许多操作系统选项。http://beagleboard.org/


Beagleboard,它和Arduino相比如何?似乎它已经是基于Linux的计算机了……我是对的吗?编程这个板子类似于编写Linux应用程序吗? - Henry
Arduino是低级别的,非常适合与硬件进行接口。这就是为什么我认为Beagleboard可能更适合那些不擅长硬件黑客的人。例如:http://letsmakerobots.com/node/11252 - ergosys
我明白了... 编程 Beagleboard 就像编程高端的乐高机器人一样吗? - Henry

0

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

学习C语言是成为微控制器专家的必经之路。没有其他方法。

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

ARM处理器对硬件级别的Java字节码有一定支持。

你最好选择像PIC或Atmel芯片这样的东西,并开始使用它们来进行编程。

如果你想用现有的硬件完成,那就给你的电脑安装一个虚拟机监视器,然后开始编写基本的内核。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接