Systems Stack: C, C++, Embedded
From Source Code to Silicon - A Complete Learning Repository
This repository provides a complete, hands-on learning experience for systems programming covering:
Layer
Topics
C Language
Pointers, Memory Management, Bitwise Operations, Preprocessor
C++ Language
Move Semantics, Smart Pointers, Templates, Lambdas
Embedded Systems
Interrupts, GPIO, Timers, Communication (UART/SPI/I2C)
Exercises
4 Practical Challenges with Solutions
Each topic includes:
β
Detailed README with theory, syntax, diagrams
β
Working Code ready to compile and run
β
Interactive Makefile for easy navigation
β
Exercises to test your understanding
Systems Stack - Visual Representation
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β APPLICATION LAYER β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β C++ LANGUAGE β β
β β Move Semantics β Smart Pointers β Templates β Lambdas β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β C LANGUAGE β β
β β Pointers β Memory β Bitwise β Preprocessor β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β EMBEDDED BAREMETAL β β
β β Interrupts β GPIO β Timers β UART/SPI/I2C β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β HARDWARE β β
β β ARM Cortex-M / AVR / RISC-V β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Systems_Stack_C-CPP-Embedded/
β
βββ README.md # This file
βββ Makefile # Interactive menu system
βββ LICENSE # MIT License
β
βββ 01-c-language/
β βββ pointers/
β β βββ README.md # Theory + diagrams + syntax
β β βββ pointer_arithmetic.c # Working code
β βββ memory/
β β βββ README.md
β β βββ memory.c
β βββ bitwise/
β β βββ README.md
β β βββ bitwise.c
β βββ preprocessor/
β βββ README.md
β βββ preprocessor.c
β
βββ 02-cpp-language/
β βββ move-semantics/
β β βββ README.md
β β βββ move_semantics.cpp
β βββ smart-pointers/
β β βββ README.md
β β βββ smart_pointers.cpp
β βββ templates/
β β βββ README.md
β β βββ templates.cpp
β βββ lambdas/
β βββ README.md
β βββ lambdas.cpp
β
βββ 03-embedded-baremetal/
β βββ interrupts/
β β βββ README.md
β β βββ interrupts.c
β βββ gpio/
β β βββ README.md
β β βββ gpio.c
β βββ timers/
β β βββ README.md
β β βββ timers.c
β βββ communication/
β βββ README.md
β βββ communication.c
β
βββ exercises/
β βββ challenges/
β β βββ README.md # Challenge descriptions
β βββ solutions/
β βββ solution_01_pointers.c
β βββ solution_02_bitwise.c
β βββ solution_03_move_semantics.cpp
β βββ solution_04_gpio.c
β
βββ bin/ # Compiled binaries (auto-created)
Tool
Version
Check Command
GCC
4.8+
gcc --version
G++
4.8+
g++ --version
Make
3.8+
make --version
# Clone the repository
git clone https://github.com/yourname/Systems_Stack_C-CPP-Embedded.git
cd Systems_Stack_C-CPP-Embedded
# Build everything
make all
# Start interactive menu
make menu
Interactive Menu Flow
βββββββββββββββββββββββββββββββββββββββ
β MAIN MENU β
β 1. C Language β
β 2. C++ Language β
β 3. Embedded Baremetal β
β 4. Exercises β
β 5. Clean β
β 0. Exit β
βββββββββββββββββββββββββββββββββββββββ
β
βββββββββββββββββββββββββΌββββββββββββββββββββββββ
β β β
βΌ βΌ βΌ
βββββββββββββββββ βββββββββββββββββ βββββββββββββββββ
β C LANGUAGE β β C++ LANGUAGE β β EMBEDDED β
βββββββββββββββββ€ βββββββββββββββββ€ βββββββββββββββββ€
β 1. Pointers β β 1. Move β β 1. Interrupts β
β 2. Memory β β 2. Smart Ptr β β 2. GPIO β
β 3. Bitwise β β 3. Templates β β 3. Timers β
β 4. Preprocessorβ β 4. Lambdas β β 4. Comm β
βββββββββββββββββ βββββββββββββββββ βββββββββββββββββ
β β β
βΌ βΌ βΌ
βββββββββββββββββ βββββββββββββββββ βββββββββββββββββ
β TOPIC MENU β β TOPIC MENU β β TOPIC MENU β
βββββββββββββββββ€ βββββββββββββββββ€ βββββββββββββββββ€
β 1. Run Code β β 1. Run Code β β 1. Run Code β
β 2. View READMEβ β 2. View READMEβ β 2. View READMEβ
β 0. Back β β 0. Back β β 0. Back β
βββββββββββββββββ βββββββββββββββββ βββββββββββββββββ
β β β
βΌ βΌ βΌ
βββββββββββββββββ βββββββββββββββββ βββββββββββββββββ
β OUTPUT β β OUTPUT β β OUTPUT β
β Code runs β β Code runs β β Code runs β
β Shows: β β Shows: β β Shows: β
β - Explanationβ β - Explanationβ β - Explanationβ
β - Code β β - Code β β - Code β
β - Result β β - Result β β - Result β
βββββββββββββββββ βββββββββββββββββ βββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β USER INTERACTION FLOW β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β START β
β β β
β βΌ β
β βββββββββββββββββββ β
β β make menu β β User runs this command β
β ββββββββββ¬βββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β MAIN MENU DISPLAYED β β
β β βββββββββββββββββββββββββββββββββββββββββββ β β
β β SYSTEMS STACK: C, C++, EMBEDDED β β
β β βββββββββββββββββββββββββββββββββββββββββββ β β
β β 1. C Language β β
β β 2. C++ Language β β
β β 3. Embedded Baremetal β β
β β 4. Exercises β β
β β 5. Clean β β
β β 0. Exit β β
β ββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββ β
β β User selects 1 β β C Language β
β ββββββββββ¬βββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β C MENU DISPLAYED β β
β β βββββββββββββββββββββββββββββββββββββββββββ β β
β β C LANGUAGE β β
β β βββββββββββββββββββββββββββββββββββββββββββ β β
β β 1. Pointers β β
β β 2. Memory β β
β β 3. Bitwise β β
β β 4. Preprocessor β β
β β 0. Back β β
β ββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββ β
β β User selects 1 β β Pointers β
β ββββββββββ¬βββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β POINTERS MENU DISPLAYED β β
β β βββββββββββββββββββββββββββββββββββββββββββ β β
β β POINTERS - EXPLANATION β β
β β βββββββββββββββββββββββββββββββββββββββββββ β β
β β A pointer stores a memory address. β β
β β *ptr - Get value at address β β
β β &var - Get address of variable β β
β β ptr++ - Move to next element β β
β β βββββββββββββββββββββββββββββββββββββββββββ β β
β β 1. Run Code β β
β β 2. View README β β
β β 0. Back β β
β ββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββ β
β β User selects 1 β β Run Code β
β ββββββββββ¬βββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β CODE EXECUTION β β
β β βββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β 1. Compiler (gcc) compiles the .c file β β
β β β β β
β β 2. Binary created in bin/ directory β β
β β β β β
β β 3. Binary executes β β
β β β β β
β β 4. Output displayed on screen β β
β β β β
β β OUTPUT: β β
β β ========== POINTER ARITHMETIC DEMO ========== β β
β β Array values: 10 20 30 40 50 β β
β β *ptr = 10 β β
β β After ptr++: 20 β β
β β After ptr+=2: 40 β β
β β ========== COMPLETE ========== β β
β β β β
β ββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββ β
β β Press Enter β β Returns to Pointers Menu β
β βββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Topic
README
Code
Key Concepts
Pointers
β
β
Pointer arithmetic, function pointers, double pointers, NULL pointers
Memory
β
β
Stack, heap, static storage, memory layout
Bitwise
β
β
AND/OR/XOR/NOT, shifts, bit manipulation, bit fields
Preprocessor
β
β
Macros, conditional compilation, X-macros
Topic
README
Code
Key Concepts
Move Semantics
β
β
Lvalue/Rvalue, move constructor, std::move
Smart Pointers
β
β
unique_ptr, shared_ptr, weak_ptr
Templates
β
β
Function templates, class templates, specialization
Lambdas
β
β
Capture, mutable, generic lambdas
Topic
README
Code
Key Concepts
Interrupts
β
β
Vector table, ISR, NVIC, priorities
GPIO
β
β
Registers (MODER, ODR, BSRR), push-pull, open-drain
Timers
β
β
Prescaler, auto-reload, PWM, watchdog
Communication
β
β
UART, SPI, I2C, baud rate, modes
Challenge
Topic
Solution
Difficulty
#1: Pointer Swap
Pointers
β
β Easy
#2: Count Set Bits
Bitwise
β
ββ Medium
#3: String Move
Move Semantics
β
ββ Medium
#4: LED Blink
Embedded
β
βββ Hard
Command
Description
make menu
Start interactive menu
make c_menu
Go directly to C menu
make cpp_menu
Go directly to C++ menu
make embedded_menu
Go directly to Embedded menu
make exercises_menu
Go directly to Exercises
make clean
Remove all compiled binaries
make all
Build all examples
# Run specific topics without menu
make run_ptr_arith # Pointers demo
make run_memory # Memory demo
make run_bitwise # Bitwise demo
make run_move # Move semantics demo
make run_smart # Smart pointers demo
make run_interrupts # Interrupts demo
make run_gpio # GPIO demo
# Run challenges
make run_challenge1 # Pointers challenge
make run_challenge2 # Bitwise challenge
make run_challenge3 # Move semantics challenge
make run_challenge4 # GPIO challenge
Learning Path Recommendation
Week 1-2: C Language
βββ Day 1-2: Pointers
βββ Day 3-4: Memory Management
βββ Day 5-6: Bitwise Operations
βββ Day 7: Preprocessor
Week 3-4: C++ Language
βββ Day 1-2: Move Semantics
βββ Day 3-4: Smart Pointers
βββ Day 5: Templates
βββ Day 6-7: Lambdas
Week 5-6: Embedded Baremetal
βββ Day 1-2: Interrupts
βββ Day 3-4: GPIO
βββ Day 5: Timers
βββ Day 6-7: Communication Protocols
Week 7: Exercises & Challenges
βββ Complete all 4 challenges
βββ Review solutions
βββ Build your own projects
Contributions are welcome! Please:
Fork the repository
Create a feature branch
Commit your changes
Push to the branch
Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
ARM Cortex-M Reference Manuals
C++ Standard Committee Papers
GNU Compiler Collection Documentation
STM32 Reference Manuals
If this repository helps you learn systems programming, please give it a star! β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Topics: 4 Languages | 12 Modules | 4 Challenges
Code: 12 C Files | 8 C++ Files | 2000+ Lines
Documentation: 12 README Files | 200+ Pages Equivalent
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Happy Coding!