00001 // Header File 00002 // Created 05/02/05; 00:42:29 00003 00004 #ifndef __OPALE_H 00005 #define __OPALE_H 00006 00008 #define Opale_version "00.02.00b" 00009 00014 #define _N_ 3 00015 00020 #define _Y_ 8 00021 00023 #define _X_ (1<<_N_) 00024 00025 #if _N_ > 3 00026 #error "_N_ priority coord can't be more than 3" 00027 #endif 00028 00029 #if _Y_ > 8 00030 #error "_Y_ priority coord can't be more than 8" 00031 #endif 00032 00036 #define NUM_TASKS (_X_*_Y_) 00037 00039 #define TO_LOWEST_SETTED_BIT_TABLE_SIZE ((_X_>_Y_)?(1<<_X_):(1<<_Y_)) 00040 00043 #define IDLE_TASK_STACK_SIZE 70 00044 00046 #define LOWEST_PRIORITY (NUM_TASKS-1) 00047 00051 #define op_EnterCriticalSection() asm(" trap #7") 00052 00055 #define op_ExitCriticalSection() asm(" trap #8") 00056 00059 typedef struct t_TASK { 00061 char* stackPointer; 00063 unsigned short tickDelay; 00065 struct t_TASK* nextSleeping; 00067 struct t_TASK* prevSleeping; 00069 unsigned char ident; 00070 } t_TASK; 00071 00073 typedef 00117 void* message; 00119 t_TASK_BLOCK waitingTasks; 00120 } t_MAILBOX; 00121 00123 typedef struct { 00125 void** messageBuffer; 00127 t_TASK_BLOCK waitingTasks; 00129 unsigned short front; 00131 unsigned short back; 00133 unsigned short bufferSize; 00135 unsigned short bufferUsage; 00136 } t_QUEUE; 00137 00138 void op_SemaphoreInit( register t_SEMAPHORE* semaphore asm(" "), register unsigned long initValue asm("Ð") ); 00139 void op_SemaphorePost( register t_SEMAPHORE* semaphore asm(" ") ); 00140 void op_SemaphorePend( register t_SEMAPHORE* semaphore asm(" ") ); 00141 00142 void op_MailBoxInit( register t_MAILBOX* mailbox asm(" "), register void* initMessage asm("Ð") ); 00143 unsigned short op_MailBoxPost( register t_MAILBOX* mailBox asm(" "), register void* message asm("Ð") ); 00144 void* op_MailBoxPend( register t_MAILBOX* mailBox asm(" ") ); 00145 00146 void op_QueueInit( register t_QUEUE* queue asm(" "), register void* buffer asm("Ð"), register unsigned short size asm("Ñ") ); 00147 unsigned short op_QueuePost( register t_QUEUE* queue asm(" "), register void* message asm("Ð") ); 00148 unsigned short op_QueuePostFront( register t_QUEUE* queue asm(" "), register void* message asm("Ð") ); 00149 void* op_QueuePend( register t_QUEUE* queue asm(" ") ); 00150 00151 #endif 00152 00153 00154 00155 /* end of file */