arduino uno与8位MCU(ATmega328),但程序与32位C / C ++程序

时间:2015-07-26 07:19:18

标签: arduino-uno avr-gcc arduino-ide

我很感激你耐心解释一个看似天真的问题?

带有8位MCU的Arduino Uno(ATmega328),但我们使用32位C程序习惯进行编程?为什么呢?

  1. Arduino Uno(例如),使用8位AVR MCU(ATmega328),据我所知,寻址模式和基本算术运算都是8位操作,

  2. 当我在Arduino IDE中编程时,默认情况下我编程就像是一个32位的C / C ++程序(例如,我可以定义uint32_t,....或者)

  3. 所有这些都是由Arduino IDE中的编译器完成的吗? (那是谁?avr-gcc?)

    和...编译在将32位算术运算转换为8位算术运算方面做了更多工作?

2 个答案:

答案 0 :(得分:1)

每个处理器/微控制器都在特定的指令集上运行。本质上,编译器的工作是将源代码编译成机器代码,因此编译器必须知道处理器的(8位)指令集。因此,如果你以uint32_t为例,它必须"编译"它分为几个添加指令,因为8位AVR只能添加两个8位值。这是一个简化的例子,但我希望你能得到这个想法。

答案 1 :(得分:1)

如前所述,32位算术运算可分解为8位MCU可处理的多个8位运算。我自己没有尝试过,但我怀疑做比复杂类型更简单的算法更复杂的事情会消耗​​更多的硬件资源,如果可能的话,应该尽量避免。