Build your Own RealTime OS

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.

Weekend batch (Hindi/English)
10-11 February
Sat 08:00 AM - 06:00 PM
Sun 08:00 AM - 06:00 PM
Weekend batch (Hindi/English)
24-25 February
Sat 08:00 AM - 06:00 PM
Sun 08:00 AM - 06:00 PM​