2014-04-24 16:25:24 +02:00
|
|
|
*** stock_iot-lab_M3/openwsn/scheduler.c Thu Apr 24 11:01:37 2014
|
|
|
|
--- riot-openwsn-wip/openwsn/scheduler.c Thu Apr 24 16:55:54 2014
|
|
|
|
***************
|
|
|
|
*** 6,38 ****
|
|
|
|
|
|
|
|
#include "openwsn.h"
|
|
|
|
#include "scheduler.h"
|
|
|
|
! #include "board.h"
|
|
|
|
#include "debugpins.h"
|
|
|
|
! #include "leds.h"
|
|
|
|
|
|
|
|
! //=========================== variables =======================================
|
|
|
|
|
|
|
|
! typedef struct task_llist_t {
|
|
|
|
! task_cbt cb;
|
|
|
|
! task_prio_t prio;
|
|
|
|
! void* next;
|
|
|
|
! } taskList_item_t;
|
|
|
|
!
|
|
|
|
! typedef struct {
|
|
|
|
! taskList_item_t taskBuf[TASK_LIST_DEPTH];
|
|
|
|
! taskList_item_t* task_list;
|
|
|
|
! uint8_t numTasksCur;
|
|
|
|
! uint8_t numTasksMax;
|
|
|
|
! } scheduler_vars_t;
|
|
|
|
|
|
|
|
scheduler_vars_t scheduler_vars;
|
|
|
|
!
|
|
|
|
! typedef struct {
|
|
|
|
! uint8_t numTasksCur;
|
|
|
|
! uint8_t numTasksMax;
|
|
|
|
! } scheduler_dbg_t;
|
|
|
|
!
|
|
|
|
! scheduler_dbg_t scheduler_dbg;
|
|
|
|
|
|
|
|
//=========================== prototypes ======================================
|
|
|
|
|
|
|
|
--- 6,24 ----
|
|
|
|
|
|
|
|
#include "openwsn.h"
|
|
|
|
#include "scheduler.h"
|
|
|
|
! #include "board_ow.h"
|
|
|
|
#include "debugpins.h"
|
|
|
|
! #include "leds_ow.h"
|
2014-07-09 21:08:13 +02:00
|
|
|
! #include "arch/hwtimer_arch.h"
|
2014-04-24 16:25:24 +02:00
|
|
|
! #include "thread.h"
|
|
|
|
|
|
|
|
! #define ENABLE_DEBUG (0)
|
|
|
|
! #include "debug.h"
|
|
|
|
|
|
|
|
! //=========================== variables =======================================
|
|
|
|
|
|
|
|
scheduler_vars_t scheduler_vars;
|
|
|
|
! scheduler_dbg_t scheduler_dbg;
|
|
|
|
|
|
|
|
//=========================== prototypes ======================================
|
|
|
|
|
|
|
|
***************
|
|
|
|
*** 41,56 ****
|
|
|
|
//=========================== public ==========================================
|
|
|
|
|
|
|
|
void scheduler_init() {
|
|
|
|
-
|
|
|
|
// initialization module variables
|
|
|
|
memset(&scheduler_vars,0,sizeof(scheduler_vars_t));
|
|
|
|
memset(&scheduler_dbg,0,sizeof(scheduler_dbg_t));
|
|
|
|
|
|
|
|
// enable the scheduler's interrupt so SW can wake up the scheduler
|
|
|
|
! SCHEDULER_ENABLE_INTERRUPT();
|
|
|
|
}
|
|
|
|
|
|
|
|
void scheduler_start() {
|
|
|
|
taskList_item_t* pThisTask;
|
|
|
|
while (1) {
|
|
|
|
while(scheduler_vars.task_list!=NULL) {
|
|
|
|
--- 27,44 ----
|
|
|
|
//=========================== public ==========================================
|
|
|
|
|
|
|
|
void scheduler_init() {
|
|
|
|
// initialization module variables
|
|
|
|
memset(&scheduler_vars,0,sizeof(scheduler_vars_t));
|
|
|
|
memset(&scheduler_dbg,0,sizeof(scheduler_dbg_t));
|
|
|
|
|
|
|
|
// enable the scheduler's interrupt so SW can wake up the scheduler
|
|
|
|
! //SCHEDULER_ENABLE_INTERRUPT();
|
|
|
|
!
|
|
|
|
! DEBUG("%s\n",__PRETTY_FUNCTION__);
|
|
|
|
}
|
|
|
|
|
|
|
|
void scheduler_start() {
|
|
|
|
+ DEBUG("%s\n",__PRETTY_FUNCTION__);
|
|
|
|
taskList_item_t* pThisTask;
|
|
|
|
while (1) {
|
|
|
|
while(scheduler_vars.task_list!=NULL) {
|
|
|
|
***************
|
|
|
|
*** 58,64 ****
|
|
|
|
|
|
|
|
// the task to execute is the one at the head of the queue
|
|
|
|
pThisTask = scheduler_vars.task_list;
|
|
|
|
!
|
|
|
|
// shift the queue by one task
|
|
|
|
scheduler_vars.task_list = pThisTask->next;
|
|
|
|
|
|
|
|
--- 46,52 ----
|
|
|
|
|
|
|
|
// the task to execute is the one at the head of the queue
|
|
|
|
pThisTask = scheduler_vars.task_list;
|
|
|
|
! DEBUG("run task %p with prio %d\n", pThisTask->cb, pThisTask->prio);
|
|
|
|
// shift the queue by one task
|
|
|
|
scheduler_vars.task_list = pThisTask->next;
|
|
|
|
|
|
|
|
***************
|
|
|
|
*** 71,87 ****
|
|
|
|
pThisTask->next = NULL;
|
|
|
|
scheduler_dbg.numTasksCur--;
|
|
|
|
}
|
|
|
|
! debugpins_task_clr();
|
|
|
|
! board_sleep();
|
|
|
|
! debugpins_task_set(); // IAR should halt here if nothing to do
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void scheduler_push_task(task_cbt cb, task_prio_t prio) {
|
|
|
|
taskList_item_t* taskContainer;
|
|
|
|
taskList_item_t** taskListWalker;
|
|
|
|
INTERRUPT_DECLARATION();
|
|
|
|
!
|
|
|
|
DISABLE_INTERRUPTS();
|
|
|
|
|
|
|
|
// find an empty task container
|
|
|
|
--- 59,79 ----
|
|
|
|
pThisTask->next = NULL;
|
|
|
|
scheduler_dbg.numTasksCur--;
|
|
|
|
}
|
|
|
|
! //DEBUG("no do...\n");
|
|
|
|
! //debugpins_task_clr();
|
|
|
|
! // board_sleep();
|
|
|
|
! //debugpins_task_set(); // IAR should halt here if nothing to do
|
|
|
|
! thread_yield();
|
|
|
|
}
|
|
|
|
+ DEBUG("leaving... WTF?!\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
void scheduler_push_task(task_cbt cb, task_prio_t prio) {
|
|
|
|
+ DEBUG("%s\n",__PRETTY_FUNCTION__);
|
|
|
|
taskList_item_t* taskContainer;
|
|
|
|
taskList_item_t** taskListWalker;
|
|
|
|
INTERRUPT_DECLARATION();
|
|
|
|
!
|
|
|
|
DISABLE_INTERRUPTS();
|
|
|
|
|
|
|
|
// find an empty task container
|
|
|
|
***************
|
|
|
|
*** 117,124 ****
|
|
|
|
if (scheduler_dbg.numTasksCur>scheduler_dbg.numTasksMax) {
|
|
|
|
scheduler_dbg.numTasksMax = scheduler_dbg.numTasksCur;
|
|
|
|
}
|
|
|
|
-
|
|
|
|
ENABLE_INTERRUPTS();
|
|
|
|
! }
|
|
|
|
!
|
|
|
|
! //=========================== private =========================================
|
|
|
|
--- 109,113 ----
|
|
|
|
if (scheduler_dbg.numTasksCur>scheduler_dbg.numTasksMax) {
|
|
|
|
scheduler_dbg.numTasksMax = scheduler_dbg.numTasksCur;
|
|
|
|
}
|
|
|
|
ENABLE_INTERRUPTS();
|
|
|
|
! }
|