static void main_task(void *arg) { RT_TASK *p; int ret; traceobj_enter(&trobj); p = rt_task_self(); traceobj_assert(&trobj, p != NULL && rt_task_same(p, &t_main)); traceobj_mark(&trobj, 5); ret = rt_alarm_start(&alrm, 200000000ULL, 200000000ULL); traceobj_check(&trobj, ret, 0); traceobj_mark(&trobj, 6); ret = rt_task_suspend(&t_main); traceobj_check(&trobj, ret, 0); traceobj_mark(&trobj, 7); ret = rt_alarm_delete(&alrm); traceobj_check(&trobj, ret, 0); traceobj_exit(&trobj); }
INTERNAL_QUAL int rtos_task_is_self(const RTOS_TASK* task) { RT_TASK* self = rt_task_self(); if (self == 0 || task == 0) return -1; // non-xeno thread. We could try to compare pthreads like in gnulinux ? #if ((CONFIG_XENO_VERSION_MAJOR*1000)+(CONFIG_XENO_VERSION_MINOR*100)+CONFIG_XENO_REVISION_LEVEL) >= 2500 if ( rt_task_same( self, task->xenoptr ) != 0 ) return 1; #else // older versions: if ( self == task->xenoptr ) // xenoptr is also set by rt_task_self() during construction. return 1; #endif return 0; }