diff --git a/README.md b/README.md index 668cc95..1017e1d 100644 --- a/README.md +++ b/README.md @@ -340,6 +340,8 @@ _________________ - [πŸ”˜ Dynamic Memory Allocation | C Programming Tutorial](https://www.youtube.com/watch?v=R0qIYWo8igs) - [πŸ”˜ Dynamic memory allocation in C - malloc calloc realloc free](https://www.youtube.com/watch?v=xDVC3wKjS64&t=140s) - [πŸ”˜ What is Memory Leak in C/C++? How can we avoid?](https://aticleworld.com/what-is-memory-leak-in-c-c-how-can-we-avoid/) +- [πŸ”˜ Understanding Memory Management in Rust](https://medium.com/geekculture/understanding-memory-management-in-rust-a341cfce9807) +- [πŸ”˜ Memory Management in Python](https://realpython.com/python-memory-management/) _________________ @@ -509,6 +511,8 @@ _________________ ### ✳️ Interfaces, Protocols & Communication Technologies +Embedded systems often communicate with other devices or external systems via interfaces, protocols. Interfaces provide the physical connections, protocols define data exchange rules. The choice depends on application-specific needs, including bandwidth, distance, security, and power consumption. + #### πŸ”΅ β€ŒBasic Protocols - [πŸ”˜ Understanding Serial Protocols](https://www.youtube.com/watch?v=LEz5UCN3aHA) @@ -701,7 +705,10 @@ _________________ ### ✳️ Hardware Simulation / Emulation Tools +Embedded system development often involves simulating or emulating hardware environments to test and debug software before deploying it on actual hardware. Simulation tools create virtual models of hardware systems, while emulation tools replicate the actual hardware behavior using real hardware components. These tools offer several advantages, including reducing development time, minimizing hardware costs, and enhancing software reliability. + - [πŸ‘Ά Wokwi - Online ESP32, STM32, Arduino Simulator](https://wokwi.com/) +- [πŸ‘Ά SimulIDE Circuit Simulator](https://simulide.com/) #### πŸ”΅ [QEMU](https://www.qemu.org/) @@ -723,6 +730,8 @@ _________________ ### ✳️ Memory Technologies & File Systems +Embedded systems employ a combination of volatile (SRAM, DRAM, PSRAM) and non-volatile (flash, EEPROM, FRAM) memory to store and access data, optimizing performance, cost, power consumption, and durability based on application-specific needs. + - [πŸ”˜ Memory Options for Embedded Systems: How to Select the Right Memory Configuration](https://www.qt.io/embedded-development-talk/memory-options-for-embedded-systems-how-to-select-the-right-memory-configuration) #### πŸ”΅ Flash Memory @@ -756,6 +765,8 @@ _________________ #### πŸ”΅ File Systems +A file system is a way of organizing data on a storage device, such as a hard drive, flash drive, or solid-state drive. It provides a way to store, access, and manage files, which are collections of data that can be accessed individually. File systems in embedded systems are typically lightweight and optimized for efficiency, considering the limited resources and specific requirements of embedded devices. They often employ simpler file structures and data structures compared to desktop or server file systems. + - [πŸ”˜ Flash filesystems](https://hugh712.gitbooks.io/embeddedsystem/content/flash_filesystems.html) - [πŸ”˜ Block filesystems](https://hugh712.gitbooks.io/embeddedsystem/content/block_filesystems.html) - [πŸ”˜ Understanding the UBI File System in Embedded Devices](https://serhack.me/articles/understanding-ubi-file-system-embedded-devices-reolink/) @@ -770,6 +781,8 @@ _________________ ### ✳️ Sensors & Actuators +Sensors and actuators are the eyes and hands of embedded systems. They are responsible for gathering information about the environment and taking actions based on that information. Sensors convert physical phenomena, such as temperature, light, or sound, into electrical signals that can be processed by the embedded system. Actuators, on the other hand, convert electrical signals into physical actions, such as controlling the speed of a motor or opening and closing a valve. + - [πŸ’Ž Coursera - Embedding Sensors and Motors Specialization](https://www.coursera.org/specializations/embedding-sensors-motors) #### πŸ”΅ Sensors @@ -797,6 +810,8 @@ _________________ ### ✳️ Digital Signal Processing +Digital signal processing (DSP) is a branch of engineering that deals with the processing of digital signals. It is used in a wide variety of applications, including embedded systems, communication systems, and multimedia systems. DSP algorithms are often implemented in hardware using application-specific integrated circuits (ASICs) or field-programmable gate arrays (FPGAs). + #### πŸ”΅ DSP Basics & Filter Design - [πŸ’Ž The Scientist and Engineer's Guide to Digital Signal Processing - Steven W. Smith](https://www.dspguide.com/pdfbook.htm) @@ -837,6 +852,8 @@ _________________ ### ✳️ Operating Systems +Embedded systems can be programmed with either an operating system (OS) or directly on the hardware, known as bare-metal programming. Each approach has its own advantages and disadvantages. Embedded operating systems provide a layer of abstraction between the hardware and the application code, offering benefits like resource management, task scheduling, error handling, and communication capabilities. However, they add overhead and may not be suitable for memory-constrained applications. + #### πŸ”΅ Operating System Fundamentals - [πŸ‘Ά Putting the β€œYou” in CPU](https://cpu.land/) @@ -848,6 +865,8 @@ _________________ #### πŸ”΅ Real-Time Operating Systems +Real-time operating systems (RTOS) are specialized operating systems designed to meet strict timing deadlines. They are used in embedded systems where timing is critical, such as avionics, robotics, and medical devices. RTOSs provide a deterministic environment in which tasks can be executed with predictable timing. This ensures that critical tasks are always executed on time, even in the presence of interrupts and other disruptions. + ##### πŸ”Ά RTOS Basics - [πŸ”˜ Bare-metal and RTOS Based Embedded Systems](https://microcontrollerslab.com/difference-bare-metal-and-rtos-based-embedded-systems/) @@ -924,6 +943,8 @@ _________________ #### πŸ”΅ Embedded Linux +Embedded Linux is a specialized version of the Linux operating system tailored for embedded systems. It's designed to operate on devices with resource constraints, such as limited memory, processing power, and power consumption. + - [πŸ”˜ What Is Embedded Linux?](https://www.windriver.com/solutions/learning/embedded-linux) - [πŸ”˜ FreeRTOS vs Linux for Embedded Systems](https://www.bytesnap.com/news-blog/freertos-vs-linux-embedded-systems/) - [πŸ‘Ά Introduction to Embedded Linux (YouTube Playlist)](https://youtube.com/playlist?list=PLEBQazB0HUyTpoJoZecRK6PpDG31Y7RPB) @@ -997,16 +1018,22 @@ _________________ ### ✳️ Debugging +Debugging embedded systems involves identifying and resolving software defects and hardware malfunctions. Various techniques are employed to pinpoint the root causes of issues, such as static code analysis, dynamic analysis, simulation and emulation, in-circuit debugging, and hardware debugging. + - [πŸ”˜ Using Asserts in Embedded Systems](https://interrupt.memfault.com/blog/asserts-in-embedded-systems) #### πŸ”΅ JTAG / SWD +JTAG and SWD (Serial Wire Debug) are two popular interface protocols used for debugging and programming embedded systems. JTAG is a more general-purpose protocol that can be used to debug and program a wider range of devices, while SWD is a simpler and more compact protocol that is specifically designed for ARM microcontrollers. + - [πŸ”˜ A Deep Dive into ARM Cortex-M Debug Interfaces](https://interrupt.memfault.com/blog/a-deep-dive-into-arm-cortex-m-debug-interfaces) - [πŸ”˜ Guide: Connecting your debugger](https://stm32-base.org/guides/connecting-your-debugger.html) - [πŸ”˜ STM32 + SWD + ST-Link + CubeIDE | Debugging on Custom Hardware Tutorial - Phil's Lab #4](https://www.youtube.com/watch?v=qMUzLU636s8) #### πŸ”΅ GDB +GDB (GNU Debugger) is a powerful and versatile debugger for source-level and machine-level debugging. It supports a wide range of programming languages, including C, C++, Objective-C, Java, and Rust. GDB is a free and open-source software tool that is widely used by developers and researchers. + - [πŸ”˜ Advanced GDB Usage](https://interrupt.memfault.com/blog/advanced-gdb) - [πŸ”˜ How do breakpoints even work?](https://interrupt.memfault.com/blog/cortex-m-breakpoints) - [πŸ”˜ GNU GDB Debugger Command Cheat Sheet](http://www.yolinux.com/TUTORIALS/GDB-Commands.html) @@ -1017,15 +1044,21 @@ _________________ #### πŸ”΅ OpenOCD +OpenOCD (Open On-Chip Debugger) is an open-source software tool that provides a powerful and versatile platform for debugging and programming embedded systems. It serves as an interface between a hardware debug adapter (HDA) and a debugger, such as GNU Debugger (GDB), enabling developers to interact with the target microcontroller or microprocessor. OpenOCD supports a wide range of hardware platforms and provides a comprehensive set of features for hardware debugging, programming, and boundary-scan testing. + - [πŸ”˜ OpenOCD - GitHub repository](https://github.com/openocd-org/openocd) - [πŸ”˜ This Is 100% How You Should Be Debugging | How to Use OpenOCD to Debug Embedded Software with GDB](https://www.youtube.com/watch?v=_1u7IOnivnM) _________________ -### ✳️ Build Tools +### ✳️ Build Systems + +Build systems automate the process of compiling and linking source code into executable programs. They are essential tools for software development, as they can help to improve the efficiency and consistency of the build process. Popular build systems include Make, and CMake. #### πŸ”΅ GCC & Make +GCC (the GNU Compiler Collection) is a free and open-source compiler system that can compile programs for many different programming languages, including C, C++, Objective-C, Fortran, Ada, and Go. GCC is a popular choice for embedded systems development due to its open source nature, maturity, stability, portability, performance, and large community. Proprietary compilers like Keil and IAR offer toolchain support, target-specific optimizations, and customer support, which may be preferred for specific projects. + - [πŸ”˜ GCC and Make - Compiling, Linking and Building C/C++ Applications](https://www3.ntu.edu.sg/home/ehchua/programming/cpp/gcc_make.html) - [πŸ”˜ A Shallow Dive into GNU Make](https://interrupt.memfault.com/blog/gnu-make-guidelines#a-shallow-dive-into-gnu-make) - [πŸ”˜ The Best and Worst GCC Compiler Flags For Embedded](https://interrupt.memfault.com/blog/best-and-worst-gcc-clang-compiler-flags) @@ -1035,16 +1068,22 @@ _________________ #### πŸ”΅ CMake +CMake and Make are both tools for building software applications. CMake is a meta-build system that generates Makefiles, which are then used by Make to build the software. CMake is more versatile and cross-platform than Make, and it is becoming the more popular choice for modern software development. + - [πŸ”˜ CMake Tutorial](https://cmake.org/cmake/help/latest/guide/tutorial/index.html) - [πŸ”˜ How to CMake Good (YouTube Playlist)](https://youtube.com/playlist?list=PLK6MXr8gasrGmIiSuVQXpfFuE1uPT615s) #### πŸ”΅ Bash Scripting +Bash scripting serves as a powerful tool in embedded systems development, enabling developers to automate repetitive tasks, handle complex configurations, and manage the embedded system's environment effectively. Bash scripting is a Linux-specific tool that is not natively integrated into Windows. However, it can be accessed via the Windows Subsystem for Linux (WSL). + - [πŸ”˜ Bash scripting cheatsheet](https://devhints.io/bash) - [πŸ”˜ Bash Scripting Tutorial for Beginners](https://www.youtube.com/watch?v=tK9Oc6AEnR4) #### πŸ”΅ Docker +Docker containers provide a consistent and isolated environment for building software applications. This can help to improve the reproducibility of builds and reduce the risk of errors. Docker also makes it easier to share build environments, which can save time and effort for developers. + - [πŸ”˜ Docker Docs](https://docs.docker.com/get-started/) - [πŸ”˜ Docker Cheat Sheet](https://dockerlabs.collabnix.com/docker/cheatsheet/) - [πŸ‘Ά Docker for Dummies](https://dev.to/stevenmcgown/docker-for-dummies-2bff) @@ -1055,6 +1094,8 @@ _________________ ### ✳️ Software Development Life Cycle (SDLC) Models +Software Development Life Cycle (SDLC) models provide a structured approach to software development, guiding the process from planning to deployment and maintenance. These models provide a framework for organizing, managing, and executing software projects, ensuring a consistent and efficient development process. + - [πŸ”˜ What is the software development life cycle?](https://www.coderus.com/the-software-development-lifecycle/) - [πŸ”˜ Embedded Product Development Life Cycle: Four Main Steps](https://www.sam-solutions.com/blog/embedded-product-development-life-cycle/) @@ -1074,7 +1115,9 @@ _________________ _________________ -### ✳️ Version Control +### ✳️ Version Control Systems + +Version control systems are essential tools for managing changes to code and other digital assets. They track changes over time, allowing developers to revert to previous versions, collaborate effectively, and identify potential conflicts. Popular version control systems include Git, Mercurial, and Subversion. #### πŸ”΅ Git @@ -1089,6 +1132,8 @@ _________________ ### ✳️ Testing +Testing is an integral part of the embedded systems development process, ensuring the quality, reliability, and safety of these systems. It involves a range of techniques, from unit testing to system testing, to validate the functionality and performance of the software and hardware components. + - [πŸ”˜ Embedded Testing](https://artoftesting.com/embedded-testing) - [πŸ”˜ What is Embedded Testing in Software Testing?](https://www.guru99.com/embedded-software-testing.html) - [πŸ”˜ Verification vs Validation in Embedded Software](https://www.parasoft.com/blog/verification-vs-validation-in-embedded-software/) @@ -1116,6 +1161,8 @@ _________________ #### πŸ”΅ CI/CD Pipelines +Continuous Integration (CI) and Continuous Delivery (CD) are software development practices that automate the process of building, testing, and deploying software. CI/CD pipelines are designed to ensure that software changes are deployed quickly and reliably. + - [πŸ”˜ Intro to CI/CD Part 1: Getting Started with Docker | Digi-Key Electronics](https://youtu.be/1nxGcfIm-TU) - [πŸ”˜ Intro to CI/CD Part 2: Getting Started with GitHub Actions | Digi-Key Electronics](https://youtu.be/8pyqbYDYkRs) - [πŸ”˜ How to Build a Continuous Integration and Delivery Process for Embedded Software](https://medium.com/jumperiot/how-to-build-a-continuous-integration-and-delivery-flow-for-embedded-software-b0b5bf220a2) @@ -1126,11 +1173,15 @@ _________________ #### πŸ”΅ SIL / HIL Testing +Software-in-the-loop (SIL) and hardware-in-the-loop (HIL) testing are two crucial techniques used in embedded systems development to validate the functionality and performance of software before it is deployed on real hardware. These testing methods simulate the real-world environment of the embedded system using software models or hardware emulators. + - [πŸ”˜ Hardware-in-Loop and Software-in-Loop Testing](https://roboticsknowledgebase.com/wiki/system-design-development/In-Loop-Testing/) - [πŸ”˜ Embedded CI/CD with HIL Testing (YouTube Playlist)](https://youtube.com/playlist?list=PL4cGeWgaBTe1uwiqIAc6fwPzPpvgPZI2J) #### πŸ”΅ Standards & Certifications +Embedded systems development is subject to a variety of standards and certifications, which serve as guidelines and benchmarks for ensuring the quality, safety, and reliability of these systems. These standards are often developed and maintained by industry bodies, such as the International Electrotechnical Commission (IEC) and the Society of Automotive Engineers (SAE). + - [πŸ”˜ Intro to Embedded Development: Styles and Standards](https://www.allaboutcircuits.com/technical-articles/embedded-programming-styles-and-standards/) - [πŸ”˜ Safety Standards and Certifications for Embedded Systems Development](https://www.linkedin.com/pulse/safety-standards-certifications-embedded-systems-development/) - [πŸ”˜ Microchip University - An Introduction To The ISA/IEC 62443 Standard](https://mu.microchip.com/an-introduction-to-the-isaiec-62443-standard) @@ -1151,10 +1202,14 @@ _________________ ### ✳️ Embedded Security +Security in embedded systems is particularly challenging due to resource constraints and the inherent nature of these devices. Embedded systems typically operate on small, low-power microcontrollers with limited memory and processing power. This makes it difficult to implement the same level of security as traditional computing platforms. Additionally, embedded systems often have limited access to updates and patches, making them more vulnerable to known vulnerabilities. + - [πŸ”˜ Embedded Systems Security and TrustZone](https://embeddedsecurity.io/) #### πŸ”΅ Hardware Hacking +Learning hardware hacking helps security professionals understand how embedded systems can be compromised and develop effective defenses against cyberattacks. This knowledge enhances the resilience of embedded devices to attack. + - [πŸ’Ž Practical Hardware Pentesting - Jean-Georges Valle](https://a.co/d/dq4SeNH) - [πŸ”˜ Hardware Hacking Tutorial (YouTube Playlist)](https://www.youtube.com/playlist?list=PLoFdAHrZtKkhcd9k8ZcR4th8Q8PNOx7iU) - [πŸ’Ž The Hardware Hacking Handbook: Breaking Embedded Security with Hardware Attacks - Jasper van Woudenberg, Colin O'Flynn](https://a.co/d/gUIytFX) @@ -1196,13 +1251,18 @@ _________________ ### ✳️ AUTOSAR Architecture +AUTOSAR, or AUTomotive Open System ARchitecture, is a global industry standard for automotive software development. It is a software architecture that provides a standardized platform for developing and integrating software components in vehicle electronic control units (ECUs). This allows different ECUs from different manufacturers to communicate and work together seamlessly. + +- [πŸ”˜ AUTOSAR Standards](https://www.autosar.org/standards) - [πŸ”˜ AUTOSAR Basics | AUTOSAR Tutorial | Architecture | Automotive](https://www.youtube.com/watch?v=7b5BY1IAfwY) - [πŸ”˜ Introduction to AUTOSAR](https://www.youtube.com/watch?v=NfZI8wvgZPo) - +- [πŸ”˜ Udemy - Autosar Architecture (Learn from Scratch with Demo)](https://www.udemy.com/course/autosar-architecture/) _________________ ### ✳️ Edge AI & TinyML +Edge AI refers to the ability of devices to perform machine learning tasks on their own, without the need to send data to a central server. This can be done by using small, specialized AI models that are embedded directly into the device. TinyML is a subset of Edge AI that focuses on developing these models for devices with very limited computing power, such as microcontrollers and sensors. + - [πŸ”˜ Udemy – Getting Started with Embedded AI | Edge AI](https://www.udemy.com/course/getting-started-with-embedded-ai-hands-on-experience/) - [πŸ”˜ Intro to Edge AI: Machine Learning + IoT – Maker.io Tutorial | Digi-Key Electronics](https://www.youtube.com/watch?v=Ejld8XZmvwE) @@ -1235,6 +1295,8 @@ _________________ ### ✳️ GUI Design +Graphical User Interfaces (GUIs) have become an indispensable part of modern embedded systems, offering a user-friendly and intuitive way to interact with devices. Designing effective GUIs for embedded systems requires careful consideration of factors such as resource constraints, user experience, and real-time performance. + - [πŸ”˜ U8glib library for monochrome displays, version 2](https://github.com/olikraus/u8g2) - [πŸ”˜ LVGL](https://lvgl.io/) - [πŸ”˜ TouchGFX](https://support.touchgfx.com/4.20/docs/introduction/welcome)