带有 8 位 MCU (ATmega328) 的 arduino uno 但使用 32 位 C/C++ 程序编程
arduino uno with 8-bit MCU (ATmega328) but program with 32-bit C/C++ program
如果您能耐心解释一个看似幼稚的问题,我将不胜感激?
带有8位MCU(ATmega328)的Arduino Uno,但我们用32位C程序自定义编写它?为什么?
Arduino Uno(以8位AVR单片机(ATmega328)为例),据我所知寻址方式和基本算术运算都是8位操作,
而当我在 Arduino IDE 中编程时,默认情况下我正在编程,就像它是一个 32 位 C/C++ 程序(例如,我可以定义uint32_t,....或,)
所以这一切都是由 Arduino IDE 中的编译器完成的吗? (那是谁?avr-gcc?)
并且...编译器在将 32 位算术运算转换为 8 位算术运算时做了更多工作?
每个处理器/微控制器都在特定的指令集上运行。本质上,将源代码编译成机器代码是编译器的工作,因此编译器必须知道处理器的(8 位)指令集。所以如果你以一个uint32_t加法为例,它必须将它"compile"分成几个加法指令,因为8位AVR只能将两个8位值相加。这是一个简化的示例,但我希望您能理解。
如前所述,32 位算术运算被分解为您的 8 位 MCU 可以处理的多个 8 位运算。我自己还没有尝试过,但我怀疑做任何比使用更大变量类型的简单算术更复杂的事情都会消耗更多的硬件资源,应该尽可能避免。
如果您能耐心解释一个看似幼稚的问题,我将不胜感激?
带有8位MCU(ATmega328)的Arduino Uno,但我们用32位C程序自定义编写它?为什么?
Arduino Uno(以8位AVR单片机(ATmega328)为例),据我所知寻址方式和基本算术运算都是8位操作,
而当我在 Arduino IDE 中编程时,默认情况下我正在编程,就像它是一个 32 位 C/C++ 程序(例如,我可以定义uint32_t,....或,)
所以这一切都是由 Arduino IDE 中的编译器完成的吗? (那是谁?avr-gcc?)
并且...编译器在将 32 位算术运算转换为 8 位算术运算时做了更多工作?
每个处理器/微控制器都在特定的指令集上运行。本质上,将源代码编译成机器代码是编译器的工作,因此编译器必须知道处理器的(8 位)指令集。所以如果你以一个uint32_t加法为例,它必须将它"compile"分成几个加法指令,因为8位AVR只能将两个8位值相加。这是一个简化的示例,但我希望您能理解。
如前所述,32 位算术运算被分解为您的 8 位 MCU 可以处理的多个 8 位运算。我自己还没有尝试过,但我怀疑做任何比使用更大变量类型的简单算术更复杂的事情都会消耗更多的硬件资源,应该尽可能避免。