001: #include "conf_sys.h"
002: #if     (COMPILE_FLOW_TRACE     == _ON)
003: #warning =====================================
004: #endif
005: /*===========================================================================*/
006: /*!\file scheduler.c
007:  * \brief
008:  *      File system shedulers
009:  *
010:  *
011:  * \image ak.jpg
012:  * Copyright (c) 2012 \b Arkadiusz Krysiak 
013:  * \callgraph
014:  * \callergraph
015:  */
016:  /*==========================================================================*/
017: #include "conf_sys.h"
018: #include "scheduler.h"
019: #include "LedLine.h"
020: #include "fan.h"
021: #include "sound.h"
022: #include "config.h"
023: #include "led.h"
024: 
025: 
026: 
027: //unsigned int  RealTimeClock;
028: 
029: 
030: 
031: // volatile TimePeri_s          PeriodicTime;
032: 
033: 
034: volatile TimePeri_st_t          PeriodicTime;/*!< Struktura Schedulera Periodic Tasks */
035: 
036: 
037: /*========================================================================*/
038: /*!\brief funkcja inicjuje strukturę odmierzania czasów dla Scheduler-a
039:  *
040:  *
041:  *
042:  *!\param none
043:  *
044:  *!\retval none
045:  *
046:  *!\callgraph
047:  *!\callergraph */
048: /*==========================================================================*/
049: void SchedulerPeriodicInit(void) 
050: {
051:         PeriodicTime.up_time                    = 0;                    /*!< Zmienna czasu w��czenia systemu*/
052:         PeriodicTime.RealTimeClock              = 0;                    /*!< Zmienna zegarowa */
053:         PeriodicTime.SuccesiveTime50Ms          = StepTime50Ms;         /*!< Zmienna interwa�u 50ms */
054:         PeriodicTime.SuccesiveTime100Ms         = StepTime100Ms;        /*!< Zmienna interwa�u 100ms */
055:         PeriodicTime.SuccesiveTime200Ms         = StepTime200Ms;        /*!< Zmienna interwa�u 200ms */
056:         PeriodicTime.SuccesiveTime500Ms         = StepTime500Ms;        /*!< Zmienna interwa�u 500ms */
057:         PeriodicTime.SuccesiveTime1s            = StepTime1s;           /*!< Zmienna interwa�u 1s */
058:         PeriodicTime.SuccesiveTime2s            = StepTime2s;           /*!< Zmienna interwa�u 2s */
059:         PeriodicTime.SuccesiveTime5s            = StepTime5s;           /*!< Zmienna interwa�u 5s */
060:         PeriodicTime.SuccesiveTime10s           = StepTime10s;          /*!< Zmienna interwa�u 10s */
061:         PeriodicTime.SuccesiveTime20s           = StepTime20s;          /*!< Zmienna interwa�u 20s */
062: }
063: 
064: 
065: 
066: 
067: 
068: 
069: /*========================================================================*/
070: /*!\brief scheduler zapewniający okresowe wołanie zadań
071:  *
072:  *        funkcja cyklicznie wywoływana co 10ms odmierza okresy czasu 
073:  *        po których wywołuje funkcje wymagające cyklicznej obsługi
074:  *
075:  * \param none
076:  *
077:  * \retval none
078:  *
079:  * \callgraph
080:  * \callergraph */
081: /*==========================================================================*/
082: void SchedulerPeriodic(void)
083: {
084:         ++PeriodicTime.up_time;
085:         ++PeriodicTime.RealTimeClock;
086:         Task10Ms();
087: #ifdef Task20Ms
088:         if (PeriodicTime.RealTimeClock&0x01)   
089:         {
090:                 Task20Ms();
091:         };
092: #endif /* #ifdef Task20Ms */
093: #if (defined Task20s) || (defined Task10s)  || (defined Task5s)   || (defined Task2s)  || (defined Task1s) || (defined Task500Ms) || (defined Task100Ms) || (defined Task50Ms)
094:         /*[[[                                                         */
095:         if  (PeriodicTime.SuccesiveTime50Ms == PeriodicTime.RealTimeClock)
096:         {
097:                 PeriodicTime.SuccesiveTime50Ms+=StepTime50Ms;
098:                 #ifdef Task50Ms
099:                         Task50Ms();
100:                 #endif
101: #if (defined Task20s) || (defined Task10s)  || (defined Task5s)   || (defined Task2s)  || (defined Task1s) || (defined Task500Ms) || (defined Task100Ms)
102:                 if (PeriodicTime.SuccesiveTime100Ms == PeriodicTime.RealTimeClock)
103:                 {
104:                         PeriodicTime.SuccesiveTime100Ms+=StepTime100Ms;
105:                         #ifdef Task100Ms
106:                                 Task100Ms();
107:                         #endif
108: #ifdef Task200Ms
109:                         if (PeriodicTime.SuccesiveTime200Ms == PeriodicTime.RealTimeClock)
110:                         {
111:                                 PeriodicTime.SuccesiveTime200Ms+=StepTime200Ms;
112:                                 Task200Ms();
113:                         }       
114: #endif /* #ifdef Task200Ms */
115: #if (defined Task20s) || (defined Task10s)  || (defined Task5s)   || (defined Task2s)  || (defined Task1s)|| (defined Task500Ms)
116:                         if (PeriodicTime.SuccesiveTime500Ms == PeriodicTime.RealTimeClock)
117:                         {
118:                                 PeriodicTime.SuccesiveTime500Ms+=StepTime500Ms;
119:                                 #ifdef Task500Ms
120:                                         Task500Ms();
121:                                 #endif
122: #if (defined Task20s) || (defined Task10s)  || (defined Task5s)   || (defined Task2s)  || (defined Task1s)  
123:                                 if (PeriodicTime.SuccesiveTime1s == PeriodicTime.RealTimeClock)
124:                                 {
125:                                         PeriodicTime.SuccesiveTime1s+=StepTime1s;
126:                                         PeriodicTime.up_time++;
127:                                         #ifdef Task1s
128:                                                 Task1s();
129:                                         #endif
130: #ifdef Task2s           
131:                                         if (PeriodicTime.SuccesiveTime2s == PeriodicTime.RealTimeClock)
132:                                         {
133:                                                 PeriodicTime.SuccesiveTime2s+=StepTime2s;
134:                                                 Task2s();
135:                                         }       
136: #endif /* #ifdef Task2s */
137: #if (defined Task20s) || (defined Task10s)  || (defined Task5s) 
138:                                         if (PeriodicTime.SuccesiveTime5s == PeriodicTime.RealTimeClock)
139:                                         {
140:                                                 PeriodicTime.SuccesiveTime5s+=StepTime5s;
141:                                                 #ifdef Task5s
142:                                                         Task5s();
143:                                                 #endif
144: #if (defined Task20s) || (defined Task10s)
145:                                                 if (PeriodicTime.SuccesiveTime10s == PeriodicTime.RealTimeClock)
146:                                                 {
147:                                                         PeriodicTime.SuccesiveTime10s+=StepTime10s;
148:                                                         #ifdef Task10s
149:                                                                 Task10s();
150:                                                         #endif
151: #ifdef Task20s
152:                                                         if (PeriodicTime.SuccesiveTime20s == PeriodicTime.RealTimeClock)
153:                                                         {
154:                                                                 PeriodicTime.SuccesiveTime20s+=StepTime20s;
155:                                                                 Task20s();
156:                                                         }/*if (PeriodicTime.SuccesiveTime20s == PeriodicTime.RealTimeClock) */
157: #endif /* #ifdef Task20s */
158:                                                 }/*if (PeriodicTime.SuccesiveTime10s == PeriodicTime.RealTimeClock) */
159: #endif /*#if (defined Task20s) || (defined Task10s)  */
160:                                         }/*if (PeriodicTime.SuccesiveTime5s == PeriodicTime.RealTimeClock) */
161: #endif /* #if (defined Task20s) || (defined Task10s)  || (defined Task5s)   || (defined Task2s)  || (defined Task1s)   */
162:                                 }/*if (PeriodicTime.SuccesiveTime1s == PeriodicTime.RealTimeClock) */
163: #endif
164:                         }/*if (PeriodicTime.SuccesiveTime500Ms == PeriodicTime.RealTimeClock) */
165: #endif
166:                 }/*if (PeriodicTime.SuccesiveTime100Ms == PeriodicTime.RealTimeClock) */
167: #endif
168:         }/*if  (PeriodicTime.SuccesiveTime50Ms == PeriodicTime.RealTimeClock) */
169: #endif
170: }/*]]] inline void RTC(void) */
171: 
172: 
173: 
174: /*========================================================================*/
175: /*!\brief  Funkcja opóźnienia oparta na zegarze systemowym 
176:  *
177:  *         odmierzanie opóźnienia z rozdzielczością 10ms
178:  *
179:  *
180:  * \param u16_t _delay_time - czas opóźnienia
181:  *
182:  * \retval none
183:  *
184:  * \callgraph
185:  * \callergraph  */
186: /*==========================================================================*/
187: void _sys_delay_ms(u16_t _delay_time)
188: {
189: #ifndef __DEBUG_DELAY_OFF__ 
190:         register u16_t          now;
191:         now=PeriodicTime.RealTimeClock+_delay_time; /* obiczenie punktu zakończenia delay */
192:         do 
193:         {
194:                 asm volatile ("nop\n\t");
195:         } while (now!=PeriodicTime.RealTimeClock);
196: #endif
197: }
198: