![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Embedded software Assessment 2
Dependencies: MCP23017 SDFileSystem USBDevice WattBob_TextLCD mbed
main.cpp
- Committer:
- muaiyd
- Date:
- 2014-03-04
- Revision:
- 20:00a9a95ef083
- Parent:
- 19:304b17087d06
- Child:
- 21:0e681d5fa3ba
File content as of revision 20:00a9a95ef083:
/* Cyclic Executive This software is built to test (Cyclic Executive). Five main functions are used in and every one of them has its own time of repetition. To execute this, a Ticker was used to call a function every 12.5 mSec. In this software a benefit is a token from two counter, one is counting a pulses and it reset every 8 cycles. That mean it reset every 100 mSec. Then other counter (AllTimeCounter) increased by one. Every slot in the 8 slots has a defined function, for example the slot number 1 is to reading the two digital input. however this slote is for this function it is not excuted every slot 1. It excute just when the timer calculat 400 mSec. That is 4X8 cycles. Also, after 8X8 cycles (800 mSec) the condition is true for two factions, but the processor will implement one in slot 1 and next cycle implement the other. The full program ducimentation is on http://mbed.org/users/muaiyd/code/ass2/ */ #include "Function.h" #include "Display.h" #include "FreqMesure.h" #include "ReadInput.h" uint16_t Counter = 0; uint16_t AllTimeCounter = 1; //It start from 1 to avoid excute all function at begining void CycleFunction(); int main(){ Init_LCD(); InitFile(); LogTimer.start(); Cycle.attach(&CycleFunction,0.0125); } void CycleFunction(){ /* We can see the period of execute time for every function below on the pin that assigned for each and writen infront of it. The least common multiple for all the above repeat time function is 180 Sec so every 180 Sec all the cycle is repeated. That mean 14400 cycles. */ Counter ++ ; switch(Counter){ case 1: if( AllTimeCounter % 4 == 0) ReadDigitalin(); //Pin 21 break; case 2: if( AllTimeCounter % 8 ==0) ReadAnalogin(); //Pin 22 break; case 3: if( AllTimeCounter % 10 == 0) FreqMsur(); //Pin 23 break; case 4: if( AllTimeCounter % 15 == 0) BinaryCounter();//Pin 24 break; case 5: if( AllTimeCounter % 18 == 0) InputCheck(); //Pin 25 break; case 6: if( AllTimeCounter % 20 == 0 ) Display(); //Pin 26 break; case 7: if( AllTimeCounter % 50 == 0 ) LogFile(); //Pin 27 break; case 8: Counter = 0; AllTimeCounter ++ ; TickerPin = !(TickerPin); break; } if ( AllTimeCounter == 14400 ) AllTimeCounter = 0; }