Quick and dirty port of scmRTOS demo to mbed 1768. scmRTOS is a small RTOS written using C++. Offers (static) processes, critical sections, mutexes, messages, channels.

Dependencies:   mbed

Committer:
igorsk
Date:
Thu Sep 09 21:19:01 2010 +0000
Revision:
0:a405220cf420

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
igorsk 0:a405220cf420 1 //******************************************************************************
igorsk 0:a405220cf420 2 //*
igorsk 0:a405220cf420 3 //* FULLNAME: Single-Chip Microcontroller Real-Time Operating System
igorsk 0:a405220cf420 4 //*
igorsk 0:a405220cf420 5 //* NICKNAME: scmRTOS
igorsk 0:a405220cf420 6 //*
igorsk 0:a405220cf420 7 //* PROCESSOR: ARM Cortex-M3
igorsk 0:a405220cf420 8 //*
igorsk 0:a405220cf420 9 //* TOOLKIT: RVCT (ARM)
igorsk 0:a405220cf420 10 //*
igorsk 0:a405220cf420 11 //* PURPOSE: Port Test File
igorsk 0:a405220cf420 12 //*
igorsk 0:a405220cf420 13 //* Version: 3.10
igorsk 0:a405220cf420 14 //*
igorsk 0:a405220cf420 15 //* $Revision: 196 $
igorsk 0:a405220cf420 16 //* $Date:: 2010-09-09 #$
igorsk 0:a405220cf420 17 //*
igorsk 0:a405220cf420 18 //* Copyright (c) 2003-2010, Harry E. Zhurov
igorsk 0:a405220cf420 19 //*
igorsk 0:a405220cf420 20 //* Permission is hereby granted, free of charge, to any person
igorsk 0:a405220cf420 21 //* obtaining a copy of this software and associated documentation
igorsk 0:a405220cf420 22 //* files (the "Software"), to deal in the Software without restriction,
igorsk 0:a405220cf420 23 //* including without limitation the rights to use, copy, modify, merge,
igorsk 0:a405220cf420 24 //* publish, distribute, sublicense, and/or sell copies of the Software,
igorsk 0:a405220cf420 25 //* and to permit persons to whom the Software is furnished to do so,
igorsk 0:a405220cf420 26 //* subject to the following conditions:
igorsk 0:a405220cf420 27 //*
igorsk 0:a405220cf420 28 //* The above copyright notice and this permission notice shall be included
igorsk 0:a405220cf420 29 //* in all copies or substantial portions of the Software.
igorsk 0:a405220cf420 30 //*
igorsk 0:a405220cf420 31 //* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
igorsk 0:a405220cf420 32 //* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
igorsk 0:a405220cf420 33 //* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
igorsk 0:a405220cf420 34 //* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
igorsk 0:a405220cf420 35 //* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
igorsk 0:a405220cf420 36 //* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH
igorsk 0:a405220cf420 37 //* THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
igorsk 0:a405220cf420 38 //*
igorsk 0:a405220cf420 39 //* =================================================================
igorsk 0:a405220cf420 40 //* See http://scmrtos.sourceforge.net for documentation, latest
igorsk 0:a405220cf420 41 //* information, license and contact details.
igorsk 0:a405220cf420 42 //* =================================================================
igorsk 0:a405220cf420 43 //*
igorsk 0:a405220cf420 44 //******************************************************************************
igorsk 0:a405220cf420 45 //* mbed port by Igor Skochinsky
igorsk 0:a405220cf420 46
igorsk 0:a405220cf420 47 #include <mbed.h>
igorsk 0:a405220cf420 48 #include <scmRTOS.h>
igorsk 0:a405220cf420 49
igorsk 0:a405220cf420 50 //---------------------------------------------------------------------------
igorsk 0:a405220cf420 51 //
igorsk 0:a405220cf420 52 // Process types
igorsk 0:a405220cf420 53 //
igorsk 0:a405220cf420 54 typedef OS::process<OS::pr0, 300> TProc1;
igorsk 0:a405220cf420 55 typedef OS::process<OS::pr1, 300> TProc2;
igorsk 0:a405220cf420 56 typedef OS::process<OS::pr2, 300> TProc3;
igorsk 0:a405220cf420 57 //---------------------------------------------------------------------------
igorsk 0:a405220cf420 58 //
igorsk 0:a405220cf420 59 // Process objects
igorsk 0:a405220cf420 60 //
igorsk 0:a405220cf420 61 TProc1 Proc1;
igorsk 0:a405220cf420 62 TProc2 Proc2;
igorsk 0:a405220cf420 63 TProc3 Proc3;
igorsk 0:a405220cf420 64 //---------------------------------------------------------------------------
igorsk 0:a405220cf420 65 //
igorsk 0:a405220cf420 66 // IO Pins
igorsk 0:a405220cf420 67 //
igorsk 0:a405220cf420 68 DigitalOut led1(LED1);
igorsk 0:a405220cf420 69 DigitalOut led2(LED2);
igorsk 0:a405220cf420 70
igorsk 0:a405220cf420 71 //---------------------------------------------------------------------------
igorsk 0:a405220cf420 72 //
igorsk 0:a405220cf420 73 // Event Flags to test
igorsk 0:a405220cf420 74 //
igorsk 0:a405220cf420 75 OS::TEventFlag ef;
igorsk 0:a405220cf420 76 OS::TEventFlag timerEvent;
igorsk 0:a405220cf420 77
igorsk 0:a405220cf420 78 //---------------------------------------------------------------------------
igorsk 0:a405220cf420 79 //
igorsk 0:a405220cf420 80 int main()
igorsk 0:a405220cf420 81 {
igorsk 0:a405220cf420 82 // configure IO pins
igorsk 0:a405220cf420 83 led1.write(0);
igorsk 0:a405220cf420 84 led2.write(0);
igorsk 0:a405220cf420 85
igorsk 0:a405220cf420 86 // run
igorsk 0:a405220cf420 87 OS::Run();
igorsk 0:a405220cf420 88 }
igorsk 0:a405220cf420 89
igorsk 0:a405220cf420 90 //---------------------------------------------------------------------------
igorsk 0:a405220cf420 91 template<> OS_PROCESS void TProc1::Exec()
igorsk 0:a405220cf420 92 {
igorsk 0:a405220cf420 93 for(;;)
igorsk 0:a405220cf420 94 {
igorsk 0:a405220cf420 95 ef.Wait();
igorsk 0:a405220cf420 96 printf("e\n");
igorsk 0:a405220cf420 97 led1.write(0);
igorsk 0:a405220cf420 98 }
igorsk 0:a405220cf420 99 }
igorsk 0:a405220cf420 100
igorsk 0:a405220cf420 101 //---------------------------------------------------------------------------
igorsk 0:a405220cf420 102 template<> OS_PROCESS void TProc2::Exec()
igorsk 0:a405220cf420 103 {
igorsk 0:a405220cf420 104 for(;;)
igorsk 0:a405220cf420 105 {
igorsk 0:a405220cf420 106 timerEvent.Wait();
igorsk 0:a405220cf420 107 printf("t\n");
igorsk 0:a405220cf420 108 Sleep(5000);
igorsk 0:a405220cf420 109 led2.write(0);
igorsk 0:a405220cf420 110 }
igorsk 0:a405220cf420 111 }
igorsk 0:a405220cf420 112
igorsk 0:a405220cf420 113 //---------------------------------------------------------------------------
igorsk 0:a405220cf420 114 template<> OS_PROCESS void TProc3::Exec()
igorsk 0:a405220cf420 115 {
igorsk 0:a405220cf420 116 for (;;)
igorsk 0:a405220cf420 117 {
igorsk 0:a405220cf420 118 led1.write(1);
igorsk 0:a405220cf420 119 Sleep(5000);
igorsk 0:a405220cf420 120 ef.Signal();
igorsk 0:a405220cf420 121 Sleep(5000);
igorsk 0:a405220cf420 122 }
igorsk 0:a405220cf420 123 }
igorsk 0:a405220cf420 124
igorsk 0:a405220cf420 125 //---------------------------------------------------------------------------
igorsk 0:a405220cf420 126 void OS::SystemTimerUserHook()
igorsk 0:a405220cf420 127 {
igorsk 0:a405220cf420 128 static int cnt=0;
igorsk 0:a405220cf420 129 if (++cnt == 2000)
igorsk 0:a405220cf420 130 {
igorsk 0:a405220cf420 131 cnt = 0;
igorsk 0:a405220cf420 132 led2.write(1);
igorsk 0:a405220cf420 133 timerEvent.SignalISR();
igorsk 0:a405220cf420 134 }
igorsk 0:a405220cf420 135 }
igorsk 0:a405220cf420 136
igorsk 0:a405220cf420 137 //---------------------------------------------------------------------------
igorsk 0:a405220cf420 138 void OS::IdleProcessUserHook()
igorsk 0:a405220cf420 139 {
igorsk 0:a405220cf420 140 __WFI();
igorsk 0:a405220cf420 141 }
igorsk 0:a405220cf420 142 //-----------------------------------------------------------------------------