]> rtime.felk.cvut.cz Git - rtems-pluggable-edf.git/commitdiff
Budget overrun handler minor fix.
authorPetr Benes <benesp16@fel.cvut.cz>
Wed, 27 Apr 2011 22:19:11 +0000 (00:19 +0200)
committerPetr Benes <benesp16@fel.cvut.cz>
Wed, 27 Apr 2011 22:19:11 +0000 (00:19 +0200)
src/edf/scheduler_edf.c
src/edf/scheduler_edf.h

index 536fa2acf82e3a524007d5a9be439dbcc5ab150d..72cae70f4603ddbc9b47b6661494928d28af7f42 100644 (file)
@@ -27,12 +27,12 @@ void edf_next_period(void) {
 }
 
 // if cmp_time is 0, no CBS is used, only pure EDF
-void edf_deadline_init(uint32_t __rel_deadline__, uint32_t __cmp_time__, rtems_asr_entry *budget_overrun_handler) {
+void edf_deadline_init(uint32_t __rel_deadline__, uint32_t __cmp_time__, rtems_asr_entry budget_overrun_handler) {
        Thread_Control *the_thread = _Per_CPU_Information.executing;
        RBT_Node *node = (RBT_Node*)the_thread->scheduler_info; 
        node->rel_deadline = __rel_deadline__;
        if (__cmp_time__) {
-               rtems_signal_catch(*budget_overrun_handler, RTEMS_DEFAULT_MODES);
+               rtems_signal_catch(budget_overrun_handler, RTEMS_DEFAULT_MODES);
                node->cmp_time = __cmp_time__;
                the_thread->is_preemptible = true;
                the_thread->budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_CALLOUT;
@@ -58,16 +58,16 @@ void edf_deadline_cancel(void) {
 Thread_CPU_budget_algorithm_callout edf_budget_overrun_callout() {
        Thread_Control *the_thread = _Per_CPU_Information.executing;    
        RBT_Node *node = (RBT_Node*)the_thread->scheduler_info; 
-       rtems_signal_send(the_thread->Object.id, RTEMS_SIGNAL_18);
-       _Thread_Suspend (the_thread);
-       //wait until next period to enable the task again
-       uint32_t ticks = node->abs_deadline - _Watchdog_Ticks_since_boot;
+       rtems_signal_send(the_thread->Object.id, RTEMS_SIGNAL_15);
+       _Thread_Suspend (the_thread); //TODO: make options on suspension
+       uint32_t ticks = node->abs_deadline - _Watchdog_Ticks_since_boot; //FIXME: wrong calc
        rtems_timer_fire_after(node->timer_id, ticks, (void *) edf_budget_overrun_reenable, the_thread);
        return 0;
 }
 
 rtems_timer_service_routine_entry edf_budget_overrun_reenable(Thread_Control *the_thread) {
        _Thread_Resume(the_thread, false);
+       printf("Come back\n"); //FIXME: Continue here
        return 0;
 }
 
@@ -93,6 +93,7 @@ void _Scheduler_edf_Initialize(void) {
        _Thread_Ready_EDF_chain.first = NULL;
        _Thread_Heir = NULL;
        _Thread_Executing = NULL;
+       _Signal_Manager_initialization();
 }
 
 void _Scheduler_edf_Block(  Thread_Control    *the_thread ) {
index ed4ba3519530c189705cb55ff8ab4672ab086fb4..3a4b55d5aaa1184fa3903d0cc8682fb82a4c85dc 100644 (file)
@@ -16,7 +16,7 @@ void edf_next_period(void);
 
 /// Changes scheduling policy from priorities to deadlines
 /// @param __rel_deadline__ in ticks required
-void edf_deadline_init(uint32_t __rel_deadline__, uint32_t __cmp_time__, rtems_asr_entry *budget_overrun_handler);
+void edf_deadline_init(uint32_t __rel_deadline__, uint32_t __cmp_time__, rtems_asr_entry budget_overrun_handler);
 
 /// Changes scheduling policy from deadlines to priorities
 void edf_deadline_cancel(void);