00001
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049 #ifndef _SCHEDULER_H_
00050 #define _SCHEDULER_H_
00051
00053 #ifdef KEIL
00054 #include <intrins.h>
00055 #define Wait_semaphore(a) while(!_testbit_(a))
00056 #else
00057 #define Wait_semaphore(a) while(!(a)) (a) = FALSE
00058 #endif
00059
00066 #define TASK_DUMMY 0x00 // This define is mandatory
00067 #define TASK_0 0x01
00068 #define TASK_1 0x02
00069 #define TASK_2 0x04
00070 #define TASK_3 0x08
00071 #define TASK_4 0x10
00072 #define TASK_5 0x20
00073 #define TASK_6 0x40
00074 #define TASK_7 0x80
00075
00076
00077 #define ALL_TASK (TASK_0|TASK_1|TASK_2|TASK_3|TASK_4|TASK_5|TASK_6|TASK_7)
00079
00081 #define SCHEDULER_CUSTOM 0
00082 #define SCHEDULER_TIMED 1
00083 #define SCHEDULER_TASK 2
00084 #define SCHEDULER_FREE 3
00085
00086
00087
00088 #ifdef Scheduler_time_init
00089 extern void Scheduler_time_init (void);
00090 #endif
00091
00092 #ifdef Scheduler_task_1_init
00093 extern void Scheduler_task_1_init (void);
00094 #else
00095
00096
00097 #error Scheduler_task_1_init must be defined in config.h file
00098 #endif
00099 #ifdef Scheduler_task_2_init
00100 extern void Scheduler_task_2_init (void);
00101 #endif
00102 #ifdef Scheduler_task_3_init
00103 extern void Scheduler_task_3_init (void);
00104 #endif
00105 #ifdef Scheduler_task_4_init
00106 extern void Scheduler_task_4_init (void);
00107 #endif
00108 #ifdef Scheduler_task_5_init
00109 extern void Scheduler_task_5_init (void);
00110 #endif
00111 #ifdef Scheduler_task_6_init
00112 extern void Scheduler_task_6_init (void);
00113 #endif
00114 #ifdef Scheduler_task_7_init
00115 extern void Scheduler_task_7_init (void);
00116 #endif
00117 #ifdef Scheduler_task_8_init
00118 extern void Scheduler_task_8_init (void);
00119 #endif
00120 #ifdef Scheduler_task_9_init
00121 extern void Scheduler_task_9_init (void);
00122 #endif
00123 #ifdef Scheduler_task_10_init
00124 extern void Scheduler_task_10_init (void);
00125 #endif
00126 #ifdef Scheduler_task_11_init
00127 extern void Scheduler_task_11_init (void);
00128 #endif
00129
00130
00131 #ifdef Scheduler_task_1
00132 extern void Scheduler_task_1 (void);
00133 #else
00134
00135
00136 #error Scheduler_task_1 must be defined in config.h file
00137 #endif
00138 #ifdef Scheduler_task_2
00139 extern void Scheduler_task_2 (void);
00140 #endif
00141 #ifdef Scheduler_task_3
00142 extern void Scheduler_task_3 (void);
00143 #endif
00144 #ifdef Scheduler_task_4
00145 extern void Scheduler_task_4 (void);
00146 #endif
00147 #ifdef Scheduler_task_5
00148 extern void Scheduler_task_5 (void);
00149 #endif
00150 #ifdef Scheduler_task_6
00151 extern void Scheduler_task_6 (void);
00152 #endif
00153 #ifdef Scheduler_task_7
00154 extern void Scheduler_task_7 (void);
00155 #endif
00156 #ifdef Scheduler_task_8
00157 extern void Scheduler_task_8 (void);
00158 #endif
00159 #ifdef Scheduler_task_9
00160 extern void Scheduler_task_9 (void);
00161 #endif
00162 #ifdef Scheduler_task_10
00163 extern void Scheduler_task_10 (void);
00164 #endif
00165 #ifdef Scheduler_task_11
00166 extern void Scheduler_task_11 (void);
00167 #endif
00168
00170 #if SCHEDULER_TYPE != SCHEDULER_FREE
00171 extern bit scheduler_tick_flag;
00172 #endif
00173
00174 #ifdef TOKEN_MODE
00175 extern Uchar token;
00176 #define TOKEN_FREE 0
00177 #endif
00178
00180 void scheduler_init (void);
00181 void scheduler_tasks (void);
00182 void scheduler (void);
00183 void scheduler_empty_fct (void);
00184
00185 #ifndef SCHEDULER_TYPE
00186 #error You must define SCHEDULER_TYPE in config.h file
00187 #elif SCHEDULER_TYPE == SCHEDULER_FREE
00188 #define Scheduler_set_tick_flag()
00189 #define Scheduler_reset_tick_flag()
00190 #elif SCHEDULER_TYPE == SCHEDULER_TIMED
00191 #define Scheduler_new_schedule() Wait_semaphore(scheduler_tick_flag)
00192 #define Scheduler_set_tick_flag() (scheduler_tick_flag = TRUE)
00193 #define Scheduler_reset_tick_flag() (scheduler_tick_flag = FALSE)
00194 #elif SCHEDULER_TYPE == SCHEDULER_TASK
00195 #define Scheduler_call_next_task() Wait_semaphore(scheduler_tick_flag)
00196 #define Scheduler_set_tick_flag() (scheduler_tick_flag = TRUE)
00197 #define Scheduler_reset_tick_flag() (scheduler_tick_flag = FALSE)
00198 #elif SCHEDULER_TYPE == SCHEDULER_CUSTOM
00199 #error Make sure you have setup macro/fct Scheduler_new_schedule & Scheduler_call_next_task
00200 #define Scheduler_set_tick_flag() (scheduler_tick_flag = TRUE)
00201 #define Scheduler_reset_tick_flag() (scheduler_tick_flag = FALSE)
00202 #endif
00203
00204 #ifndef Scheduler_call_next_task
00205 #define Scheduler_call_next_task()
00206 #endif
00207 #ifndef Scheduler_new_schedule
00208 #define Scheduler_new_schedule()
00209 #endif
00210 #ifndef Scheduler_call_next_init
00211 #define Scheduler_call_next_init()
00212 #endif
00213
00214 #endif
00215