Group Assignment: Embedded Programming
For this week's group assignment we had to compare the performance and development workflows for other architectures.
AVR supposedly stands for "Alf and Vegard's RISC processor", and is an 8 bit RISC architecture. It comes with on-chip flash memory and can be directly programmed using an ISP if the RST, MOSI, MISO and SCK pins of the processor are exposed.
The AVR Assembler instruction set is not fully implemented in all of the AVR microcontrollers, but always a subset of it. For programming C code can be directly compiled to AVR machine code. It's also possible to cross-compile Rust using Rust-AVR.
Performance wise AVR is a bit limited, as it's completely geared towards embedded devices. AVR microcontrollers typically can run with up to 20 MHz or even up to 32MHz. All instructions need only one clock cycle, which means the microcontroller can reach up to one million instructions per second per MHz.
AVR microcontrollers contain a bootloader region that can be used to programm it over any other interface even over USB or Bluetooth. An especially easy way to program AVR is via the Arduino ecosystem, which provides a lot of libraries, a simplified language and automated compiling and flashing.
An example for a AVR architecture is the ATmega 328P Microcontroller.
Xtensa is a 32 bit RISC architecture. One of the systems where it is used is the ESP32 by Espressif Systems. There is a variety of compatible languages and development environments, such as Arduino, Lua RTOS, mruby or .NET nanoFramework. The processor used in the ESP32, Xtensa LX6, can run at up to 240 MHz and 600 DMIPS.
ARM is not a single architecture but a family of RISC architectures with both 32 and 64 bit variants. Originally the name meant "Acorn RISC Machine", which was later changed to "Advanced RISC Machine". ARM microprocessors can run with much higher speeds and are powerful enough to support complex operating systems like Linux, Android or OpenBSD. ARM support is available for a large variety of programming languages.
ARM is also supported in the Arduino ecosystem, for example in the Arduino Due or the STM32, which features an ARM Cortex-M3 processor running at 84Mhz. Much higher speed ARM processors are used in smartphones or one-chip-computers like the Raspberry Pi.
X86 is another family of architectures, including 16, 32 and 64 bit variants. In contrast to the aforementioned architectures x86 uses a CISC instead of a RISC design. X86 processors are very powerful and are most often used in servers and workstations. Normally they are not programmed directly but trough the use of higher level languages and an operating system.