我很感激你耐心解释一个看似天真的问题?
带有8位MCU的Arduino Uno(ATmega328),但我们使用32位C程序习惯进行编程?为什么呢?
Arduino Uno(例如),使用8位AVR MCU(ATmega328),据我所知,寻址模式和基本算术运算都是8位操作,
当我在Arduino IDE中编程时,默认情况下我编程就像是一个32位的C / C ++程序(例如,我可以定义uint32_t,....或者)
所有这些都是由Arduino IDE中的编译器完成的吗? (那是谁?avr-gcc?)
和...编译在将32位算术运算转换为8位算术运算方面做了更多工作?
答案 0 :(得分:1)
每个处理器/微控制器都在特定的指令集上运行。本质上,编译器的工作是将源代码编译成机器代码,因此编译器必须知道处理器的(8位)指令集。因此,如果你以uint32_t为例,它必须"编译"它分为几个添加指令,因为8位AVR只能添加两个8位值。这是一个简化的例子,但我希望你能得到这个想法。
答案 1 :(得分:1)
如前所述,32位算术运算可分解为8位MCU可处理的多个8位运算。我自己没有尝试过,但我怀疑做比复杂类型更简单的算法更复杂的事情会消耗更多的硬件资源,如果可能的话,应该尽量避免。