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