29 #include <pkgconf/kernel.h> 30 #include <pkgconf/os_ecos.h> 33 #include "../fosi_internal_interface.hpp" 34 #include <cyg/kernel/kapi.h> 45 const char* name =
"main";
46 main_task->
name = strcpy( (
char*)malloc( (strlen(name) + 1) *
sizeof(
char)), name);
52 free(main_task->
name);
53 main_task->
name = NULL;
60 unsigned cpu_affinity,
64 void * (*start_routine)(
void *),
68 if ( strlen(name) == 0 )
70 task->
name = strcpy( (
char*)malloc( (strlen(name) + 1) *
sizeof(
char)), name);
76 cyg_thread_create((cyg_addrword_t) priority,
77 (cyg_thread_entry_t *) start_routine,
81 OROSEM_OS_ECOS_STACK_SIZE,
92 cyg_thread_resume(task->
handle);
102 cyg_sem_t * wakeup_sem = (cyg_sem_t *) data;
103 cyg_semaphore_post(wakeup_sem);
134 mytask->
period = nanosecs;
139 mytask->
period = nanosecs;
183 bool succeed = cyg_thread_delete(mytask->
handle);
184 if (succeed ==
false)
185 diag_printf(
"cyg_thread_delete: Error deleting task\n");
193 cyg_thread_info info;
194 bool succeed = cyg_thread_get_info(t->
handle,cyg_thread_get_id(t->
handle),&info);
195 if (succeed ==
false) {
196 diag_printf(
"fosi_internal.hpp rtos_task_get_name() WARNING: cyg_thread_get_info returned false...\n");
197 return "(destroyed)";
204 cyg_thread_set_priority(t->
handle,(cyg_priority_t) priority);
205 return int(cyg_thread_get_priority(t->
handle)) == priority ? 0 : 1;
210 return (
int) cyg_thread_get_priority(t->
handle);
241 log(
Error) <<
"Unknown scheduler type." <<endlog();
int rtos_task_get_priority(const RTOS_TASK *task)
Return the priority of a thread.
INTERNAL_QUAL void rtos_task_make_periodic(RTOS_TASK *mytask, NANO_TIME nanosecs)
This function is to inform the RTOS that a thread is switching between periodic or non-periodic execu...
INTERNAL_QUAL int rtos_task_check_priority(int *scheduler, int *priority)
This function checks (and corrects) a given priority within a given scheduler type.
unsigned int rtos_task_get_pid(const RTOS_TASK *task)
Returns the process ID the OS gave to the task task.
INTERNAL_QUAL int rtos_task_delete_main(RTOS_TASK *main_task)
Cleanup the main thread.
int rtos_task_set_scheduler(RTOS_TASK *t, int sched_type)
Set the scheduler of a given task t to a the type sched_type.
int rtos_task_set_cpu_affinity(RTOS_TASK *task, unsigned cpu_affinity)
Set the cpu affinity of a thread.
unsigned rtos_task_get_cpu_affinity(const RTOS_TASK *task)
Return the cpu affinity of a thread.
#define OROSEM_OS_ECOS_STACK_SIZE
A thread which is being run.
void rtos_task_set_wait_period_policy(RTOS_TASK *task, int policy)
Set the wait policy of a thread.
void rtos_task_delete(RTOS_TASK *mytask)
This function must join the thread created with rtos_task_create and then clean up the RTOS_TASK stru...
int rtos_task_set_priority(RTOS_TASK *task, int priority)
Set the priority of a thread.
const char * rtos_task_get_name(const RTOS_TASK *task)
Returns the name by which a task is known in the RTOS.
int rtos_task_check_scheduler(int *sched_type)
This function checks (and corrects) if the given sched_type is valid for this RTOS.
int rtos_task_wait_period(RTOS_TASK *task)
This function is called by a periodic thread which wants to go to sleep and wake up the next period...
TICK_TIME rtos_get_time_ticks(void)
Get "system" time in ticks FIXME see https://proj.fmtc.be/orocos-bugzilla/show_bug.cgi?id=60
INTERNAL_QUAL void rtos_task_yield(RTOS_TASK *)
Yields the current thread.
TICK_TIME nano2ticks(NANO_TIME nano)
Time conversions from nano seconds to system ticks.
Contains TaskContext, Activity, OperationCaller, Operation, Property, InputPort, OutputPort, Attribute.
INTERNAL_QUAL int rtos_task_create_main(RTOS_TASK *main_task)
Initialise the main thread.
void rtos_task_set_period(RTOS_TASK *mytask, NANO_TIME nanosecs)
Change the period of a periodic RTOS task.
INTERNAL_QUAL int rtos_task_create(RTOS_TASK *task, int priority, unsigned cpu_affinity, const char *name, int sched_type, size_t stack_size, void *(*start_routine)(void *), ThreadInterface *obj)
Create a thread.
INTERNAL_QUAL void wakeup_handler(cyg_handle_t alarm_handle, cyg_addrword_t data)
int rtos_task_get_scheduler(const RTOS_TASK *t)
Returns the current scheduler set for task t.