001: /*===========================================================================*/
002: /*!\file  scheduler.h
003:  * \brief
004:  *      File system schedulers
005:  *
006:  * \image ak.jpg
007:  * Copyright (c) 2012 \b Arkadiusz krysiak
008:  *
009:  * \callgraph
010:  * \callergraph  */
011: /*==========================================================================*/
012: #ifndef __SHEDULER_H__
013: #define __SHEDULER_H__
014: #include "conf_sys.h"
015: #if     (COMPILE_FLOW_TRACE     == _ON)
016: #warning =====================================
017: #endif
018: 
019: #include "LedLine.h"
020: #include "fan.h"
021: #include "sound.h"
022: #include "led.h"
023: #include "board.h"
024: #include "pwr_ctrl.h"
025: 
026: 
027: #define system_delay_ms(_delay_time) \
028:     _sys_delay_ms(((_delay_time)>>4)+\
029:                   ((_delay_time)>>5)+\
030:                   ((_delay_time)>>8)+\
031:                   ((_delay_time)>>9))
032: 
033: #define sleep(Time_ms) _sys_delay_ms((Time_ms)/10)
034: void _sys_delay_ms(u16_t _delay_time);
035: 
036: 
037: /*=======================================================================
038:                                                                          
039:                 WYBÓR TRYBU PRACY SCHEDULERA                             
040:                                                                          
041: =======================================================================*/
042: #define ShedulerModeOff                          0
043: #define ShedulerModeRoundRobin                   1
044: #define ShedulerModeRoundRobinSafe               2
045: #define ShedulerModeFcfs                         3
046: #define ShedulerModeFifo                         4
047: #define ShedulerModeFifoSafe                     5
048: #define ShedulerModeEdfUle                       6
049: #define ShedulerModePoradic                      7
050: #define ShedulerModeSjf                          8
051: #define ShedulerModePeriodic                     9
052: #define ShedulerModeRms                         10
053: #define ShedulerModeHardTime                    11
054: #define ShedulerModeCfs                         12
055: #define ShedulerModeHardTime                    13
056: #define ShedulerModeHardTimeSafe                14
057: 
058: //#define ShedulerMode
059: /*============================================================*/
060: #define ShedulerRank0Mode               ShedulerModePeriodic
061: #define ShedulerRank1Mode               ShedulerModeOff
062: /*============================================================*/
063: 
064: 
065: 
066: 
067: /*=======================================================================
068:                                                                          
069:                         PODŁĄCZENIE ZADAŃ DO SCHEDULERA 
070:                                                                          
071: =======================================================================*/
072: #define Task10Ms()      {                                               \
073:                                 FanDetect();                            \
074:                         }
075: 
076: #define Task20Ms()
077: 
078: 
079: 
080: 
081: #define Task50Ms()      {                                               \
082:                                 LedInterruptRuntime();                  \
083:                                 /*console_signal_runtime();*/           \
084:                         }
085: 
086: 
087: #define Task100Ms()     {                                               \
088:                                 led_synchronic_set_port();              \
089:                                 /*beep_power_down_off();*/              \
090:                                 LedPowerBlinkFast();                    \
091:                         }
092: 
093: 
094:                         //LED_DBG1_Set()
095: #define Task200Ms()     {                                               \
096:                                 task_sound_blink();                     \
097:                                 LedPowerBlinkSlow();                    \
098:                         }
099: 
100: //#define Task500Ms()   LED_DBG1_Clear()
101: 
102: 
103: #define Task1s()        {                                               \
104:                                 global_chrg_stat=(bc->chrg_stat);       \
105:                                 accu1_show_status();                    \
106:                                 accu2_show_status();                    \
107:                                 /*beep_power_down_on();*/               \
108:                         }
109: 
110: //#define Task2s()
111: 
112: 
113: #define Task5s()        {                                               \
114:                                 accu_switch_to_show();                  \
115:                                 /*config_restore();*/                   \
116:                                 console_ticker();                       \
117:                         }
118: 
119: //#define Task10s()
120: 
121: 
122: //#define Task20s()
123: 
124: 
125: 
126: /*========================================================================*/
127:  
128: /*========================================================================*/
129: #define StepTime50Ms               5
130: #define StepTime100Ms             10
131: #define StepTime200Ms             20
132: #define StepTime500Ms             50
133: #define StepTime1s               100
134: #define StepTime2s               200
135: #define StepTime5s               500
136: #define StepTime10s             1000
137: #define StepTime20s             2000
138: 
139: 
140: 
141: 
142: 
143: typedef struct TimePeri {
144:   volatile u64_t                up_time;
145:   volatile u16_t                RealTimeClock;
146:   volatile u16_t                SuccesiveTime50Ms;
147:   volatile u16_t                SuccesiveTime100Ms;
148:   volatile u16_t                SuccesiveTime200Ms;
149:   volatile u16_t                SuccesiveTime500Ms;
150:   volatile u16_t                SuccesiveTime1s;
151:   volatile u16_t                SuccesiveTime2s;
152:   volatile u16_t                SuccesiveTime5s;
153:   volatile u16_t                SuccesiveTime10s;
154:   volatile u16_t                SuccesiveTime20s;
155: } TimePeri_st_t;
156: 
157: 
158: 
159: 
160: volatile TimePeri_st_t          PeriodicTime;/*!< Struktura Schedulera Periodic Tasks */
161: 
162: 
163: 
164: void SchedulerPeriodicInit(void);
165: void SchedulerPeriodic(void);
166: 
167: 
168: 
169: /*========================================================================*/
170: /*!\brief funkcja wpięcia schedulera do zegara
171:  *
172:  *
173:  *
174:  * \param none
175:  *
176:  * \retval none
177:  *
178:  * \callgraph
179:  * \callergraph */
180: /*==========================================================================*/
181: 
182: #if ShedulerRank0Mode != SheluderModeOff
183: /*   Włączenie schedulera periodycznego - po zdefiniowaniu     
184: innych algorytmów warunek: ShedulerRank0Mode != ShedulerModeOff   
185: należy zastąpić na    ShedulerRank0Mode == ShedulerModePeriodic */
186: static inline void SchedulerRank0 (void)
187: {
188:         SchedulerPeriodic();
189: }
190: #endif
191: 
192: 
193: /*========================================================================*/
194: /*!\brief funkcja wpięcia do zegara
195:  *
196:  *
197:  *
198:  * \param none
199:  *
200:  * \retval none
201:  *
202:  * \callgraph 
203:  * \callergraph */
204: /*==========================================================================*/
205: 
206: #if ShedulerRank1Mode != ShedulerModeOff
207: /*   Włączenie schedulera periodycznego - po zdefiniowaniu     
208: innych algorytmów warunek: ShedulerRank0Mode != ShedulerModeOff   
209: należy zastąpić na    ShedulerRank0Mode == ShedulerModePeriodic */
210: 
211: static inline void SchedulerRank1 (void)
212: {
213:         
214:         Scheduler2();
215: };
216: #endif 
217: 
218: 
219: #endif /* #ifndef __SHEDULER_H__ */
220: