└── README.md /README.md: -------------------------------------------------------------------------------- 1 | 2 | # Embedded System Roadmap 3 | ## Module 1: Solid C Programming and Intro to Embedded World 4 | ### Part 1: Introduction to Embedded Systems 5 | - ES Definition 6 | - ES Characteristics 7 | - General System vs. Embedded System 8 | - Embedded System Applications 9 | - Embedded System Design 10 | - Trade off between HW and SW 11 | - SW (pros and cons) 12 | - HW (pros and cons) 13 | - Embedded System Design Steps 14 | -Embedded System Hardware 15 | - Processing Engines 16 | - MCU vs. MPU 17 | - MCU Components 18 | - CPU 19 | - Memory Units 20 | - Buses 21 | - IO 22 | - Timers 23 | - Watchdog Timers 24 | - Interrupt Circuitry 25 | - Clock 26 | - Other Components 27 | - Communication 28 | - USART 29 | - SPI 30 | - I2C 31 | - CAN 32 | - LIN 33 | - Sensing 34 | - ADC 35 | - Analog Comparator 36 | - Storage 37 | - MCU Clocks 38 | - Types 39 | - Sources 40 | - More complex (ARM, PLL) 41 | - MCU Power Management 42 | - ES Constraints 43 | - Deadlines (Maximum Execution Time) 44 | - Operating System Constraints 45 | - Communication Constraints 46 | - Memory Consumption 47 | - MCU Resources 48 | - Selection of Microcontroller 49 | - MCU Vendors 50 | - MCU IDEs 51 | - Embedded System Market 52 | - HW Market 53 | - SW Market 54 | - Embedded Market in Egypt 55 | ### Part 2: Solid C Programming 56 | 1. Choosing and Installing IDE 57 | - What's IDE? 58 | - Currently Available IDEs 59 | - Eclipse Download and Install 60 | 2. C Data Types, Operators and Expressions 61 | - Data Types 62 | - Basic Data types 63 | - Constatns 64 | - Escape character 65 | - Declarations 66 | - Casting 67 | - Operators 68 | - Arithmetic Operators (+,-,*,/,%) 69 | - (++, --) operators 70 | - Relational Operators 71 | - Logical Operators ( AND , OR , NOT ) 72 | - Bitwise Operators ( & , | , ^ , << , >> , ~ ) 73 | - Conditional Operator (Ternary) ()?: 74 | - sizeof( ) operator 75 | - Operator Precedence Rules 76 | 3. Control Flow 77 | - Conditional 78 | - If, else if, else 79 | - Switch 80 | - Loops 81 | - While 82 | - Do While 83 | - For 84 | - Break; and Continue; 85 | - Goto Labels 86 | - Spaghetti Vs. Structured Code 87 | 4. Functions 88 | - Basics of functions 89 | - Function Declaration (Prototype) and Definition 90 | - Call by Value vs. Call by reference 91 | - Static local variables, register keyword 92 | - Recursion 93 | 5. Arrays 94 | - Array definition and Multi-dimension Arrays 95 | - Arrays and functions (passing, returning) 96 | - Strings (characters array) 97 | 6. Pointers 98 | - Pointer and Addresses 99 | - Dereferencing 100 | - Pass by value vs. Pass by reference (address) 101 | - Pointers and arrays 102 | - Pointer Arithmetic 103 | - Why using pointers over arrays in loops? 104 | - Pointer to functions 105 | - Reading Complex pointers 106 | 7. Structure and User-defined Data Types 107 | - Need for complex data types 108 | - Struct keyword 109 | - Arrays of structs 110 | - Pointers to structs (*will be discussed in dynamic memory allocation*) 111 | - struct usage with functions (why?) 112 | - Typedef (user-defined types) 113 | - Struct bit fileds 114 | - Union 115 | 8. Dynamic Memory Allocation 116 | - Dynamic vs. static memory allocation 117 | - malloc, calloc, realloc and free 118 | - Advantages, disadvantages 119 | 9. Modularity and Program Structure 120 | - C Preprocessors 121 | - #include 122 | - macro like functions 123 | - conditional inclusion 124 | - .h and .c files 125 | - overview the executing process 126 | - conventions to write library 127 | - .h file 128 | - prototypes 129 | - extern variables 130 | - .c files 131 | - global variables 132 | - function definitions 133 | 10. Important Notes (Bonus Topics) 134 | - Declaration Vs. Definition for Variables and Functions 135 | - What does the compiler actually do? (Compilation Process) 136 | - Storage Classes 137 | - auto, register, static, extern 138 | - Pointer Reading 139 | - Applications in which unions are helpful (IPV4) 140 | - Command Line Arguments 141 | 142 | ## Module 2: Data Structures, Algorithms and Computer Architecture 143 | ### Part 1: Data Structures 144 | 1. Intro to data structure 145 | 2. Linked Lists 146 | - Linked Lists vs. Array 147 | - Implementations of Linked Lists 148 | - Insert Node 149 | - Traverse through List 150 | - Delete Node 151 | - Reverse List 152 | - Doubly Linked Lists 153 | - Stack 154 | - PUSH elements 155 | - POP elements 156 | - Queue 157 | ### Part 2: Algorithms 158 | #### Sorting 159 | - Introduction to Sorting 160 | - Selection Sorting Algorithm 161 | - Bubble Sorting Algorithm 162 | - Other Techniques Overview 163 | #### Searching 164 | - Introduction to searching 165 | - Linear Search 166 | - Binary Search 167 | - Other Techniques Overview 168 | #### Part 3: Computer System Organizations 169 | - Intro to Computer System 170 | - Processors 171 | - CPU Organizaiton 172 | - ALU 173 | - CU 174 | - PC 175 | - IR 176 | - Data Path 177 | - Instruction Execution Cycle (Fetch, Decode, Execute) 178 | - RISC vs. CISC 179 | - Pipe-lining Concept 180 | - Muti-processor Concepts 181 | - Primary Memory 182 | - Primary Memory Types 183 | - RAM 184 | - SRAM 185 | - DRAM 186 | - NVM 187 | - ROM 188 | - PROM 189 | - EPROM 190 | - EEPROM 191 | - Data Flash 192 | - Cache Memory 193 | - Memory Addesses 194 | - Big/Little Endian 195 | - Buses 196 | - Address Bus 197 | - Data Bus 198 | - Control Bus 199 | - Von Neumann vs. Harvard Architecture 200 | ## Module 3: Microcontroller Drivers Interfacing 201 | ### Part 1: Interfacing Basic Drivers 202 | - AVR Architecture 203 | - Getting Started 204 | - Basic Connection (Crystal and Biasing) 205 | - Generating Hex File 206 | - Programmer 207 | - GPIO 208 | - Input (Switch) 209 | - Output 210 | - Debugging using Serial printf (Caveman Debugging) 211 | - LCD 212 | - Pin Configuration 213 | - LCD Modes 214 | - Implement Driver Functions 215 | - Write Char 216 | - Print String 217 | - Cursor Display Mode 218 | - Set Cursor Position 219 | - Clear Screen 220 | - Custom Character 221 | - Keypad 222 | - Keypad Matrix 223 | - Scan Button Press 224 | - ADC & DAC 225 | - ADC 226 | - ADC Terms 227 | - Sampling 228 | - Resolution 229 | - Channels 230 | - ADC Conversion Technique (Successive Approximation) 231 | - Sensor Interfacing 232 | - Temp Sensor (LM35) 233 | - Light Sensor (LDR) 234 | - Analog Comparator 235 | - DAC 236 | - Digital to Analog Conversion 237 | - Implementing Code for (DAC0808) 238 | - Timers & Counters 239 | - Timer Functional Diagram 240 | - Compare Match Mode 241 | - Normal Timer Mode 242 | - 16-Bit Timer Vs. 8-Bit Timer 243 | - Using Pre-Scalars for Generating Large Time Delays 244 | - Timers to Counters 245 | - PWM Programming 246 | - What's a PWM wave? 247 | - PWM Applications 248 | - Controlling Servo Motor 249 | - PWM Mode in Timers 250 | - Input Capture and Wave Generation 251 | - Wave Generation 252 | - Generating Waves 253 | - Square Waves 254 | - Pulse Pattern 255 | - Normal and CTC modes 256 | - Input Capture Mode 257 | - Measuring Frequency of Wave 258 | - Measuring Pulse Width 259 | - Measuring Frequency 260 | - Interrupt 261 | - Polling vs. Interrupts 262 | - Interrupt Service Routine (ISR) 263 | - Interrupt Vector Table 264 | - External Interrupt 265 | - Interrupt Priority 266 | - Nesting Interrupts 267 | - Context Switching 268 | - Interrupt Latency 269 | - Serial Communication 270 | - Serial vs. Parallel 271 | - Terminologies 272 | - Data Transfer Rate (Baud Rate) 273 | - Synch vs. ASynch 274 | - Full-duplex vs. Half-duplex 275 | - USART Module Driver Implementation 276 | - Data Frame 277 | - Sending Data 278 | - Receiving Data 279 | - SPI 280 | - SPI Essentials 281 | - SPI Modes 282 | - SPI Master/Slave Communication 283 | - Implementing SPI Code 284 | - Master Code 285 | - Slave Code 286 | - I2C 287 | - I2C Essentials 288 | - I2C Operating Mode 289 | - I2C Protocol 290 | - I2C Addressing Modes 291 | - I2C Master/Slave Communication 292 | - I2C Implementing Code 293 | - Slave Code 294 | - Master Code 295 | - Power Management Modes 296 | - Why Power Management? 297 | - AVR Sleep 298 | - On-time Calculations for Battery-based Systems 299 | - Debugging AVR 300 | - Hardware Debugger 301 | - AVR Simulator 302 | - PROTEUS Simulator 303 | ### Part 2: Make Arduino-like Driver Abstractions 304 | - Intro to Arduino Core Style 305 | - digitalRead, digitalWrite 306 | - analogRead, analogWrite 307 | - Serial.begin, Serial.write, Serial.print, Serial.println, Serial.read, Serial.available 308 | 309 | ## Module 4: RTOS and Automotive Programming and Communication Standards 310 | ### Part 1: RTOS Concepts 311 | - RTOS concepts 312 | - Introduction for RTOS 313 | - RTOS vs. Normal OS 314 | - RTOS basic Components and How it works 315 | - Foreground / Background Program Execution 316 | - Multitasking 317 | - Task Management 318 | - Task States 319 | - Context Switching 320 | - Scheduler 321 | - Scheduler Types 322 | - Preemptive 323 | - Non preemptive 324 | - Policies / Algorithm / Strategies 325 | - Priority Based 326 | - Round Robin 327 | - Least Execution Time 328 | - Re-entrant / Non Re-entrant Function 329 | - Resource (Share Resource) 330 | - Mutex 331 | - Semaphores 332 | - Binary Semaphore 333 | - Counting Semaphore 334 | - Issues 335 | - Priority Inversion 336 | - Dead block 337 | ### Part 2: RTOS Implementation Using FreeRTOS AVR 338 | - FreeRTOS Intro 339 | - Tasks 340 | - Creating Tasks 341 | - Deleting Tasks 342 | - Using Queues 343 | - Using Semaphores 344 | - Using Interrupts 345 | - Porting to AVR 346 | ### Part 3: Automotive 347 | - Programming Standards 348 | - MISRA C 349 | - AutoSAR SW Architecture 350 | - Communication Protocols 351 | - CAN 352 | - LIN 353 | ## Module 5: SW Engineering and Testing Practices 354 | ### Part 1: SW Engineering 355 | - SW Engineering Concepts 356 | - SW Development Life Cycle 357 | - Waterfall Model 358 | - V-Model 359 | - Agile Model 360 | - Other Models Concepts 361 | - SW Requirements Management 362 | - Requirements Activities 363 | - Requirements Traceability 364 | - SW Configuration Management 365 | - Config Management Concepts 366 | - Version Control Systems (Git) 367 | - SW Project Management Concepts 368 | - UML Concepts 369 | - Use Cases Diagram 370 | - Class Diagram 371 | - Activity/State Chart Diagram 372 | - Other Diagrams Concepts 373 | ### Part 2: Cont'd Software Engineering : Software Testing 374 | - SW Testing Fundementals 375 | - 7 Testing Principles 376 | - Fundamental Testing Process 377 | - Psychology of Testing 378 | - Test Levels 379 | - Unit Testing 380 | - Integration Testing 381 | - System Testing 382 | - Acceptance Testing 383 | - Test Types 384 | -Functional Testing 385 | - Non-functional Testing 386 | - Other Testing Types Concepts 387 | - Structural Testing 388 | - Change-based Testing 389 | - Test Development Process 390 | - Test Analysis 391 | - Test Design 392 | - Traceability 393 | - Test Techniques 394 | - Static Testing 395 | - Dynamic Testing 396 | - White Box 397 | - Statement Coverage 398 | - Decision Coverage 399 | - Black Box 400 | - Equivalence Partitioning (EP) 401 | - Boundary Value Analysis (BVA) 402 | - Decision Tables 403 | - How to Select Proper Testing Technique 404 | - Test Organization 405 | - Test Planning and Estimation 406 | - Risk and Testing 407 | - Overview of Common Used Testing Tools 408 | --------------------------------------------------------------------------------