//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.//
[[https://www.youtube.com/watch?v=PUv66718DII|Inventing on principle, Bret Victor]]
====== ARM ======
**__[[STM32]]__**
**__[[Beaglebone Black]]__**
**__[[Raspberry PI]]__**
**__[[Teensy]]__** or [[https://1bitsy.org|1bitsy]] (using the [[https://github.com/blacksphere/blackmagic/wiki|Black Magic Probe]] to get rid of OpenOCD)
**__[[XMC]]__**
**__[[other boards]]__**
[[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
[[http://stackoverflow.com/questions/15159164/how-to-get-a-call-stack-from-a-software-interrupt-exception|ARM stack traces and supervisor mode.]]
[[Debugging ARM hard faults]]
https://launchpad.net/gcc-arm-embedded
[[https://imgur.com/r/Compilers/JEObT|ELF 101, a Linux executable workthrough (ARM)]]
[[https://embeddedsecurity.io/index.html|ARM programming and TrustZone]]
**__[[https://www.engr.scu.edu/~dlewis/book3/ | ARM assembly for embedded applications]]__**
**__[[Quick reference handouts]]__**
**[[https://static.docs.arm.com/ihi0042/g/aapcs32.pdf|ARM procedure call standard]]**
**{{ :arm_cortexm4_processor_trm_100166_0001_04_en.pdf |ARM Cortex-M4 Technical Reference Manual}}**
**[[https://www.engr.scu.edu/~dlewis/book3/docs/Cortex-M4%20Instruction%20Timing.pdf|ARM Cortex-M4 instruction timing]]**
**{{ :ddi0403e_d_armv7m_arm.pdf |ARMv7-M Architecture Reference Manual}}**
**{{ :dui0553.pdf |ARM Cortex-M4 Devices Generic User Guide}}**
====== Embedded ======
[[Debugging hardware]]
https://interrupt.memfault.com/blog/asserts-in-embedded-systems
[[Libraries]]
[[MCUs by industry]]
[[Saving flash space]]
[[Security]]
[[Real time data visualization]]
**__[[Embedded Testing]]__**
[[http://eswp3.readthedocs.io/en/master/index.html|Embedded SW principles]]
[[http://users.ece.utexas.edu/~valvano/arm/#RTOS|Texas course]]
[[https://jamesmunns.com/blog/hardware-ci-overview/|CI for embedded systems]]
[[https://jaycarlson.net/microcontrollers/|The amazing $1 microcontroller]]
[[https://embeddedartistry.com/blog/2018/4/26/embedded-rules-of-thumb/|Embedded rules of thumb]]
[[https://embeddedartistry.com/recommended-reading|Embedded Artistry]]
[[https://betterembsw.blogspot.com/2016/05/top-5-embedded-software-problem-areas.html|Top 5 embedded problem areas]]
https://embeddedartistry.com/blog/2019/4/16/exploring-startup-implementations-newlib-arm
[[https://covemountainsoftware.com/2020/03/23/the-matthew-test-15-steps-to-better-embedded-software-and-firmware/?mc_cid=c6e2df2123&mc_eid=4b5bfc8c2a|15 steps to better embedded SW]]
[[https://jaycarlson.net/embedded-linux/#benchmarks|Jay Carlson's embedded linux article]]
[[https://www.microchip.com/wwwproducts/en/ATSAMA5D27C-D1G|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| [[https://www.infineon.com/cms/en/product/evaluation-boards/kit_xmc48_relax_ecat_v1/|Board]] \\ [[https://www.infineon.com/dgdl/Infineon-XMC4700-XMC4800-DS-v01_01-EN.pdf?fileId=5546d462518ffd850151908ea8db00b3|MCU_DS]] \\ [[https://www.infineon.com/dgdl/Infineon-ReferenceManual_XMC4700_XMC4800-UM-v01_03-EN.pdf?fileId=5546d462518ffd850151904eb90c0044 | 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 \\ On-board ST-LINK/V2-1 \\ **Black Magic Probe (and incl. UART)** | [[https://www.st.com/resource/en/user_manual/dm00244518-stm32-nucleo-144-boards-stmicroelectronics.pdf|Board]] \\ [[https://www.st.com/resource/en/datasheet/stm32f429zi.pdf|MCU_DS]] \\ [[https://www.st.com/resource/en/reference_manual/DM00031020-.pdf|MCU_RM]] \\ [[https://www.st.com/content/ccc/resource/technical/document/programming_manual/6c/3a/cb/e7/e4/ea/44/9b/DM00046982.pdf/files/DM00046982.pdf/jcr:content/translations/en.DM00046982.pdf|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 | [[https://pybd.io/hw/pybd_sfxw.html|Board]] \\ [[https://pybd.io/hw/wbus_dip68.html|DIP68]] \\ [[https://www.st.com/resource/en/datasheet/stm32f767zi.pdf|MCU_DS]] \\ [[https://www.st.com/resource/en/reference_manual/dm00224583-stm32f76xxx-and-stm32f77xxx-advanced-armbased-32bit-mcus-stmicroelectronics.pdf|MCU_RM]] \\ [[https://www.st.com/resource/en/programming_manual/dm00237416-stm32f7-series-and-stm32h7-series-cortexm7-processor-programming-manual-stmicroelectronics.pdf | F7_PM]]| (FW obtained from [[http://www.micropython.org/download/pybd/|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 | [[https://www.st.com/resource/en/user_manual/dm00591354-discovery-kits-with-stm32mp157-mpus-stmicroelectronics.pdf|Board]] \\ [[https://www.st.com/resource/en/datasheet/stm32mp157a.pdf|MCU_DS]] \\ [[https://www.st.com/resource/en/reference_manual/dm00327659-stm32mp157-advanced-arm-based-32-bit-mpus-stmicroelectronics.pdf | MCU_RM]] | Docker Ubuntu 18.04 with: \\ yocto thud | Real-time (RT-PREEMPT)|
| **ST B-G474E-DPOW1** | STM32G474RET6 @180MHz \\ 512KB Flash \\ 128KB SRAM \\ On-board ST-LINK/V3E \\ **Segger J-Link** | [[https://www.st.com/resource/en/user_manual/um2577-discovery-kit-with-stm32g474re-mcu-stmicroelectronics.pdf|Board]] \\ [[https://www.st.com/resource/en/datasheet/stm32g474cb.pdf|MCU_DS]] \\ [[https://www.st.com/resource/en/reference_manual/rm0440-stm32g4-series-advanced-armbased-32bit-mcus-stmicroelectronics.pdf|MCU_RM]] \\ [[https://www.st.com/resource/en/programming_manual/pm0214-stm32-cortexm4-mcus-and-mpus-programming-manual-stmicroelectronics.pdf|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 | [[https://www.ti.com/lit/pdf/spnu617|Board]] \\ [[https://www.ti.com/lit/pdf/spns195|MCU_DS]] \\ [[https://www.ti.com/lit/pdf/spnu563 | 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 | [[https://shop.trenz-electronic.de/de/TE0802-02-2AEU2-A-MPSoC-Development-Board-mit-Xilinx-Zynq-UltraScale-ZU2-und-LPDDR4?c=473|Board]]\\ [[https://shop.trenz-electronic.de/de/Download/?path=Trenz_Electronic/Development_Boards/TE0802/REV02/Documents|Board_Res]]\\ [[https://wiki.trenz-electronic.de/display/PD/TE0802+TRM|Board_TRM]] \\ {{:ds891-zynq-ultrascale-plus-overview.pdf|MCU_DS}} \\ {{ :ug1085-zynq-ultrascale-trm.pdf|MCU_RM}} | Vitis/Vivado 2019.2 \\ --- \\ RTEMS toolchain | Vitis/Vivado 2019.2 \\ --- \\ RTEMS |
====== RTOS ======
[[Zephyr]]
http://www.keil.com/rl-arm/rtx_rtosadv.asp
[[https://mynewt.apache.org/|Mynewt]]
[[RTEMS]], very mature, high driver availability
[[FreeRTOS]], very low resources
ThreadX, resource bound, deeply embedded
Mbed OS
====== Linux/Unix ======
Stuff related to [[Embedded Linux]]
[[Cross-compiling]]
[[Ubuntu]]
**__[[kernel|Linux kernel]]__**
[[tools|Development tools]]
**__[[drivers|Driver programming]]__**
[[device tree]]
[[performance]]
[[Testing]]
**__[[Realtime]]__**
[[http://lxr.linux.no/+trees|The Linux Cross Reference]]
http://ltsi.linuxfoundation.org/what-is-ltsi
[[https://lkml.org/lkml/2012/11/13/531|Linux driver template]]
https://marcin.juszkiewicz.com.pl/download/tables/syscalls.html
==== BSD ====
Some [[FreeBSD|FreeBSD tips]].
====== Programming ======
[[https://dev.to/fzammit/10-lessons-from-a-software-engineer--freelancer-1fho?utm_source=Newsletter+Subscribers&utm_campaign=f369aac752-EMAIL_CAMPAIGN_2018_12_31_01_56&utm_medium=email&utm_term=0_d8f11d5d1e-f369aac752-154658141|10 lessons from a sw engineer and freelancer]]
[[https://dev.to/haseebelaahi/what-not-to-do-as-a-programmer-my-list-after-2-years-of-working-with-teams-1b23|What not to do as a programmer]]
[[https://www.profocustechnology.com/software-development/nasas-ten-commandments-programming/|Nasa's ten commandments of programming]]
* **Read the Reference**
* **Break Down Problems**
* **Never Stop Learning**
* **Have Patience**
* **Keep it Simple**
[[SW design lessons learned]]
[[C]]
[[Python]]
[[Software tools]]
[[Build tools]]
[[Psychology]]
[[http://autotest.github.com/|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://ideone.com/KbienB
http://nathanleclaire.com/blog/2013/10/27/5-cool-unix-hacks-for-fun-and-productivity/
https://pybit.es/career-development-programmers.html
====== Internet of Things ======
[[GPRS modems]]
[[WSN hardware]]
[[Data acquisition hardware]]
[[Standards]]
We can use sensor networks specific OSs like [[http://www.tinyos.net/|TinyOS]] or [[http://www.sics.se/~adam/contiki/docs/|Contiki]] (see also the [[http://www.sics.se/contiki/wiki/index.php/Main_Page|wiki]]), and standard RTOSs like FreeRTOS or uCOS-III. In systems with enough HW resources, embedded Linux can also be used.
====== Machine Learning ======
[[ML libraries]]
[[SciPy ecosystem]]
[[python visualization]]
[[statsmodels]]
[[time series]]
[[ML courses]]
[[https://www.youtube.com/watch?v=6GV5bTCLC8g|Bayesian statistics presentation]]
http://svds.com/tensorflow-image-recognition-raspberry-pi/
http://partiallyderivative.com/podcast/2017/03/28/learning-machine-learning
https://towardsdatascience.com/how-to-build-a-complex-reporting-dashboard-using-dash-and-plotl-4f4257c18a7f
https://github.com/jonnor/embeddedml/
====== Projects ======
[[Working on]]
[[Sensors]]
====== 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
https://www.embeddedrelated.com/showarticle/1473.php
====== Other ======
https://github.com/papers-we-love/papers-we-love
[[Single board computers]] and modules
[[LCD displays intefacing]]
[[WiFi modules interfacing]]
[[Shops]]
[[PCB manufacturers]]
Porting from [[http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dai0235c/index.html|MIPS to ARM]]
[[http://blogs.arm.com/software-enablement/684-coding-for-neon-part-5-rearranging-vectors/|Coding for Neon]]. Read also [[http://www.cnx-software.com/2011/11/27/arm-neon-tutorial-in-c-and-assembler/|this post]].
[[http://www.embeddedrelated.com/showarticle/124.php|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/
[[https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=https%3a%2f%2fmy.st.com%2fpublic%2fSTe2ecommunities%2fmcu%2fLists%2fcortex_mx_stm32%2fUsing%20STM32%20Optimized%20I2C%20examples%20when%20two%20I2C%20devices%20connected%20to%20one%20I2C%20port&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B¤tviews=586|I2C STM32 example]]
----
http://en.wikipedia.org/wiki/Wi-Fi_Direct
http://www.arm.com/community/partners/display_company/rw/company/celestial-semiconductor-ltd-now-a-part-of-cavium-networks/
[[http://www.coremark.org/home.php|Coremark]] benchmark, intending to become an industry standard, replacing the aging Dhrystone benchmark. See [[http://en.wikipedia.org/wiki/EEMBC]].
[[scratchpad]]