00001 #ifndef _FXMIT_TASK_H
00002 #define _FXMIT_TASK_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
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
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065 #ifdef __cplusplus
00066 extern "C" {
00067 #endif
00068
00069 #ifdef OS_VXWORKS
00070 #include <semLib.h>
00071 #include <taskLib.h>
00072
00073 #else
00074 #include <pthread.h>
00075 #endif
00076
00089
00098
00110
00111 #ifndef OS_VXWORKS
00112
00118 typedef pthread_t taskID_t;
00119 #else
00120 typedef int taskID_t;
00121 #endif
00122
00123
00124 #ifndef OS_VXWORKS
00125
00131 typedef pthread_mutex_t mutexID_t;
00132 #else
00133 typedef SEM_ID mutexID_t;
00134 #endif
00135
00136
00137 #ifndef OS_VXWORKS
00138
00144 typedef void* taskretarg_t;
00145 #else
00146 typedef void taskretarg_t;
00147 #endif
00148
00149
00156 typedef void* taskarg_t;
00157
00158
00164 typedef taskretarg_t (*taskfunc_t) (taskarg_t);
00165
00166
00178
00179 #ifndef OS_VXWORKS
00180
00188 #define MUTEX_CREATE(sem) \
00189 pthread_mutex_init (&(sem), NULL)
00190 #else
00191 #define MUTEX_CREATE(sem) \
00192 (((sem = semMCreate (SEM_Q_PRIORITY | SEM_INVERSION_SAFE | \
00193 SEM_DELETE_SAFE)) == NULL) ? 1 : 0)
00194 #endif
00195
00196
00197 #ifndef OS_VXWORKS
00198
00206 #define MUTEX_GET(sem) \
00207 pthread_mutex_lock (&(sem))
00208 #else
00209 #define MUTEX_GET(sem) \
00210 semTake (sem, WAIT_FOREVER)
00211 #endif
00212
00213
00214 #ifndef OS_VXWORKS
00215
00223 #define MUTEX_TRY(sem) \
00224 pthread_mutex_trylock (&(sem))
00225 #else
00226 #define MUTEX_TRY(sem) \
00227 semTake (sem, NO_WAIT)
00228 #endif
00229
00230
00231 #ifndef OS_VXWORKS
00232
00240 #define MUTEX_RELEASE(sem) \
00241 pthread_mutex_unlock (&(sem))
00242 #else
00243 #define MUTEX_RELEASE(sem) \
00244 semGive (sem)
00245 #endif
00246
00247
00248 #ifndef OS_VXWORKS
00249
00257 #define MUTEX_DESTROY(sem) \
00258 pthread_mutex_destroy (&(sem))
00259 #else
00260 #define MUTEX_DESTROY(sem) \
00261 semDelete (sem)
00262 #endif
00263
00275
00276
00295 int taskCreate (int attr, int priority, taskID_t* taskID,
00296 const char* taskname, taskfunc_t task, taskarg_t arg);
00297
00307 int taskCancel (taskID_t* taskID);
00308
00312
00313
00314 #ifdef __cplusplus
00315 }
00316 #endif
00317
00318 #endif