From: zer0 Date: Sun, 2 May 2010 22:40:22 +0000 (+0200) Subject: scheduler stats X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=a7b1d617331bf4b95cf5e8b56a125e60b3721cc3;p=aversive.git scheduler stats --- diff --git a/modules/base/scheduler/scheduler_interrupt.c b/modules/base/scheduler/scheduler_interrupt.c index 7045776..0009883 100644 --- a/modules/base/scheduler/scheduler_interrupt.c +++ b/modules/base/scheduler/scheduler_interrupt.c @@ -1,6 +1,6 @@ -/* +/* * Copyright Droids Corporation, Microb Technology, Eirbot (2005) - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -31,7 +31,7 @@ static volatile uint8_t priority_running=0; /** number of imbricated scheduler interruptions */ static volatile uint8_t nb_stacking=0; - + uint8_t scheduler_disable_save(void) { uint8_t ret; @@ -69,7 +69,7 @@ scheduler_interrupt(void) SCHED_INC_STAT(max_stacking); return; } - + nb_stacking ++; sei(); @@ -104,13 +104,13 @@ scheduler_interrupt(void) /* decrement current time (we know it is >0 if it is * in SCHEDULER_EVENT_ACTIVE state */ g_tab_event[i].current_time --; - + /* don't need to schedule now */ if ( g_tab_event[i].current_time != 0 ) { sei(); continue; } - + /* time to schedule, but priority is too low, * delay it */ if (g_tab_event[i].priority <= priority_running) { @@ -125,6 +125,7 @@ scheduler_interrupt(void) /* schedule it */ g_tab_event[i].state = SCHEDULER_EVENT_SCHEDULED; + SCHED_INC_STAT2(task_scheduled, i); sei(); /* insert it in the list (list is ordered). @@ -147,7 +148,7 @@ scheduler_interrupt(void) /* harder : find the good place in list */ SLIST_FOREACH(e, &event_list, next) { next_e = SLIST_NEXT(e, next); - if (next_e == NULL || + if (next_e == NULL || g_tab_event[i].priority >= next_e->priority) { SLIST_INSERT_AFTER(e, &g_tab_event[i], next); break; @@ -185,7 +186,7 @@ scheduler_interrupt(void) if (e->state == SCHEDULER_EVENT_DELETING) { e->state = SCHEDULER_EVENT_FREE; } - + /* end of schedule, mark it as active */ if (e->state == SCHEDULER_EVENT_SCHEDULED) { e->state = SCHEDULER_EVENT_ACTIVE; diff --git a/modules/base/scheduler/scheduler_stats.c b/modules/base/scheduler/scheduler_stats.c index 3e2fe7b..9848730 100644 --- a/modules/base/scheduler/scheduler_stats.c +++ b/modules/base/scheduler/scheduler_stats.c @@ -40,8 +40,9 @@ void scheduler_stats_dump(void) printf_P(PSTR("del_event: %"PRIu32"\r\n"), sched_stats.del_event); printf_P(PSTR("max_stacking: %"PRIu32"\r\n"), sched_stats.max_stacking); for (i=0; i