CODE TIME TECHNOLOGIES. µabassi RTOS. User s Guide

Similar documents
CODE TIME TECHNOLOGIES. Abassi RTOS. Porting Document. ARM Cortex-A9 CCS

CODE TIME TECHNOLOGIES. Abassi RTOS. CMSIS Version 3.0 RTOS API

CODE TIME TECHNOLOGIES. mabassi RTOS. Porting Document. SMP / ARM Cortex-A9 CCS

CODE TIME TECHNOLOGIES. Abassi RTOS. Porting Document. ATmega128 GCC

CODE TIME TECHNOLOGIES. Abassi RTOS. Porting Document. ARM Cortex-M3 CCS

CODE TIME TECHNOLOGIES. Abassi RTOS. Porting Document. ATmega128 IAR

CODE TIME TECHNOLOGIES. Abassi RTOS. Porting Document MSP430 GCC

CODE TIME TECHNOLOGIES. Abassi RTOS. Porting Document. ATmega IAR

CODE TIME TECHNOLOGIES. Abassi RTOS. Porting Document. 8051/8052 Keil Compiler

CODE TIME TECHNOLOGIES. Abassi RTOS. Porting Document AVR32A GCC

CODE TIME TECHNOLOGIES. Abassi RTOS. Porting Document MSP430 IAR

CODE TIME TECHNOLOGIES. Abassi RTOS. Porting Document. ARM Cortex-M0 Atollic

CODE TIME TECHNOLOGIES. Abassi RTOS. Porting Document C28X CCS

CODE TIME TECHNOLOGIES. mabassi RTOS. Porting Document. SMP / ARM Cortex-A9 Xilinx SDK (GCC)

CODE TIME TECHNOLOGIES. mabassi RTOS. Porting Document. SMP / ARM Cortex-A9 DS5 (ARMCC)

CODE TIME TECHNOLOGIES. Abassi RTOS. Porting Document MSP430/X CCS

CODE TIME TECHNOLOGIES. mabassi RTOS. Porting Document. SMP / ARM Cortex-A9 DS5 (GCC)

CODE TIME TECHNOLOGIES. mabassi RTOS. BSP Document. ARMv7 Caches (GCC)

CODE TIME TECHNOLOGIES. Abassi RTOS. I2C Support

CODE TIME TECHNOLOGIES. mabassi RTOS. Porting Document. SMP / ARM Cortex-A9 Xilinx SDK (GCC)

CODE TIME TECHNOLOGIES. Abassi RTOS. FatFS Support

CODE TIME TECHNOLOGIES. Abassi RTOS. Media I/F

CS370 Operating Systems Midterm Review

Synchronization. CS61, Lecture 18. Prof. Stephen Chong November 3, 2011

Real-Time Programming

CODE TIME TECHNOLOGIES. Abassi RTOS MISRA-C:2004. Compliance Report

Putting it All Together

High Performance Computing Course Notes Shared Memory Parallel Programming

Introduction to the ThreadX Debugger Plugin for the IAR Embedded Workbench C-SPYDebugger

RT3 - FreeRTOS Real Time Programming

CS 571 Operating Systems. Midterm Review. Angelos Stavrou, George Mason University

Midterm Exam. October 20th, Thursday NSC

embos Real-Time Operating System CPU & Compiler specifics for embos Visual Studio Simulation

Concurrency: Deadlock and Starvation

Lecture 3: Concurrency & Tasking

IT 540 Operating Systems ECE519 Advanced Operating Systems

embos Real-Time Operating System embos plug-in for IAR C-Spy Debugger Document: UM01025 Software Version: 3.0 Revision: 0 Date: September 18, 2017

Dealing with Issues for Interprocess Communication

CSC Operating Systems Spring Lecture - XII Midterm Review. Tevfik Ko!ar. Louisiana State University. March 4 th, 2008.

Process Synchronization. studykorner.org

CS A331 Programming Language Concepts

What s An OS? Cyclic Executive. Interrupts. Advantages Simple implementation Low overhead Very predictable

Chapter 6 Process Synchronization

Remaining Contemplation Questions

Lecture notes Lectures 1 through 5 (up through lecture 5 slide 63) Book Chapters 1-4

Micrium µc/os II RTOS Introduction EE J. E. Lumpp

GLOSSARY. VisualDSP++ Kernel (VDK) User s Guide B-1

