skins/rtai/task.h

Go to the documentation of this file.
00001 00049 #ifndef _RTAI_TASK_H 00050 #define _RTAI_TASK_H 00051 00052 #include <nucleus/fusion.h> 00053 #include <nucleus/thread.h> 00054 #include <rtai/timer.h> 00055 00056 /* Creation flags. */ 00057 #define T_FPU XNFPU 00058 /* <!> Low bits must conflict with XNFPU|XNSHADOW. */ 00059 #define T_CPU(id) ((id) & 0xff) 00060 00061 /* Status flags. */ 00062 #define T_BLOCKED XNPEND 00063 #define T_DELAYED XNDELAY 00064 #define T_READY XNREADY 00065 #define T_DORMANT XNDORMANT 00066 #define T_STARTED XNSTARTED 00067 #define T_BOOST XNBOOST 00068 #define T_LOCK XNLOCK 00069 #define T_RRB XNRRB 00070 00071 /* Task hook types. */ 00072 #define RT_HOOK_TSTART XNHOOK_THREAD_START 00073 #define RT_HOOK_TSWITCH XNHOOK_THREAD_SWITCH 00074 #define RT_HOOK_TDELETE XNHOOK_THREAD_DELETE 00075 #define RT_HOOK_TASKPTR(cookie) thread2rtask(cookie) 00076 00077 /* Priority range. */ 00078 #define T_HIPRIO FUSION_LOW_PRI 00079 #define T_LOPRIO FUSION_HIGH_PRI 00080 #define rtprio2xn(rtprio) (FUSION_HIGH_PRI - (rtprio) + 1) 00081 #define xnprio2rt(xnprio) (T_LOPRIO + (xnprio) - 1) 00082 00083 typedef struct rt_task_placeholder { 00084 rt_handle_t opaque; 00085 } RT_TASK_PLACEHOLDER; 00086 00087 #define RT_TASK_STATUS_MASK \ 00088 (T_FPU|T_BLOCKED|T_DELAYED|T_READY|T_DORMANT|T_STARTED|T_BOOST|T_LOCK|T_RRB) 00089 00090 typedef struct rt_task_info { 00091 00092 int bprio; /* !< Base priority. */ 00093 int cprio; /* !< Current priority. */ 00094 unsigned status; /* !< Status. */ 00095 RTIME relpoint; /* !< Periodic release point. */ 00096 00097 char name[XNOBJECT_NAME_LEN]; /* !< Symbolic name. */ 00098 00099 } RT_TASK_INFO; 00100 00101 #if defined(__KERNEL__) || defined(__RTAI_SIM__) 00102 00103 #define RTAI_TASK_MAGIC 0x55550101 00104 00105 typedef struct rt_task { 00106 00107 unsigned magic; /* !< Magic code - must be first */ 00108 00109 xnholder_t link; 00110 00111 xntimer_t timer; 00112 00113 #define link2rtask(laddr) \ 00114 ((RT_TASK *)(((char *)laddr) - (int)(&((RT_TASK *)0)->link))) 00115 00116 xnthread_t thread_base; 00117 00118 #define thread2rtask(taddr) \ 00119 ((taddr) ? ((RT_TASK *)(((char *)(taddr)) - (int)(&((RT_TASK *)0)->thread_base))) : NULL) 00120 00121 rt_handle_t handle; /* !< Handle in registry -- zero if unregistered. */ 00122 00123 int suspend_depth; 00124 00125 int overrun; 00126 00127 union { /* Saved args for current synch. wait operation. */ 00128 00129 struct { 00130 int mode; 00131 unsigned long mask; 00132 } event; 00133 00134 } wait_args; 00135 00136 } RT_TASK; 00137 00138 #define rtai_current_task() thread2rtask(xnpod_current_thread()) 00139 00140 #ifdef __cplusplus 00141 extern "C" { 00142 #endif 00143 00144 int __task_pkg_init(void); 00145 00146 void __task_pkg_cleanup(void); 00147 00148 /* Public kernel interface */ 00149 00150 int rt_task_add_hook(int type, 00151 void (*routine)(void *cookie)); 00152 00153 #ifdef __cplusplus 00154 } 00155 #endif 00156 00157 #else /* !(__KERNEL__ || __RTAI_SIM__) */ 00158 00159 typedef RT_TASK_PLACEHOLDER RT_TASK; 00160 00161 int rt_task_bind(RT_TASK *task, 00162 const char *name); 00163 00164 #endif /* __KERNEL__ || __RTAI_SIM__ */ 00165 00166 #ifdef __cplusplus 00167 extern "C" { 00168 #endif 00169 00170 /* Public interface */ 00171 00172 int rt_task_create(RT_TASK *task, 00173 const char *name, 00174 int stksize, 00175 int prio, 00176 int mode); 00177 00178 int rt_task_start(RT_TASK *task, 00179 void (*fun)(void *cookie), 00180 void *cookie); 00181 00182 int rt_task_suspend(RT_TASK *task); 00183 00184 int rt_task_resume(RT_TASK *task); 00185 00186 int rt_task_delete(RT_TASK *task); 00187 00188 int rt_task_yield(void); 00189 00190 int rt_task_set_periodic(RT_TASK *task, 00191 RTIME idate, 00192 RTIME period); 00193 00194 int rt_task_wait_period(void); 00195 00196 int rt_task_set_priority(RT_TASK *task, 00197 int prio); 00198 00199 int rt_task_sleep(RTIME delay); 00200 00201 int rt_task_sleep_until(RTIME date); 00202 00203 int rt_task_unblock(RT_TASK *task); 00204 00205 int rt_task_inquire (RT_TASK *task, 00206 RT_TASK_INFO *info); 00207 00208 #ifdef __cplusplus 00209 } 00210 #endif 00211 00212 #endif /* !_RTAI_TASK_H */

Generated on Mon Aug 30 13:58:39 2004 for RTAI API by doxygen 1.3.8