From 83d70447a6e53dada79d6609265d2be8974e271e Mon Sep 17 00:00:00 2001 From: Scott Gibb Date: Mon, 11 Nov 2024 15:56:50 +0000 Subject: [PATCH 1/3] Added Markdownlint and static analysis --- .github/workflows/Static Analysis.yml | 22 ++++++++++++++ .markdownlint.json | 5 +++ README.md | 44 +++++++++++++-------------- 3 files changed, 48 insertions(+), 23 deletions(-) create mode 100644 .github/workflows/Static Analysis.yml create mode 100644 .markdownlint.json diff --git a/.github/workflows/Static Analysis.yml b/.github/workflows/Static Analysis.yml new file mode 100644 index 0000000..7e79b07 --- /dev/null +++ b/.github/workflows/Static Analysis.yml @@ -0,0 +1,22 @@ +name: Markdownlint + +on: [push, pull_request] + +jobs: + markdownlint: + name: Markdownlint + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Set up Node.js + uses: actions/setup-node@v2 + with: + node-version: '14' + + - name: Install markdownlint-cli + run: npm install -g markdownlint-cli + + - name: Run markdownlint + run: markdownlint '**/*.md' \ No newline at end of file diff --git a/.markdownlint.json b/.markdownlint.json new file mode 100644 index 0000000..ed80b75 --- /dev/null +++ b/.markdownlint.json @@ -0,0 +1,5 @@ +{ + "MD026": false, + "default": true, + "line-length": false + } \ No newline at end of file diff --git a/README.md b/README.md index 071299c..ac544a0 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ [![GitHub release (by tag)](https://img.shields.io/github/downloads/m3y54m/Embedded-Engineering-Roadmap/latest/total?style=plastic)](https://github.com/m3y54m/Embedded-Engineering-Roadmap/releases/latest) [![GitHub all releases](https://img.shields.io/github/downloads/m3y54m/Embedded-Engineering-Roadmap/total?style=plastic&label=total%20downloads)](https://github.com/m3y54m/Embedded-Engineering-Roadmap/releases) -This roadmap is designed to help beginners aspiring to build a career as an **Embedded Engineer/Developer**, as well as assist current practitioners in expanding their skills. +This roadmap is designed to help beginners aspiring to build a career as an **Embedded Engineer/Developer**, as well as assist current practitioners in expanding their skills. Embedded engineering demands a solid understanding of hardware functionality as well as software development and programming skills. If you really want to pursue this career you must be highly motivated and passionate about it. As the well-known saying goes, "Hardware is hard!". But don't panic and be patient for the challenges you may encounter along this exciting journey. By dedicating enough time and effort practicing and doing projects you will soon find yourself as a real embedded engineer! ๐Ÿ˜€ @@ -53,20 +53,20 @@ It's crucial to note that each company in the embedded industry may have unique The roadmap provides a comprehensive guide to the essential topics for a typical "Embedded Systems Engineer" role. By delving into both software and hardware aspects, you can develop the necessary skills to thrive in this dynamic field. However, if you have a clear preference for software or hardware, you can tailor your learning path accordingly. -> [!NOTE] +> [!NOTE] > **Remember that the importance of individual software and hardware skills can differ depending on the specific requirements of the company and the job role.** - - -> [!TIP] +> [!TIP] > To differentiate between the types of learning resources and the quality of their content, specific symbols are used before each item. > > **Resource types:** +> > - ๐Ÿ“˜ : Books > - ๐ŸŽž๏ธ : Videos > - ๐Ÿ“ : Write-ups, articles, and blog posts > - ๐Ÿ”— : Other links that do not fit into any of the above categories > > **Content quality symbols:** +> > - ๐Ÿ‘ถ : Easy-to-understand and beginner-friendly resources. Refer to them if you do not have prior knowledge in a topic. > - ๐Ÿ’Ž : Well-known references that have truly invaluable and comprehensive content. Refer to them if you want to deepen your understanding of a topic. @@ -246,7 +246,7 @@ Computer architecture is the backbone of embedded systems, governing the hardwar - [๐Ÿ“˜๐Ÿ‘ถ๐Ÿ’Ž Computer Organization and Design: ARM Edition - David A. Patterson, John L. Hennessy](https://a.co/d/8YPUXG7) - [๐Ÿ“˜๐Ÿ‘ถ๐Ÿ’Ž Digital Design and Computer Architecture: ARM Edition - Sarah Harris, David Harris](https://a.co/d/4otoVvI) - [๐Ÿ“˜๐Ÿ‘ถ๐Ÿ’Ž Digital Design and Computer Architecture: RISC-V Edition - Sarah Harris, David Harris](https://a.co/d/61l7Jtb) -- [๐Ÿ“˜๐Ÿ‘ถ The Elements of Computing Systems - Noam Nisan, Shimon Schocken](https://a.co/d/cX6jkLl) +- [๐Ÿ“˜๐Ÿ‘ถ The Elements of Computing Systems - Noam Nisan, Shimon Schocken](https://a.co/d/cX6jkLl) - [๐Ÿ“˜ Computer Organization and Embedded Systems - Carl Hamacher, Zvonko Vranesic, Safwat Zaky, Naraig Manjikian](https://a.co/d/2lt4Svf) - [๐Ÿ“˜ Embedded Systems Architecture - Tammy Noergaard](https://www.oreilly.com/library/view/embedded-systems-architecture/9780123821966/) - [๐Ÿ“˜ Embedded Systems Architecture - Daniele Lacamera](https://www.packtpub.com/product/embedded-systems-architecture-second-edition/9781803239545) @@ -258,12 +258,12 @@ _________________ ### โœณ๏ธ Using Test Equipment -Embedded systems often require specialized test equipment to verify their functionality and performance. This equipment includes multimeters, oscilloscopes, logic analyzers, function generators, power supplies, and other tools that allow engineers to measure signals, inject stimuli, and monitor the behavior of embedded systems. +Embedded systems often require specialized test equipment to verify their functionality and performance. This equipment includes multimeters, oscilloscopes, logic analyzers, function generators, power supplies, and other tools that allow engineers to measure signals, inject stimuli, and monitor the behavior of embedded systems. #### ๐Ÿ”ต Multimeter - [๐ŸŽž๏ธ๐Ÿ‘ถ Learn How to Use a Multimeter!](https://youtu.be/4lAyzRxsbDc) -- [๐Ÿ“๐Ÿ‘ถ How to Use a Multimeter ](https://learn.sparkfun.com/tutorials/how-to-use-a-multimeter/all) +- [๐Ÿ“๐Ÿ‘ถ How to Use a Multimeter](https://learn.sparkfun.com/tutorials/how-to-use-a-multimeter/all) #### ๐Ÿ”ต Logic / Protocol Analyzer @@ -384,7 +384,7 @@ Mastering programming fundamentals and software development principles is essent _________________ -### โœณ๏ธ Programming Languages +### โœณ๏ธ Programming Languages Low-level languages like C and assembly provide direct hardware access, enabling efficient code optimization for resource-constrained embedded systems. System-level languages like C++ and Rust offer a higher level of abstraction for complex embedded applications, while Python is often employed for testing embedded systems due to its simplicity. @@ -397,9 +397,9 @@ Low-level languages like C and assembly provide direct hardware access, enabling - [๐ŸŽž๏ธ๐Ÿ’Ž Microchip University - C Programming Callbacks](https://mu.microchip.com/c-programming-callbacks) - [๐ŸŽž๏ธ๐Ÿ‘ถ C Programming for Beginners | Full Course](https://www.youtube.com/watch?v=ssJY5MDLjlo) - [๐ŸŽž๏ธ C Programming Tutorials (YouTube Playlist)](https://www.youtube.com/playlist?list=PLA1FTfKBAEX4hblYoH6mnq0zsie2w6Wif) -- [๐Ÿ“˜๐Ÿ’Ž The C Programming Language - Brian W. Kernighan, Dennis M. Ritchie ](https://www.amazon.com/dp/0131103628?ref_=cm_sw_r_cp_ud_dp_KRZ8M1WTXWVG0HMSRBXA) +- [๐Ÿ“˜๐Ÿ’Ž The C Programming Language - Brian W. Kernighan, Dennis M. Ritchie](https://www.amazon.com/dp/0131103628?ref_=cm_sw_r_cp_ud_dp_KRZ8M1WTXWVG0HMSRBXA) - [๐Ÿ”—๐Ÿ‘ถ C by Example](https://www.cbyexample.com/) -- [๐Ÿ“˜ C How to Program - Paul Deitel, Harvey Deitel ](https://deitel.com/c-how-to-program-9-e/) +- [๐Ÿ“˜ C How to Program - Paul Deitel, Harvey Deitel](https://deitel.com/c-how-to-program-9-e/) - [๐Ÿ“˜ Effective C - An Introduction to Professional C Programming - Robert C. Seacord](https://nostarch.com/Effective_C) - [๐Ÿ“˜ Modern C - Jens Gustedt](https://gustedt.gitlabpages.inria.fr/modern-c/) - [๐Ÿ”— Embedded C Coding Standard](https://barrgroup.com/embedded-systems/books/embedded-c-coding-standard) @@ -469,7 +469,7 @@ Microcontrollers are integrated circuits (ICs) that combine a microprocessor, me Some popular microcontroller families include AVR, PIC, STM32, MSP430, nRF, and ESP32. Choosing the right microcontroller involves assessing application requirements, processing power, memory needs, and input/output capabilities. Consider ease of use, cost, reliability, availability, and future expansion. - [๐Ÿ“ What Is a Microcontroller? The Defining Characteristics and Architecture of a Common Component](https://www.allaboutcircuits.com/technical-articles/what-is-a-microcontroller-introduction-component-characteristics-component/) -- [๐Ÿ“ How to Choose the Right Microcontroller for Your Application ](https://www.allaboutcircuits.com/technical-articles/how-to-choose-the-right-microcontroller-for-your-application/) +- [๐Ÿ“ How to Choose the Right Microcontroller for Your Application](https://www.allaboutcircuits.com/technical-articles/how-to-choose-the-right-microcontroller-for-your-application/) - [๐Ÿ“ How to Read a Microcontroller Datasheet: Introduction and First Steps](https://www.allaboutcircuits.com/technical-articles/how-to-read-a-microcontroller-datasheet-introduction-and-first-steps2/) - [๐Ÿ“˜๐Ÿ‘ถ Make: AVR Programming - Elliot Williams](https://www.oreilly.com/library/view/make-avr-programming/9781449356484/) - [๐ŸŽž๏ธ๐Ÿ‘ถ๐Ÿ’Ž NewbieHack - Microcontroller Tutorial - A Beginners Guide (AVR)](https://www.youtube.com/playlist?list=PLE72E4CFE73BD1DE1) @@ -616,7 +616,6 @@ Embedded systems often communicate with other devices or external systems via in - [๐ŸŽž๏ธ 1-Wireยฎ Technology Overview](https://www.youtube.com/watch?v=CjH-OztKe00) - #### ๐Ÿ”ต Digital Audio Protocols ##### ๐Ÿ”ถ I2S @@ -794,7 +793,7 @@ Embedded systems employ a combination of volatile (SRAM, DRAM, PSRAM) and non-vo - [๐Ÿ“ NAND and eMMC: All You Need to Know About Flash Memory](https://www.makeuseof.com/tag/nand-emmc-need-know-flash-memory/) -##### ๐Ÿ”ถ NOR / NAND +##### ๐Ÿ”ถ NOR / NAND - [๐ŸŽž๏ธ QSPI in STM32 || Write and Read || N25Q](https://www.youtube.com/watch?v=xIfh_uYy-OU) - [๐ŸŽž๏ธ QSPI in STM32 || Boot from EXT Memory || XIP || N25Q](https://www.youtube.com/watch?v=gAyuF20ok8c) @@ -1028,7 +1027,6 @@ Real-time operating systems (RTOS) are specialized operating systems designed to - [๐Ÿ”— Microsoft Azure RTOS documentation](https://learn.microsoft.com/en-us/azure/rtos/) - [๐Ÿ”— Azure RTOS ThreadX](https://github.com/azure-rtos/threadx) - #### ๐Ÿ”ต 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. @@ -1045,7 +1043,6 @@ Embedded Linux is a specialized version of the Linux operating system tailored f - [๐Ÿ”— Android Open Source Project](https://source.android.com) - [๐Ÿ”— Android Automotive](https://source.android.com/docs/automotive) - ##### ๐Ÿ”ถ Linux Kernel - [๐Ÿ“˜๐Ÿ‘ถ Linux Kernel Development - Robert Love](https://www.oreilly.com/library/view/linux-kernel-development/9780768696974/) @@ -1131,12 +1128,12 @@ JTAG and SWD (Serial Wire Debug) are two popular interface protocols used for de #### ๐Ÿ”ต 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. +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) -- [๐Ÿ”— gdbgui - A browser-based frontend to gdb (gnu debugger) ](https://www.gdbgui.com/) +- [๐Ÿ”— gdbgui - A browser-based frontend to gdb (gnu debugger)](https://www.gdbgui.com/) - [๐ŸŽž๏ธ everyone needs to stop using print debugging (do THIS instead)](https://www.youtube.com/watch?v=3T3ZDquDDVg) - [๐ŸŽž๏ธ GDB is REALLY easy! Find Bugs in Your Code with Only A Few Commands](https://www.youtube.com/watch?v=Dq8l1_-QgAc) - [๐Ÿ“ Introduction to ARM Semihosting](https://interrupt.memfault.com/blog/arm-semihosting) @@ -1156,7 +1153,7 @@ Build systems automate the process of compiling and linking source code into exe #### ๐Ÿ”ต Compilers / GCC -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. On the other hand proprietary compilers like Keil and IAR offer toolchain support, target-specific optimizations, and customer support, which may be preferred for specific projects. +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. On the other hand 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) - [๐Ÿ“ The Best and Worst GCC Compiler Flags For Embedded](https://interrupt.memfault.com/blog/best-and-worst-gcc-clang-compiler-flags) @@ -1184,7 +1181,7 @@ Bash scripting serves as a powerful tool in embedded systems development, enabli #### ๐Ÿ”ต 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 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/) @@ -1192,6 +1189,7 @@ Docker containers provide a consistent and isolated environment for building sof - [๐ŸŽž๏ธ Introduction to Docker for the Embedded Developer](https://www.youtube.com/watch?v=Fz7ou-VBk-w) - [๐ŸŽž๏ธ Intro to CI/CD Part 1: Getting Started with Docker | Digi-Key Electronics](https://youtu.be/1nxGcfIm-TU) - [๐Ÿ“ A Modern C Development Environment](https://interrupt.memfault.com/blog/a-modern-c-dev-env) + _________________ ### โœณ๏ธ Software Development Life Cycle (SDLC) Models @@ -1219,7 +1217,7 @@ _________________ ### โœณ๏ธ 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. +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 @@ -1270,7 +1268,7 @@ Testing is an integral part of the embedded systems development process, ensurin #### ๐Ÿ”ต 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. +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) @@ -1433,7 +1431,7 @@ This work is licensed under a [Creative Commons Attribution-ShareAlike 4.0 Inter **Attribution** โ€” You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use. -**ShareAlike** โ€” If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original. +**ShareAlike** โ€” If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original. ## Acknowledgement From f2c0b113a171f2f08cd5fe1bdaa7dc5e8f23ab7d Mon Sep 17 00:00:00 2001 From: Scott Gibb Date: Mon, 11 Nov 2024 15:58:48 +0000 Subject: [PATCH 2/3] Correcting workflow error --- .github/workflows/Static Analysis.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/Static Analysis.yml b/.github/workflows/Static Analysis.yml index 7e79b07..63ad00d 100644 --- a/.github/workflows/Static Analysis.yml +++ b/.github/workflows/Static Analysis.yml @@ -19,4 +19,6 @@ jobs: run: npm install -g markdownlint-cli - name: Run markdownlint - run: markdownlint '**/*.md' \ No newline at end of file + run: | + echo "Checking Markdown files" + find . -type f -name "*.md" -print0 | xargs -0 markdownlint \ No newline at end of file From 39baabe9116f85234bab218f915caf7136a3d256 Mon Sep 17 00:00:00 2001 From: Scott Gibb Date: Mon, 11 Nov 2024 15:59:51 +0000 Subject: [PATCH 3/3] replaced workflow --- .github/workflows/Static Analysis.yml | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/.github/workflows/Static Analysis.yml b/.github/workflows/Static Analysis.yml index 63ad00d..f768d79 100644 --- a/.github/workflows/Static Analysis.yml +++ b/.github/workflows/Static Analysis.yml @@ -3,21 +3,14 @@ name: Markdownlint on: [push, pull_request] jobs: - markdownlint: - name: Markdownlint + Markdown_Lint_Check: + name: Markdown Lint Check runs-on: ubuntu-latest steps: - - name: Checkout repository - uses: actions/checkout@v2 - - - name: Set up Node.js - uses: actions/setup-node@v2 - with: - node-version: '14' - - name: Install markdownlint-cli run: npm install -g markdownlint-cli - + - name: Checkout code + uses: actions/checkout@v2 - name: Run markdownlint run: | echo "Checking Markdown files"