Skip to content

practice projects and code examples from various sources focused on embedded systems, systems and microcontroller programming.

Notifications You must be signed in to change notification settings

georgecatalin/Embedded_Refresher

Repository files navigation

Embedded Refresher

A personal learning repository hosting practice projects and code examples from various Udemy courses focused on embedded systems, systems and microcontroller programming.

Purpose

This repository serves as a collection of hands-on practice work completed while learning embedded systems development through Udemy courses. It contains code examples, projects, and exercises that demonstrate key concepts in embedded C programming, microcontroller interfacing, and hardware control.

Courses Covered

1. Microcontroller Embedded C Programming: Absolute Beginners

2. Advanced C Programming Course

Key Topics Covered:

  • Advanced control flow
  • Advanced data types and structures
  • Advanced pointers and memory management
  • Bit manipulation
  • Storage classes and type qualifiers
  • Macros and the preprocessor
  • Input/Output operations
  • Interprocess communication
  • Networking fundamentals
  • Threading and concurrency
  • Shared libraries and shared objects
  • Advanced debugging and analysis
  • Working with larger programs

3. Linux System Programming Techniques and Concepts

Key Topics Covered:

  • Linux system architecture and internals
  • Process management and inter-process communication (IPC)
  • Memory management techniques
  • File I/O and filesystem concepts
  • Signal handling
  • Multi-threading and synchronization
  • Network programming on Linux
  • System calls and kernel interfaces
  • Performance optimization techniques

4. From 0 to 1: C Programming

Key Topics Covered:

  • C fundamentals (types, operators, control flow)
  • Functions and modular programming
  • Pointers and memory basics
  • Arrays and strings
  • Bit manipulation exercises and drills

5. Multithreading & Thread Synchronization - Pthreads

Key Topics covered:

  • Multithreading is beneficial vs. processes in Linux applications
  • Create and manage POSIX threads (pthread_create, pthread_join, pthread_exit, thread attributes)
  • Practice safe data sharing between threads and identify common concurrency hazards (race conditions, deadlocks)
  • Use synchronization primitives correctly:
    • Mutexes (pthread_mutex_*) and mutex attributes
    • Condition variables (pthread_cond_*) for signaling and coordination
    • Read-write locks (pthread_rwlock_*) for read-heavy workloads
    • Semaphores (sem_*) for counting/resource control
  • Implement classic concurrency patterns/exercises (producer–consumer, readers–writers, dining philosophers) and analyze correctness
  • Work with thread cancellation and cleanup handlers, and handle thread-safe resource management
  • Measure and reason about thread performance (contention, context switching) and validate behavior with debugging/diagnostic tools (e.g., gdb, strace, helgrind/drd)

🛠️ Technologies & Tools

  • Microcontrollers: STM32 (ARM Cortex-M series)
  • IDE: STM32CubeIDE, Eclipse CDT, Visual Studio Code
  • Compilers: GCC, ARM GCC
  • Languages: C (+ embedded C)
  • Debugging: SWD/JTAG, ITM (Instrumentation Trace Macrocell)
  • Hardware: STM32 Nucleo-144 development boards, x86 or x86-64 PC
  • Operating System: Linux (for system programming topics)

Disclaimer

This repository contains my own practice implementations created while learning.
It does not contain or redistribute paid course videos or proprietary course materials.

Author

George Calin

About

practice projects and code examples from various sources focused on embedded systems, systems and microcontroller programming.

Topics

Resources

Stars

Watchers

Forks