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.