Skip to content

Latest commit

Β 

History

15 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Systems Stack: C, C++, Embedded

From Source Code to Silicon - A Complete Learning Repository

License: MIT C C++ Embedded Makefile Platform


About This 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                     β”‚   β”‚
β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                                      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Project Structure

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)

Quick Start

Prerequisites

Tool Version Check Command
GCC 4.8+ gcc --version
G++ 4.8+ g++ --version
Make 3.8+ make --version

Installation

# 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     β”‚
    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜       β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜       β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Complete Working Flow

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                           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                           β”‚
β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                                        β”‚
β”‚                                                                              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Topics Covered in Detail

C Language

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

C++ Language

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

Embedded Baremetal

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

Exercises

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

Commands Reference

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

Direct Code Execution

# 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

Contributing

Contributions are welcome! Please:

  1. Fork the repository
  2. Create a feature branch
  3. Commit your changes
  4. Push to the branch
  5. Open a Pull Request

License

This project is licensed under the MIT License - see the LICENSE file for details.


Acknowledgments

  • ARM Cortex-M Reference Manuals
  • C++ Standard Committee Papers
  • GNU Compiler Collection Documentation
  • STM32 Reference Manuals

⭐ Star This Repository

If this repository helps you learn systems programming, please give it a star! ⭐


Repository Stats

═══════════════════════════════════════════════════════════════
   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!

About

Repository provides a complete, hands-on learning experience for Systems Programming, C & CPP Programming

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages