Table of Contents
Quality should contain the notion of value, not just efficiency. Russell L. Ackoff.
Whether you think you can, or you think you can't–you're right. Henry Ford.
Inventing on principle, Bret Victor
ARM
Teensy or 1bitsy (using the Black Magic Probe to get rid of OpenOCD)
Building bare metal and linux applications
Popular ARM variants are:
- v7-a, thumb2, vfp, neon, implemented on Cortex cores
- v5, arm, e.g. ARM9E, XScale
- v4, arm, e.g. StrongARM, ARM7TDMI, ARM9TDMI
ARM stack traces and supervisor mode.
https://launchpad.net/gcc-arm-embedded
ELF 101, a Linux executable workthrough (ARM)
ARM assembly for embedded applications
ARM Cortex-M4 Technical Reference Manual
ARM Cortex-M4 instruction timing
Embedded
https://interrupt.memfault.com/blog/asserts-in-embedded-systems
The amazing $1 microcontroller
https://embeddedartistry.com/blog/2019/4/16/exploring-startup-implementations-newlib-arm
15 steps to better embedded SW
Jay Carlson's embedded linux article
Microchip application notes on using peripherals under Linux
https://blog.thea.codes/the-most-thoroughly-commented-linker-script
Board | HW | Project links | Toolchain version / Build environment | SW Components |
---|---|---|---|---|
Infineon XMC4800 Relax | XMC4800-F144 @144MHz 2MB Flash 352KB RAM Segger J-Link | Board MCU_DS MCU_RM | Docker Ubuntu 18.04 with: gcc-arm-none-eabi-8-2018-q4-major (developer.arm.com) | XMCLib 2.1.22 JLink V634g |
ST Nucleo F429ZI | STM32F429ZIT6 @180MHz 2MB Flash 256+4KB SRAM Black Magic Probe (and incl. UART) | Board MCU_DS MCU_RM F4_PM | gcc-arm-none-eabi-9-2019-q4-major — gcc-arm-none-eabi-9-2019-q4-major — RTEMS toolchain | libopencm3 — CubeMX (168MHz) Flash and debug with gdb — RTEMS |
Pyboard D SF6W | STM32F767VIT @216MHz 2MB Flash 2MB QSPI Flash 512KB RAM | Board DIP68 MCU_DS MCU_RM F7_PM | (FW obtained from MicroPython ) | MicroPython 1.14-83 Flash with dfu-util |
ST STM32MP157A-DK1 | STM32MP157 (2A7 @650MHz + M4 @209MHz) 4-Gbit DDR3L On-board ST-LINK/V2-1 | Board MCU_DS MCU_RM | Docker Ubuntu 18.04 with: yocto thud | Real-time (RT-PREEMPT) |
ST B-G474E-DPOW1 | STM32G474RET6 @180MHz 512KB Flash 128KB SRAM Segger J-Link | Board MCU_DS MCU_RM M4_PM | gcc-arm-none-eabi-9-2019-q4-major — gcc-arm-none-eabi-9-2019-q4-major — RTEMS toolchain | libopencm3 — CubeMX (168MHz) Flash and debug with gdb — RTEMS |
TI Hercules 570LC43 | TMS570LC4357 (2R5F @300MHz) 4MB Flash 512KB RAM On-board XDS100 | Board MCU_DS MCU_RM | CCS 10.2.0 | HALCoGen 04.07.01 Flash and debug with CCS |
Trenz TE0802 | Zynq Ultrascale+ ZU2CG (2R5F @600MHz, 2A53 @1.5GHz) 32MB SPI Flash 1GB LPDDR4 RAM On-board USB JTAG | Board Board_Res Board_TRM MCU_DS MCU_RM | Vitis/Vivado 2019.2 — RTEMS toolchain | Vitis/Vivado 2019.2 — RTEMS |
RTOS
http://www.keil.com/rl-arm/rtx_rtosadv.asp
RTEMS, very mature, high driver availability
FreeRTOS, very low resources
ThreadX, resource bound, deeply embedded
Mbed OS
Linux/Unix
Stuff related to Embedded Linux
http://ltsi.linuxfoundation.org/what-is-ltsi
https://marcin.juszkiewicz.com.pl/download/tables/syscalls.html
BSD
Some FreeBSD tips.
Programming
10 lessons from a sw engineer and freelancer
What not to do as a programmer
Nasa's ten commandments of programming
- Read the Reference
- Break Down Problems
- Never Stop Learning
- Have Patience
- Keep it Simple
Autotest is an interesting testing framework that can be used to test big systems or e.g. to validate hardware.
http://throwtheswitch.org/white-papers/ceedling-intro.html
http://www.drdobbs.com/cpp/a-lightweight-logger-for-c/240147505
http://nathanleclaire.com/blog/2013/10/27/5-cool-unix-hacks-for-fun-and-productivity/
Internet of Things
We can use sensor networks specific OSs like TinyOS or Contiki (see also the wiki), and standard RTOSs like FreeRTOS or uCOS-III. In systems with enough HW resources, embedded Linux can also be used.
Machine Learning
Bayesian statistics presentation
http://svds.com/tensorflow-image-recognition-raspberry-pi/
http://partiallyderivative.com/podcast/2017/03/28/learning-machine-learning
Projects
Basic lab bench equipment
- Power supply: Peaktech 6035D
- Signal generator: Peaktech 4055
- Data acquisition: Labjack U12
- Logic analyzer: TOL-08938 from Saleae Logic
- Oscilloscope: Picoscope 2203, TDS2024B, TDS2001C
- low-power currempt consumption measurement: uCurrent from EEVblog´s Dave Jones
- antistatic mat: Vermason
- Western Digital WD Blue 3D NAND Internal SSD Hard Drive
- Black SSS-T6 Pepper Jobs stand
- PCBite probes (https://amzn.to/44uIWqw)
- Ergonomic keyboard: MoErgo
http://dangerousprototypes.com/docs/Bus_Pirate
http://www.watterott.com/en/Bus-Pirate
https://interrupt.memfault.com/blog/four-favorite-firmware-debug-tools
Other
https://github.com/papers-we-love/papers-we-love
Single board computers and modules
Porting from MIPS to ARM
Coding for Neon. Read also this post.
Boot sequence on an ARM-based system
http://www.kunen.org/uC/beagle/omap_dmtimer.html
http://www.bravegnu.org/gnu-eprog/
http://www.freertos.org/embeddedtcp.html
http://stackoverflow.com/questions/1160362/experiences-with-free-embedded-tcp-ip-stacks
http://lwip.wikia.com/wiki/Porting_For_Bare_Metal
http://mbed.org/forum/mbed/topic/2073/
http://andybrown.me.uk/wk/2012/09/01/ethernet-phy-stm32f107/
http://en.wikipedia.org/wiki/Wi-Fi_Direct
Coremark benchmark, intending to become an industry standard, replacing the aging Dhrystone benchmark. See http://en.wikipedia.org/wiki/EEMBC.