Vous êtes sur la page 1sur 14


listen, learn, practice and Do It Yourself


Skip to content
Embedded Linux
Embedded Software Design


Most microcontrollers developers writing sequential code for their
applications. The microcontroller will execute each function called
and asked what to do. This is good for small applications where
the microcontroller is supposed to do only one thing in particular.
Say you want to use your microcontroller to flash an LED and
nothing else or flash an LED and then display a string on the LCD
display, youd do well without feeling the need to implement a
system operating within your microcontroller. But for other
applications where more than one thing is supposed to be done at
the same time, youre stuck.

Have you ever felt that your computer works wonderfully when
writing documents, searching the net and listen to quran, all at the
same time. This is made possible byoperating systems that share
your processor time between tasks. All modern embedded systems
use an operating system of one sort or another.

Consider a very simple problem, suppose now instead of a single

LED flash, you need 4 flashing LEDs simultaneously but each
LED is controlled separately and each LED is connected to a port
of the microcontroller (A, B, C, D), all with different frequencies,
so you can not always do it with the sequential code youve
written! This is a practical problem generally require a greater
number of tasks running in parallel.

A real-time operating system for RTOS real-time operating

system (pronounced Are-toss) is a multitasking operating system
for real-time applications. These applications include embedded
systems (programmable thermostats, electrical controllers, mobile
phones, computer ), industrial robots, spacecraft, industrial
control and monitoring systems, and scientific research

This tutorial will mount you how to implement a real-time

operating system on a PIC18F4580 microcontroller. The
compiler used is MikroC Pro for PIC. The operating system used
is OSA. We will design a program that will provide you with a
basic model to use OSA in almost most applications you will

About OSA
OSA is a non-preemptive RTOS cooperative for small memory
devices. Generally OSA is supported by almost all famous
including MPLAB compilers CCS PICC, the AVR studio and
MikroC Pro. It provides a large library of functions. And the
program structure is very similar to what you already know. In my
opinion OSA is an ideal choice for microcontroller-based

Task: A piece of code that the operating system will run. Task is a
function that the OS will call repeatedly.

Thread: In the context of this tutorial,it is a function that never

ends (at a time (1) loop inside) and takes place in parallel with
other son.

Being non-preemptive is a drawback, this means that if your

program gets stuck in a long loop inside a low priority task, the
scheduler would not preempt automatically.

Creating your first multi-threaded program

We will make a program that flashes 4 LEDs with different
frequencies, all at the same time. We will launch four son. Youre
used to have a main function in your microcontroller program
where you have an infinite loop. We will write a code that will
give you 4 functions which operate in parallel and that gives you a
feeling like you have four main functions in your program. If you
get to make the 4 LEDs flashing at the same time, you can simply
fill in the code and do what you wanted at the same time.

Creating the Project by the MikroC pro

Create a folder on which you will unzip the file OSA
osa_ficher.zip and then start MikroC Pro to create our project
Click ADD to add files OSA operating system
Once you have finished creating the project, now we will
configure our project so as to use HS oscillator and PLL activate
the block
Now open the OSAcfg_Tool.exe application and select the
following options. Once you have finished click Save and save the
configuration file in the folder of your current project.
The saved file OSAcfg.h requires adding to our project. In
MikroC, go to Project menu and add OSAcfg.h file in the project.

Timer configuration
Why RTOS program requires configuring the timer! All RTOS
should keep track of time. Because every time the kernel needs to
know the time to generate accurate delays and calls scheduler
function. In fact, you can not track your dynamic architecture
without having any notion of time. You know that there is an
internal timer PIC that allows you to count the time. But the clock
of our operating system runs much slower than this timer. We
would therefore increment the clock of the operating system by
one tick each time the timer overflows is done.

I plan to have all tick every 1ms. This means that you will not be
able to call for delays less than 1 ms. Now start TimerCalculator
and select the following options.

TimerCalculator InitTimer0 generates a function that you call

early in the program to configure your timer. Then copy both the
functions in your code.

In your main function, call InitTimer0 in the header insert

#include <osa.h> at the end of access to system functions to
increment the clock each overflow timer, insert a call OS_Timer ()
in the interrupt function, like this:

Now we will write the code for each thread and create thereafter
purpose of performing the scheduler to complete our program like
Once youve finished compiling your program and load the
executable in the PIC.

Timer Calculator for MikroC


File sources OSA

The config file generator


The application with the isis schema