1. Home
  2. /
  3. Embedded-c-cpp
  4. /
  5. Embedded C++ Class for LED Control

Embedded C++ Class for LED Control - Embedded-c-cpp Typing CST Test

Loading…

Embedded C++ Class for LED Control — Embedded-c-cpp Code

A simple Embedded C++ class encapsulating GPIO operations for LED control on an ARM Cortex-M MCU.

#include "stm32f4xx.h"

class LED {
public:
	LED(GPIO_TypeDef* port, uint16_t pin) : port(port), pin(pin)
	{
		port->MODER |= (1U << (pin * 2)); // Set as output
	}
	void on() { port->ODR |= (1U << pin); }
	void off() { port->ODR &= ~(1U << pin); }
	void toggle() { port->ODR ^= (1U << pin); }
private:
	GPIO_TypeDef* port;
	uint16_t pin;
};

int main()
{
	LED led(GPIOB, 0);
	while(1)
	{
		led.toggle();
		for(volatile int i=0; i<1000000; ++i);
	}
}

Embedded-c-cpp Language Guide

Embedded C/C++ refers to using the C or C++ programming languages for programming embedded systems. These are resource-constrained devices like microcontrollers, IoT devices, automotive controllers, and real-time systems where direct hardware control and performance are critical.

Primary Use Cases

  • ▸Microcontroller firmware
  • ▸Real-time operating systems (RTOS) tasks
  • ▸IoT devices and sensors
  • ▸Automotive ECU programming
  • ▸Industrial automation and robotics

Notable Features

  • ▸Direct memory and register access
  • ▸Low-level I/O control and peripheral interfacing
  • ▸Deterministic and high-performance execution
  • ▸Supports modular and object-oriented designs
  • ▸Rich ecosystem of compilers, toolchains, and RTOS libraries

Origin & Creator

C was created by Dennis Ritchie at Bell Labs in the 1970s, and C++ was developed by Bjarne Stroustrup in the 1980s. The embedded variant evolved as developers adapted these languages for low-level, resource-constrained systems.

Industrial Note

Embedded C/C++ dominates industries like automotive (ISO 26262), aerospace (DO-178C), industrial automation, and consumer electronics where memory, speed, and reliability are critical.

Quick Explain

  • ▸Embedded C/C++ provides low-level access to hardware, memory, and peripherals.
  • ▸Enables deterministic, real-time execution for embedded systems.
  • ▸Widely used in microcontrollers, IoT devices, automotive ECUs, and robotics.
  • ▸Supports both procedural (C) and object-oriented (C++) paradigms.
  • ▸Highly portable across architectures with proper hardware abstraction.

Core Features

  • ▸Pointers and direct memory manipulation
  • ▸Interrupt handling
  • ▸Timers, counters, and hardware abstraction
  • ▸Real-time scheduling with RTOS
  • ▸Standard C/C++ libraries with embedded extensions

Learning Path

  • ▸Learn basic C syntax
  • ▸Understand memory and pointers
  • ▸Learn MCU architecture and peripherals
  • ▸Practice bare-metal programming
  • ▸Move to RTOS-based embedded applications

Practical Examples

  • ▸Blink LED using GPIO register
  • ▸Read sensor via I2C
  • ▸Control motor using PWM
  • ▸Implement UART communication with interrupts
  • ▸Real-time task scheduling on FreeRTOS

Comparisons

  • ▸Embedded C vs SPARK: C is flexible but not formally verifiable
  • ▸Embedded C++ vs Rust: C++ allows OOP; Rust enforces memory safety
  • ▸Embedded C vs Python MicroPython: C is faster and deterministic
  • ▸C vs Arduino Wiring: Arduino is a simplified C++ abstraction
  • ▸Embedded C vs SCADE-generated C: SCADE provides model-based verification

Strengths

  • ▸Efficient and performant
  • ▸Works on resource-constrained devices
  • ▸Portable across architectures
  • ▸Mature ecosystem with debugging and profiling tools
  • ▸Widely taught and industrially adopted

Limitations

  • ▸Manual memory management (risk of leaks, dangling pointers)
  • ▸Hardware-specific code reduces portability
  • ▸No built-in safety guarantees (unlike SPARK or Rust)
  • ▸Debugging can be difficult on bare-metal targets
  • ▸Concurrency and real-time issues require careful handling

When NOT to Use

  • ▸Rapid application prototypes with GUIs
  • ▸Heavy OS-dependent desktop apps
  • ▸Systems requiring strict formal proofs
  • ▸Dynamic memory-heavy applications
  • ▸Where interpreted languages suffice

Cheat Sheet

  • ▸volatile keyword for hardware registers
  • ▸ISR syntax depends on compiler/MCU
  • ▸Use bit masks for register configuration
  • ▸Use static memory to avoid heap fragmentation
  • ▸Use timers and delays carefully

FAQ

  • ▸Can I use C++ for bare-metal? -> Yes, with care for constructors/destructors.
  • ▸Do I need an RTOS? -> Only if multitasking or real-time scheduling is needed.
  • ▸How to debug embedded C? -> JTAG/SWD, serial output, logic analyzers.
  • ▸Are dynamic memory allocations safe? -> Prefer static memory for embedded.
  • ▸Which IDE is best? -> Depends on MCU vendor and toolchain preference.

30-Day Skill Plan

  • ▸Week 1: GPIO and timers
  • ▸Week 2: UART/I2C/SPI interfaces
  • ▸Week 3: Interrupt handling and DMA
  • ▸Week 4: RTOS tasks and queues
  • ▸Week 5: Multi-peripheral integration and debugging

Final Summary

  • ▸Embedded C/C++ is the industry standard for microcontroller and resource-constrained programming.
  • ▸Offers low-level hardware control, high performance, and deterministic execution.
  • ▸Requires careful memory and resource management.
  • ▸Widely used in automotive, industrial, IoT, and robotics.
  • ▸Flexible, mature, and portable across multiple embedded platforms.

Project Structure

  • ▸src/ - main firmware code
  • ▸include/ - headers
  • ▸drivers/ - peripheral interface code
  • ▸RTOS/ - OS tasks and scheduling
  • ▸Makefile/CMakeLists.txt or IDE project

Monetization

  • ▸Embedded firmware development services
  • ▸Industrial automation products
  • ▸IoT device manufacturing
  • ▸Automotive software contracts
  • ▸Consumer electronics embedded design

Productivity Tips

  • ▸Use HAL and SDK for faster development
  • ▸Write reusable peripheral drivers
  • ▸Use conditional compilation for portability
  • ▸Document pin mappings and peripherals
  • ▸Test frequently on hardware

Basic Concepts

  • ▸Registers - memory-mapped peripheral controls
  • ▸Interrupts - hardware or software triggered events
  • ▸Timers - schedule periodic or one-shot tasks
  • ▸Memory (stack, heap, flash, SRAM)
  • ▸GPIO - General-purpose input/output

Official Docs

  • ▸https://www.gnu.org/software/avr-gcc/
  • ▸https://www.arm.com/architecture/cortex-m

More Embedded-c-cpp Typing Exercises

Blink LED (Embedded C, AVR microcontroller)Read Button Input (Embedded C)PWM LED Brightness (Embedded C, AVR)UART Transmit (Embedded C)ADC Read and LED Control (Embedded C)Timer Interrupt Toggle LED (Embedded C)Embedded C++ Motor Control ClassSPI Send Byte (Embedded C)I2C Master Send (Embedded C)

Practice Other Languages

CReactPythonC++RustTypeScriptKotlinPHPJavaC#RubyMqlCqlN1qlCypher