Semaphore. Originally called P() and V() wait (S) { while S <= 0 ; // no-op S--; } signal (S) { S++; }

CS 471 Operating Systems. Yue Cheng. George Mason University Fall 2017

Quadros. RTXC Kernel Services Reference, Volume 1. Levels, Threads, Exceptions, Pipes, Event Sources, Counters, and Alarms. Systems Inc.

POSIX / System Programming

Micriμm. Getting Started with Micriμm s. Matt Gordon, Sr. Applications Engineer. 9L05I Renesas Electronics America Inc.

Main Points of the Computer Organization and System Software Module

Operating Systems Comprehensive Exam. Spring Student ID # 3/16/2006

Operating Systems 2013/14 Assignment 3. Submission Deadline: Tuesday, December 17th, :30 a.m.

CS370 Operating Systems Midterm Review. Yashwant K Malaiya Spring 2019

Embedded Systems. 5. Operating Systems. Lothar Thiele. Computer Engineering and Networks Laboratory

Operating Systems Comprehensive Exam. Spring Student ID # 2/17/2011

CPSC/ECE 3220 Fall 2017 Exam Give the definition (note: not the roles) for an operating system as stated in the textbook. (2 pts.

Migrate RTX to CMSIS-RTOS

Real-Time and Concurrent Programming Lecture 4 (F4): Monitors: synchronized, wait and notify

Operating Systems. Designed and Presented by Dr. Ayman Elshenawy Elsefy

Tasks. Task Implementation and management

Faculty of Electrical Engineering, Mathematics, and Computer Science Delft University of Technology

2018/04/06 01:40 1/11 SMP

Micrium OS Kernel Labs

Timers 1 / 46. Jiffies. Potent and Evil Magic

CSE 451: Operating Systems Winter Lecture 7 Synchronization. Steve Gribble. Synchronization. Threads cooperate in multithreaded programs

Operating Systems. Lecture 4 - Concurrency and Synchronization. Master of Computer Science PUF - Hồ Chí Minh 2016/2017

embos Real-Time Operating System embos plug-in for IAR C-Spy Debugger Document: UM01025 Software Version: 3.1 Revision: 0 Date: May 3, 2018

Process Synchronization Mechanisms

CHAPTER 6: PROCESS SYNCHRONIZATION

OPERATING SYSTEMS ASSIGNMENT 2 SIGNALS, USER LEVEL THREADS AND SYNCHRONIZATION

Using the FreeRTOS Real Time Kernel

Synchronization I. Jo, Heeseung

Introduction to Real-Time Operating Systems

Operating Systems (1DT020 & 1TT802)

MULTITHREADING AND SYNCHRONIZATION. CS124 Operating Systems Fall , Lecture 10

Using the FreeRTOS Real Time Kernel

Deadlock. Concurrency: Deadlock and Starvation. Reusable Resources

Lab 8 Real-time OS - 1

Chapter 5: Process Synchronization. Operating System Concepts 9 th Edition

Synchronization. Dr. Yingwu Zhu

CS A320 Operating Systems for Engineers

Subject: Operating System (BTCOC403) Class: S.Y.B.Tech. (Computer Engineering)

Virtual Machine Design

AC59/AT59/AC110/AT110 OPERATING SYSTEMS & SYSTEMS SOFTWARE DEC 2015

BASICS OF THE RENESAS SYNERGY PLATFORM

CS370: System Architecture & Software [Fall 2014] Dept. Of Computer Science, Colorado State University

Lecture 9: Midterm Review

Semaphores. Jinkyu Jeong Computer Systems Laboratory Sungkyunkwan University

! Why is synchronization needed? ! Synchronization Language/Definitions: ! How are locks implemented? Maria Hybinette, UGA

Synchronization Principles

Process Coordination and Shared Data

Chapter 5 Concurrency: Mutual Exclusion. and. Synchronization. Operating Systems: Internals. and. Design Principles

Chapter 5 Concurrency: Mutual Exclusion and Synchronization

EE458 - Embedded Systems Lecture 8 Semaphores

Chapter 6: Process Synchronization. Operating System Concepts 9 th Edit9on

CS 326: Operating Systems. CPU Scheduling. Lecture 6

Chapter 6 Concurrency: Deadlock and Starvation

Transcription:

CODE TIME TECHNOLOGIES µabassi RTOS User s Guide Copyright Information This document is copyright Code Time Technologies Inc. 2013-2018. All rights reserved. No part of this document may be reproduced or distributed in any form by any means, or stored in a database or retrieval system, without the written permission of Code Time Technologies Inc. Code Time Technologies Inc. may have patents or pending applications covering the subject matter in this document. The furnishing of this document does not give you any license to these patents.

Disclaimer Code Time Technologies Inc. provides this document AS IS without warranty of any kind, either expressed or implied, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose. Code Time Technologies Inc. does not warrant that the contents of this document will meet your requirements or that the document is error-free. Changes are periodically made to the information herein; these changes will be incorporated in new editions of the document. Code Time Technologies Inc. may make improvements and/or changes in the product(s) and/or program(s) described in the document at any time. This document does not imply a commitment by Code Time Technologies Inc. to supply or make generally available the product(s) described herein.

Table of Contents 1 INTRODUCTION... 6 1.1 GLOSSARY... 6 2 FEATURES... 7 2.1 LIMITATIONS... 7 3 OVERVIEW... 8 3.1 DESIGN CHOICES... 8 3.1.1 Portability... 8 3.1.2 Feature set... 8 3.1.3 Scalability... 8 3.1.4 Code Size... 8 3.1.5 Data Size... 8 3.1.6 Interrupts not disabled... 8 3.2 SERVICES... 8 3.2.1 Tasks... 8 3.2.1.1 Load Balancing... 8 3.2.1.2 Multi-Processor Mode... 8 3.2.2 Semaphores... 8 3.2.3 Mutexes... 8 3.2.4 Event Flags... 9 3.2.5 Mailboxes... 9 3.2.6 Timer... 9 3.2.7 Interrupts Handlers... 9 3.3 CONSTRAINTS AND DON TS... 9 3.3.1 Idle Task... 9 3.3.2 Interrupts... 9 3.3.3 Task Suspension... 9 3.3.4 Single Task per Priority... 9 3.4 DISTRIBUTION CONTENTS... 9 4 CONFIGURATION... 10 4.1 BUILD OPTIONS... 10 4.1.1 µabassi s Build Options... 10 4.1.1.1 OS_MAX_PEND_RQST... 10 4.1.1.2 OS_MP_TYPE... 10 4.1.1.3 OS_N_CORE... 10 4.1.1.4 OS_NESTED_INTS... 10 4.1.1.5 OS_SPINLOCK_BASE... 10 4.1.1.6 OS_START_STACK... 10 4.1.1.7 OS_TIMER_US... 10 4.1.2 mabassi s Unused Build Options... 11 4.2 BUILD OPTION SELECTION... 12 4.3 BUILD EXAMPLES... 12 5 QUICK START... 13 6 COMPONENTS... 14 6.1 SYSTEM COMPONENTS... 14 6.2 TASKS COMPONENTS... 14 6.3 SEMAPHORES COMPONENTS... 14 6.4 MUTEXES COMPONENTS... 14 6.5 TIMER COMPONENTS... 15 6.6 INTERRUPT COMPONENTS... 15 Rev 1.7 Page 3

6.7 MIX BAG COMPONENTS... 15 6.8 CORE COMPONENTS... 15 7 APPENDIX A: MABASSI START-UP... 16 8 APPENDIX B: BMP... 17 9 APPENDIX C: LOAD BALANCING... 18 10 APPENDIX D: CUSTOM SERVICE EXAMPLE... 19 11 REFERENCES... 20 12 REVISION HISTORY... 21 Rev 1.7 Page 4

List of Tables TABLE 4-1 MABASSI UNUSED BUILD OPTION... 11 TABLE 10-1 EVENT GET EXAMPLE... 19 TABLE 10-2 EVENT SET EXAMPLE... 19 Rev 1.7 Page 5

1 Introduction This document is the User s Guide for the µabassi RTOS, a minimalist version of mabassi, and it provides all the information the reader requires to configure and use the RTOS on multi-processor devices. It is an addendum to the User s Guide for the Abassi RTOS [R1] and the User s Guide for mabassi [R2]. mabassi is upward compatible with µabassi, meaning an application build on µabassi can be used as-is with mabassi. 1.1 Glossary BMP Bounded Multi-Processing. Load Balancing Distribute workload across multiple processing units. SMP Symmetric Multi-Processing. Rev 1.7 Page 6

2 Features µabassi is a minimalist version of mabassi, which supports tasks, semaphores and mutexes only. It can be considered a toolkit for multi-core as it is possible to create almost every service and component by using these three basic services. The feature set of µabassi is as follows: Tasks Semaphores (priority ordering only; no FCFS) Mutexes (priority ordering only; no FCFS) SMP / BMP - Packed and normal load balancing Run-time safe services creation All service creation use the standard C library function malloc() The availability of semaphores and mutexes is sufficient to customize almost any types of new services. The semaphores are used as the basic blocking mechanism and the mutexes are used to guarantee mutually exclusive access to a resource. 2.1 Limitations µabassi is a minimalist version of mabassi. As such, many features and services of mabassi are not available in µabassi. Rev 1.7 Page 7

3 Overview This section gives an overview of the µabassi RTOS. The design choices are explained so as to give the reader an understanding of the decisions made when mabassi was architected and implemented. From the designer point of view, the only difference between the single core Abassi and the multi-core mabassi is the name of the RTOS source files. In the standard multicore RTOS mabassi, the names of the files are mabassi.c and mabassi.h, but in the multi-core toolkit µabassi, the names were changed to uabassi.c and uabassi.h. 3.1 Design choices 3.1.1 Portability 3.1.2 Feature set A sub-set of mabassi, see [R2]. All info on the set of features supported by µabassi is given in section 6. 3.1.3 Scalability 3.1.4 Code Size 3.1.5 Data Size 3.1.6 Interrupts not disabled 3.2 Services A sub-set of mabassi, see [R2]. All info on the set of services supported by µabassi is given in section 6. 3.2.1 Tasks Same as mabassi, see [R1]. 3.2.1.1 Load Balancing 3.2.1.2 Multi-Processor Mode 3.2.2 Semaphores Same as mabassi, see [R2], except only priority mode; first come first served is not available. 3.2.3 Mutexes Same as mabassi, see [R2], except only priority mode; first come first served is not available. Rev 1.7 Page 8

3.2.4 Event Flags Not available in µabassi. 3.2.5 Mailboxes Not available in µabassi. 3.2.6 Timer Same as mabassi, see [R2], except the timer callback is done at every timer tick. 3.2.7 Interrupts Handlers 3.3 Constraints and Don ts 3.3.1 Idle Task Not needed. 3.3.2 Interrupts 3.3.3 Task Suspension 3.3.4 Single Task per Priority 3.4 Distribution Contents The mabassi RTOS source code distribution always has a minimum of 4 files: uabassi.h uabassi.c uabassi_???_???.? uabassicfg.c The µabassi RTOS definition file The µabassi RTOS code The processor / compiler specific assembly file Configuration file for build options remapped to variables The mabassi RTOS object code distribution always has a minimum of 4 files: uabassi.h uabassi_tool_target.o uabassi_???_???.o uabassicfg.c The µabassi RTOS definition file The µabassi RTOS code The processor / compiler specific assembly file Configuration file for build options remapped to variables Most of the distributions are supplied with code examples for specific hardware platforms, and some processor/compiler ports may also include device drivers. Consult the processor/compiler port document that applies to your target application. Rev 1.7 Page 9

4 Configuration Most of the build options required in mabassi [R2] are not needed in µabassi because the µabassi kernel has been custom tailored for a minimalist set of services and components. 4.1 Build Options The following sub-sections describe the build options that must be defined for µabassi, and the meaning of their values. Another sub-section explains the implicit values of the Abassi / mabassi build options that are used in µabassi; the implicit built options are ignore by µabassi as the code is custom tailored. 4.1.1 µabassi s Build Options 4.1.1.1 OS_MAX_PEND_RQST When µabassi is used in object form, the value of OS_MAX_PEND_RQST is fixed and set to a fairly large value according to the target platform. Refer to the target specific document for the value set for OS_MAX_PEND_RQST. 4.1.1.2 OS_MP_TYPE OS_MP_TYPE is not really used as a build option inside µabassi, instead, the value of the OS_MP_TYPE definition is used to set the global variable G_OS_MP_TYPE which is then used internally by µabassi. Doing so allows full configurability of µabassi when used in object form. NOTE: G_OS_MP_TYPE must be declared const as dynamic changes of the G_OS_MP_TYPE value can possibly deliver un-predictable results. 4.1.1.3 OS_N_CORE Same as mabassi, see [R2], but single core is not supported. Therefore the OS_N_CORE build option must be set to a value greater than 1. When µabassi is used in object form, the value of OS_N_CORE is fixed and set according to the target platform. 4.1.1.4 OS_NESTED_INTS When µabassi is used in object form, the value of OS_NESTED_INTS is fixed and set according to the target platform. Refer to the target specific document for the value set for OS_NESTED_INTS. 4.1.1.5 OS_SPINLOCK_BASE When µabassi is used in object form, the value of OS_SPINLOCK_BASE is fixed and set according to the target platform. Refer to the target specific document for the value set for OS_SPINLOCK_BASE. 4.1.1.6 OS_START_STACK OS_START_STACK is not really used as a build option inside µabassi, instead, the value of the OS_START_STACK definition is used to set the global variable G_OS_START_STACK which is then used internally by µabassi. Doing so allows full configurability of µabassi when used in object form. 4.1.1.7 OS_TIMER_US OS_TIMER_US is not really used as a build option inside µabassi, instead, the value of the OS_TIMER_US definition is used to set the global variable G_OS_TIME_US which is then used internally by µabassi. Doing so allows full configurability of µabassi when used in object form. Rev 1.7 Page 10

4.1.2 mabassi s Unused Build Options The following table lists all the build options of mabassi that have been eliminated in µabassi. This means these build options are ignored when using µabassi. The table gives the information on what is the equivalent value that would create the same code in mabassi as it is in µabassi. The table rows that are highlighted show the features that are available / supported in µabassi. Table 4-1 mabassi unused build option Build Option Value Description OS_ALLOC_SIZE 0 The standard C library malloc() is used for all memory allocation in µabassi OS_COOPERATIVE 0 Cooperative mode is not supported in µabassi OS_EVENTS 0 The Event Flags service is not available in µabassi OS_FCFS 0 First Come First Served blocking ordering is not supported by µabassi. Blocking is always in a priority order OS_IDLE_STACK 0 The IdleTask is not needed nor used in µabassi OS_LOGGING_TYPE 0 Logging is not supported in µabassi OS_MAILBOX 0 The Mailboxes services is not available in µabassi OS_MEM_BLOCK 0 The Memory Block services is not available in µabassi OS_MIN_STACK_USE 0 The stack usage minimization feature is not available in µabassi OS_MTX_DEADLOCK 0 Mutex deadlock detection is not supported in µabassi OS_MTX_INVERSION 0 Mutex priority inversion protection is not supported by µabassi OS_MTX_OWN_UNLOCK 0 Mutex unlocking restriction is not supported by µabassi OS_NAMES 1 Names are supported by all services in µabassi OS_OUT_OF_MEM 1 Out of memory detection is supported by trapping a NULL return value from malloc()in µabassi OS_PERF_MON 0 Performance monitoring is not supported by µabassi OS_PRE_CONTEXT 0 Callback before the context switch is not supported by µabassi OS_PRIO_CHANGE 0 Run-time priority change is not supported by µabassi OS_PRIO_MIN 32 33 priority levels are handled by µabassi OS_PRIO_SAME 1 Multiple task at the same priority is supported by µabassi OS_ROUND_ROBIN 0 Round Robin is not supported by µabassi OS_RUNTIME -1 All services are created at run time; static service creation is not available in µabassi OS_SEARCH_ALGO 0 Simple table traversing is supported by µabassi OS_STACK_CHECK 0 Stack overflow checking is not supported by µabassi OS_STARVE_PRIO 0 Starvation protection is not supported by µabassi OS_STARVE_RUN_MAX 0 Starvation protection is not supported by µabassi OS_STARVE_WAIT_MAX 0 Starvation protection is not supported by µabassi OS_STATIC_BUF_MBLK 0 Memory blocks are not supported by µabassi Rev 1.7 Page 11

OS_STATIC_MBLK 0 Memory blocks are not supported by µabassi OS_STATIC_BUF_MBX 0 Mailboxes are not supported by µabassi OS_STATIC_MBX 0 Mailboxes are not supported by µabassi OS_STATIC_NAME 0 All services memory is obtained from OSalloc()/malloc() in µabassi OS_STATIC_SEM 0 All services memory is obtained from OSalloc()/malloc() in µabassi OS_STATIC_STACK 0 All services memory is obtained from OSalloc()/malloc() in µabassi OS_STATIC_TASK 0 All services memory is obtained from OSalloc()/malloc() in µabassi OS_STATIC_TIM_SRV 0 All services memory is obtained from OSalloc()/malloc() in µabassi OS_TASK_SUSPEND 1 Task suspension / resuming is supported in µabassi OS_TASK_XTRA_FIELD 0 Task descriptor scratch area is not supported by µabassi OS_TIM_TICK_MULTI 0 Multi timer tick interrupt handling is not supported in µabassi OS_TIMEOUT 1 Service timeouts are supported in µabassi OS_TIMER_CB 1 The callback function is called at every timer tick in µabassi OS_TIMER_SRV 0 Timer services are not available in µabassi OS_USE_TASK_ARG 0 Task arguments are not supported by µabassi 4.2 Build Option Selection 4.3 Build Examples Rev 1.7 Page 12

5 Quick Start Rev 1.7 Page 13

6 Components This section lists all the components available in µabassi. If an Abassi / mabassi component is not listed in here, this means the service / feature related to the non-listed component is not supported by µabassi. 6.1 System Components OSstart() 6.2 Tasks Components TSKcreate() TSKgetID() TSKgetPrio() TSKisBlk() TSKisRdy() TSKisSusp() TSKmyID() TSKresume() TSKselfSusp() TSKsetCore TSKsetPrio() TSKsleep() TSKstate() TSKsuspend() TSKtimeoutKill() 6.3 Semaphores Components SEMopen() SEMpost() SEMwait() SEMwaitBin() 6.4 Mutexes Components MTXlock() MTXopen() MTXowner() MTXunlock() Rev 1.7 Page 14

6.5 Timer Components OS_TIM_TICK_ACK() G_OStimCnt TIMcallBack() OS_HMS_TO_TICK() OS_MS_TO_TICK() OS_SEC_TO_TICK() OS_TICK_PER_SEC 6.6 Interrupt Components OSdint() OSeint() OSisrInstall() 6.7 Mix Bag Components G_OSmutex G_OSnoName OSalloc() 6.8 Core Components COREgetID() CORElock() COREunlock() SPINlock() Added in µabassi version 1.46.37 SPINtrylock() Added in µabassi version 1.46.37 SPINunlock() Added in µabassi version 1.46.37 Rev 1.7 Page 15

7 Appendix A: mabassi Start-up Rev 1.7 Page 16

8 Appendix B: BMP Rev 1.7 Page 17

9 Appendix C: Load Balancing Rev 1.7 Page 18

10 Appendix D: Custom Service Example As stated in Section 2, with only the semaphore and mutex services, it is fairly straightforward to custom create new services. Here, an example on how to create a simple Event Flags service is given, where multiple tasks are allowed to set the event flags, but only one task can get and block on the event flags: Table 10-1 Event Get example int EventGetOR(EvtDesc, ORmask) { int EvtRecv; /* Return value */ MTXlock(EvtDesc->Mutex, -1) /* Get exclusive access to descriptor */ while ((EvtDesc->EvtReg & ORmask) == 0) { /* Check if selected flags are set */ EvtDesc->IsBlocked = 1; /* Inform writer(s) I am blocked */ MTXunlock(EvtDesc->Mutex); /* Release exclusive access */ SEMwaitBin(EvtDesc->Sema, -1); /* Block, waiting to get flags sets */ MTXlock(EvtDesc->Mutex, -1); /* Get exclusive access to descriptor */ EvtDesc->IsBlocked = 0; /* Report we are not blocked anymore */ } /* Redo as long as selected flags not set*/ EvtRecv = EvtDesc->EvtReg & ORmask; /* Grab the flags */ EvtDesc->EvtReg &= ~ORmask; /* Remove selected flags accumulaton */ MTXunlock(EvtDesc->Mutex); /* Release exclusive access */ } return(evtrecv); Table 10-2 Event Set Example void EventSet(EvtDesc, Event) { MTXlock(EvtDesc->Mutex, -1); /* Get exclusive access to descriptor */ EvtDesc->EvtReg = Event; /* Set the event flags */ MTXunlock(EvtDesc->Mutex); /* Release exclusive access */ if (EvtDesc->IsBlocked!= 0) { /* Is the event reader blocked? */ SEMpost(EvtDesc->Sema); /* When blocked, post blocking semaphore */ } } return; The two examples above are functionally correct but they are not as real-time efficient as the event flag service provided by mabassi. Any custom services based on the semaphore and mutex services will suffer from inefficiencies when compared to the same service internally handled in the mabassi kernel. µabassi is considered a low cost multi-core SMP tool kit; as such, almost everything can be created with the basic services it provides but this is obtained at the cost of real-time efficiency compared to the same functionality by mabassi. Rev 1.7 Page 19

11 References [R1] Abassi RTOS User s Guide, available at http://www.code-time.com [R2] mabassi RTOS User s Guide, available at http://www.code-time.com [R3] http://en.wikipedia.org/wiki/spinlock, Spinlock description Rev 1.7 Page 20