编程微处理器?

时间:2012-06-12 23:54:49

标签: assembly arduino

我对Java和Arduino编程有一些背景知识,我在YouTube视频 Arduino webcam bot 中可以看到我做过的一件事。

到目前为止,我刚刚将USB线插入Arduino,按下“传输”,然后程序被神奇地编译并加载到Arduino中。

现在这很有趣,但我希望我能在嵌入式系统中获得更多的洞察力。

如果我尝试用汇编程序对处理器进行编程,首先,开始使用什么处理器,以及如何将程序传输到处理器上?

4 个答案:

答案 0 :(得分:1)

Arduino使用ATmega328,至少如果您使用的是Uno或之前的版本,则会使用Atmel's website。既然你现在至少熟悉这个硬件,我建议你继续使用它(你也有硬件!)。要从Arduino环境转移到更多原生环境,请转到AVR Studio并下载ATAVRISP2

您还需要购买AVR ISP程序员,例如 {{3}} 。这将允许您将代码从AVR Studio传输到Arduino上的ATmega芯片。

Atmel网站上有相当多的支持文档可以帮助您实现目标。

答案 1 :(得分:0)

我不确定这会怎么样(因为它是一个特别难看的处理器!),但你可以从x86开始!有了x86,有各种各样的可用资源(例如,OSDev.org),免费软件/开源模拟器不仅常见,而且你甚至可能已经有了。 x86有各种低级别的位来操作,特定地址的表格可以填满所有位,过时的功能可以部分忽略并让所有人感到困惑。

旁注:如果您对处理器设计(或通常是电路设计)的一些真实工具感兴趣,您可能有兴趣阅读hardware description languages(HDL)。您也应该能够找到这些语言的模拟器。

或者,如果您正在寻找一些乐趣,或者您有兴趣了解裸机如何工作,您可以查看TinaDigital Works或其免费/开源等工具等同物。

这些将让您在门/触发器级别建模电路。虽然您将无法创建具有任何实际编程能力的处理器,但您可以使用这些工具从上到下设计和编写您自己的硬件和软件堆栈!

答案 2 :(得分:0)

您的问题是一个多部分问题:

  1. 您可能需要先参考an answer to Stack Overflow question MIPS vs Intel x86 vs LLVM as the first assembly language to learn?

  2. 有许多公司提供基于董事会和RS-232'ish接口的机制,将更高级别的语言转换为汇编程序并将代码部署到芯片。

  3. 这是印度一家小公司提供的一个rudimentary mechanism(我在12年前的本科学习期间使用过这个)。

    当然,Xilinx等提供了更好的电路板。

答案 3 :(得分:0)

http://github.com/dwelch67。我有很多资源,包括在你正在谈论的级别编程Arduino和其他AVR板,以及一个指令集模拟器,它将在你开始时大大减轻痛苦。

AVR指令集对于第一个指令集并不坏。到目前为止,x86是你应该浪费时间的最后一个。拥有硬件是选择平台的一个不好的理由。你想从指令集模拟器开始,我有很多,可以指向你很多(GDB,skyeye,QEMUOpenCores等。 MSP430具有良好的指令集,并且板的成本为4.30美元,比AVR(在此级别)更容易使用,并且不是坏的第一指令集。 Mico8是直截了当的,也不错(让硬件变得更复杂)。我曾经推荐ARM,但现在几乎所有ARM都支持Thumb,我推拇指(原始的“所有拇指变体拇指”,而不是Thumb2扩展)。

MIPS通常用于教学汇编程序。它的设计倾向于硬件工程师而牺牲了软件工程师。教育无疑,但不是第一个指令集。它不使用旗帜,这可能是正确的或错误的,但它不是世界上大多数工作的方式,如果你的大脑围绕这个形成,你必须忘掉它去其他任何地方。列出的第一个指令之一是add unsigned,这是一个荒谬的概念,并且选择不当。 OpenCores的mpx核心很好,您可以使用免费工具,深入了解处理器的工作原理。一旦你在一个指令集中获得基础,你最终将需要学习ARM和MIPS。它们比学习多种编程语言更容易,更容易。

如果你愿意,我有一个模拟器, lsasim 。花半个小时浏览这些示例,然后跳转到其他一些模拟器。 simavr可能是寻找学习AVR的地方;有不同的AVR变体,主要与寻址和地址大小有关。

指令集模拟器可以防止你伤害任何东西,并且(可以)让你更好地了解正在发生的事情。一旦你进入硬件,第一个重大障碍就是获得生命迹象,为什么我的代码不能启动,或者启动和崩溃,错误在哪里以及为什么。

有些平台比其他平台更容易,当然。最后,如果你坚持下去,你将会编写引导代码,并想知道为什么它不起作用。此外,如果你在这个级别工作,你必须接受这样一个事实,你将brick和/或销毁硬件,很容易让因为软件错误而冒烟。有很多方法可以做到这一点,你不想把所有的鸡蛋都放在一个篮子里(通常想买两个东西,如果你抽一个,你有另一个让你抱着你,直到你可以订购另一个备用) 。您已经接受了迄今为止所做的Arduino编程的类似风险,这样可以减少保护并降低风险。 AVR非常适合难以打砖,但你可以 仍然吸烟他们。你不能抽模拟器。

关于指令集模拟器的另一个问题是将你的问题分成两部分,首先是指令集本身,可能听起来很傻但是注重指令而不是系统调用而不是外设,指令集。然后担心系统调用(我认为系统调用基础架构是一个坏主意,但尝试它们有一些价值,只考虑我们在运行Linux或Windows时调用了多少个BIOS)以及编程外设。外设编程与指令集或汇编语言完全无关(除了极少数例外,例如xmos.com xcore)。如果你有一个C编译器,你可能想学习C中的外设编程。

各种供应商,Atmel,NXPST等都有不同的解决方案,允许在线编程和一点点保护,但不一定是万无一失的。我喜欢两种不同的AVR解决方案。您不一定需要ISP程序员,您可以使用Arduino沙箱使用的相同串行协议对Arduino进行编程。如果您擦除/覆盖它,则可以使用ISP接口使用$ 4.30 MSP430 Launchpad板进行编程。像MSP430 Launchpad,STM32F4DISCOVERY等其他板子实际上有两个微控制器,一个用于与主机连接。你通常不会触摸的那个,它通常在USB之后向主机说一些协议,然后(通常)使用JTAG来编程目标部分。 JTAG并非全部宽容 - 如果你在JTAG可以接管之前崩溃/挂起处理器核心你就可以打砖板,Cortex-M0很容易,Stellaris 800很容易(盒子是在那个上载了警告),可能是其他人的长名单。 AVR解决方案可以防止出现此问题。 Raspberry Pi解决方案非常有趣,我无法决定是否喜欢它。