Course Content
Setting Up
 Downloading CubeIDE
 Installing CubeIDE
 Development Board
 Getting the Required Documentation
 Setting Up the Project Tree
Developing the Required Drivers
 Code: Developing the LED DriverÂ
 Code: Developing the UART Driver
 Code: Developing the UART Driver – Initialization Function
 Code: Developing the UART Driver – Write Function
 Code: Developing the Timebase Initialization Function
 Code: Developing the Timebase Utility Functions
The Internals of Realtime Operating Systems
 Code: Experimenting with Blocking Code
 Code: Manual Context Switching
Introduction to Real-time Operating Systems
 What is an RTOS?
 Performance Metrics of Real Time Operating Systems
Software Flows
 Busy Wait System
 Multi-Threaded Systems (With ISRs)
 Real-Time Systems
The Stack
 Stack & Memory Map
 Stack Manipulation
Overview of Cortex-M OS Support Features
 Inside the Microcontroller
 The Shadow Stack Pointer
 Exclusive access instructions
 The SysTick
BOOT Sequence
 Cortex-M Boot Sequence
Introduction to Threads
 The Thread
 Classification of Threads
Thread Control Block (TCB)
 Features of the Thread Control Bock
 Implementing a Thread Control Block
The Scheduler and Scheduling Algorithms
 The Scheduler
 Process vs. Thread
 Classification of Schedulers
 Pre-emption
 Scheduler Criteria
 CPU Utilization
 Scheduling Algorithm Optimization
 Overview of Popular Scheduling Algorithms
 First Come First Served (FCFS) Scheduler
 Round Robin (RR) Scheduler
 Quanta
 Weighted Round Robin (WRR) Scheduler
 Internals of the Round Robin Scheduler
Context Switching
 The Context Switching process
The Kernel
Developing a Realtime OS with a Round Robin Scheduler
 Code: Developing the Thread Control Block
 Code: Implementing the Kernel Stack Initialization Function
 Code: Implementing the Kernel Add Threads Function
 Code: Implementing the Kernel Launch Function
 Code: Saving and Restoring Context
 Code: Implementing the OS Scheduler Launch Function
 Code: Testing the RTOS
 Code: Exploring the RTOS further
 Code: Creating osKernel files
 Code: Writing the osKernel Initialization functions
 Code: Writing the osKernelAddThreads function
 Code: Writing the osKernelLaunch function
 Code: Writing the osSchedulerLaunch routine in Assembly
 Code: Cooperate Schedulers
 The PendSV Thread Switcher
Period Scheduling
 Code: Type 1 Periodic Scheduling
 Code: Type 1 Periodic Scheduling with Multiple Periodic Threads
 Code: Type 2 Periodic Scheduling: Using Hardware Interrupts
 Code: Type 3 Periodic Scheduling: Using Thread Control Blocks
 Code: Type 4 Periodic Scheduling: Using TCB and Hardware Interrupt
Board Support Package (BSP)Â
 Code: Developing the GPIO Output Board Support APIsÂ
 Code: Testing the GPIO Output Board Support APIs
 Code: Developing the ADC Board Support APIs
 Code: Testing the ADC Board Support APIs
 Code: Developing the TIMER Board Support APIs
 Code: Developing the GPIO Input Board Support APIs
 Code: Setting Up Probes
Inter-Thread Communication
 Semaphores Recap
 Code: Creating a SpinLock Semaphore
 Code: Using Semaphores for Mutually Exclusive LCD Access
 Code: Synchronizing Tasks using Semaphores (Rendezvous)
 Code: Creating a Cooperative Semaphore
 Code: Creating the osThreadSleep API
Inter-Thread Data Transfer
 Code: Sending Data between Threads using Mailboxes
 Code: Sending Data between Threads using FIFO Queues
Priority Scheduling
 Code: Developing A Priority Scheduler
Sporadic Scheduling
 Code: Scheduling Sporadic Threads
Fixed Scheduling
 Code: Developing a UART Driver for monitoring results
 Code: Building a Finite State Machine
 Code: Implementing a Fixed Scheduler with a Finite State Machine
ARM Design Philosophy and RISC Architecture
 The RISC Design Philosophy
 The ARM Design Philosophy
 Embedded Systems with ARM Processors
 ARM Bus Technology and AMBA Bus Protocol
 Memory
 Peripherals
 Von Neumann and Harvard architecture
 Cache and Tightly Couple Memory
 Memory Management extensions
 Co-processor extensions
The ARM Programmer’s Model
 Data Types
 Processor Modes
 ARM7TDMI Registers
 ARM7TDMI Vector Table
 ARM Cortex-M Registers
 ARM Cortex-M Vector Table
 ARM Data Flow Model
 The Pipeline
 ARM Processor Family
 ARM Cortex-A and Cortex-R
 ARM Cortex-M
Know your Instructor
Meet Rahul, our esteemed instructor with over 18 years of expertise spanning diverse industries. His extensive background includes stints in consumer electronics, process automation, automotive, medical devices, storage products, and more. Rahul’s wealth of experience from renowned organizations like Hyundai, Emerson, Seagate, Philips, and Belden enriches his teachings, offering invaluable real-world insights and practical wisdom in IoT and Embedded Systems training.