# kbabalad/embedded_c_programming architecture

> Architecture diagram of the GitHub repository kbabalad/embedded_c_programming, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/kbabalad/embedded_c_programming
- Repository: https://github.com/kbabalad/embedded_c_programming

## Overview

This repository is a beginner-focused Embedded C course: learners study C concepts and apply them in STM32 GPIO examples. The samples show standalone exercises, a console-based student-record program, and target code that accesses memory-mapped registers. The README documents broader topics, so unsampled course areas are represented by their existing directories without implying calls or a lesson sequence. The board is identified in the README; wiring beyond the sampled GPIO examples is not shown.

Main entry points: [`Target`](https://github.com/kbabalad/embedded_c_programming/tree/develop/Target) (Register Access), [`Record_management_app_alpha/main.c`](https://github.com/kbabalad/embedded_c_programming/blob/develop/Record_management_app_alpha/main.c) (Student Records), [`Target/Led_On/Src/main.c`](https://github.com/kbabalad/embedded_c_programming/blob/develop/Target/Led_On/Src/main.c) (GPIO Output), [`Target/IO_Pin_Read/Src/main.c`](https://github.com/kbabalad/embedded_c_programming/blob/develop/Target/IO_Pin_Read/Src/main.c) (GPIO Input and Output)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_c_basics["C Fundamentals"]
  node_types_control["Types and Control"]
  node_functions_storage["Functions and Storage"]
  node_preprocessor["Preprocessor"]
end

subgraph group_data_memory["Data and Memory"]
  node_pointers["Pointers and Qualifiers"]
  node_arrays_strings["Arrays and Strings"]
  node_structs_unions["Structs and Unions"]
  node_dynamic_memory["Dynamic Allocation"]
  node_memory_layout["Memory Layout"]
end

subgraph group_embedded["Embedded Programming"]
  node_bit_operations["Bit Operations"]
  node_register_access["Register Access"]
  node_gpio_output["GPIO Output<br/>[main.c]"]
  node_gpio_input["GPIO Input and Output<br/>[main.c]"]
  node_register_bitfields["Bitfield Registers<br/>[main.c]"]
end

subgraph group_applications["Example Programs"]
  node_student_records["Student Records<br/>[main.c]"]
end

node_learner(("Learner"))
node_console_user(("Console User"))
node_stm32_board["STM32 Board"]

node_learner -->|"studies"| node_types_control
node_learner -->|"studies"| node_functions_storage
node_learner -->|"studies"| node_preprocessor
node_learner -->|"studies"| node_pointers
node_learner -->|"studies"| node_arrays_strings
node_learner -->|"studies"| node_structs_unions
node_learner -->|"studies"| node_dynamic_memory
node_learner -->|"studies"| node_memory_layout
node_learner -->|"studies"| node_bit_operations
node_learner -->|"studies"| node_register_access
node_learner -->|"studies"| node_student_records
node_register_access -->|"includes examples"| node_gpio_output
node_register_access -->|"includes examples"| node_gpio_input
node_register_access -->|"includes examples"| node_register_bitfields
node_gpio_output -->|"writes registers"| node_stm32_board
node_gpio_input -->|"reads and writes"| node_stm32_board
node_register_bitfields -->|"writes registers"| node_stm32_board
node_console_user -->|"enters menu choices"| node_student_records
node_student_records -->|"prints records"| node_console_user

click node_types_control "https://github.com/kbabalad/embedded_c_programming/tree/develop/0004Loops_in%20_C"
click node_functions_storage "https://github.com/kbabalad/embedded_c_programming/tree/develop/Storage_class"
click node_preprocessor "https://github.com/kbabalad/embedded_c_programming/tree/develop/0009Preprocessor_Directives"
click node_pointers "https://github.com/kbabalad/embedded_c_programming/tree/develop/0001Pointer_Discussion"
click node_arrays_strings "https://github.com/kbabalad/embedded_c_programming/tree/develop/0007Strings_in_C"
click node_structs_unions "https://github.com/kbabalad/embedded_c_programming/tree/develop/00003StructInit"
click node_dynamic_memory "https://github.com/kbabalad/embedded_c_programming/tree/develop/0008Dynamic_Memory_Allocation"
click node_memory_layout "https://github.com/kbabalad/embedded_c_programming/tree/develop/memory_layout"
click node_bit_operations "https://github.com/kbabalad/embedded_c_programming/tree/develop/Bit_shifting"
click node_register_access "https://github.com/kbabalad/embedded_c_programming/tree/develop/Target"
click node_gpio_output "https://github.com/kbabalad/embedded_c_programming/blob/develop/Target/Led_On/Src/main.c"
click node_gpio_input "https://github.com/kbabalad/embedded_c_programming/blob/develop/Target/IO_Pin_Read/Src/main.c"
click node_register_bitfields "https://github.com/kbabalad/embedded_c_programming/blob/develop/Target/Led_Toogle_struct_Bit_fields/Src/main.c"
click node_student_records "https://github.com/kbabalad/embedded_c_programming/blob/develop/Record_management_app_alpha/main.c"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_types_control,node_functions_storage,node_preprocessor,node_console_user toneBlue
class node_pointers,node_arrays_strings,node_structs_unions,node_dynamic_memory,node_memory_layout toneAmber
class node_bit_operations,node_register_access,node_gpio_output,node_gpio_input,node_register_bitfields toneMint
class node_student_records toneRose
class node_learner,node_stm32_board toneIndigo
```

## Components

### C Fundamentals

- [Types and Control](https://github.com/kbabalad/embedded_c_programming/tree/develop/0004Loops_in%20_C): `0004Loops_in _C`
- [Functions and Storage](https://github.com/kbabalad/embedded_c_programming/tree/develop/Storage_class): `Storage_class`
- [Preprocessor](https://github.com/kbabalad/embedded_c_programming/tree/develop/0009Preprocessor_Directives): `0009Preprocessor_Directives`

### Data and Memory

- [Pointers and Qualifiers](https://github.com/kbabalad/embedded_c_programming/tree/develop/0001Pointer_Discussion): `0001Pointer_Discussion`
- [Arrays and Strings](https://github.com/kbabalad/embedded_c_programming/tree/develop/0007Strings_in_C): `0007Strings_in_C`
- [Structs and Unions](https://github.com/kbabalad/embedded_c_programming/tree/develop/00003StructInit): `00003StructInit`
- [Dynamic Allocation](https://github.com/kbabalad/embedded_c_programming/tree/develop/0008Dynamic_Memory_Allocation): `0008Dynamic_Memory_Allocation`
- [Memory Layout](https://github.com/kbabalad/embedded_c_programming/tree/develop/memory_layout): `memory_layout`

### Embedded Programming

- [Bit Operations](https://github.com/kbabalad/embedded_c_programming/tree/develop/Bit_shifting): `Bit_shifting`
- [Register Access](https://github.com/kbabalad/embedded_c_programming/tree/develop/Target): `Target`
- [GPIO Output](https://github.com/kbabalad/embedded_c_programming/blob/develop/Target/Led_On/Src/main.c): `Target/Led_On/Src/main.c`
- [GPIO Input and Output](https://github.com/kbabalad/embedded_c_programming/blob/develop/Target/IO_Pin_Read/Src/main.c): `Target/IO_Pin_Read/Src/main.c`
- [Bitfield Registers](https://github.com/kbabalad/embedded_c_programming/blob/develop/Target/Led_Toogle_struct_Bit_fields/Src/main.c): `Target/Led_Toogle_struct_Bit_fields/Src/main.c`

### Example Programs

- [Student Records](https://github.com/kbabalad/embedded_c_programming/blob/develop/Record_management_app_alpha/main.c): `Record_management_app_alpha/main.c`

### Other components

- **Learner**
- **Console User**
- **STM32 Board**

## Connections

- Learner → Types and Control: studies
- Learner → Functions and Storage: studies
- Learner → Preprocessor: studies
- Learner → Pointers and Qualifiers: studies
- Learner → Arrays and Strings: studies
- Learner → Structs and Unions: studies
- Learner → Dynamic Allocation: studies
- Learner → Memory Layout: studies
- Learner → Bit Operations: studies
- Learner → Register Access: studies
- Learner → Student Records: studies
- Register Access → GPIO Output: includes examples
- Register Access → GPIO Input and Output: includes examples
- Register Access → Bitfield Registers: includes examples
- GPIO Output → STM32 Board: writes registers
- GPIO Input and Output → STM32 Board: reads and writes
- Bitfield Registers → STM32 Board: writes registers
- Console User → Student Records: enters menu choices
- Student Records → Console User: prints records
