projects
/
fw
/
altos
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
altos: 3-axis accel calibration was invalid in explicit accel cal mode
[fw/altos]
/
src
/
core
/
ao_task.h
diff --git
a/src/core/ao_task.h
b/src/core/ao_task.h
index 18edd8669e58241019c9a6ccb18f0d345fdb38fd..9c56b48021d6dd4ebe83c69f44aa04c5ade023c3 100644
(file)
--- a/
src/core/ao_task.h
+++ b/
src/core/ao_task.h
@@
-17,6
+17,13
@@
#ifndef _AO_TASK_H_
#define _AO_TASK_H_
#ifndef _AO_TASK_H_
#define _AO_TASK_H_
+#if HAS_TASK_QUEUE
+#include <ao_list.h>
+#endif
+
+#ifndef HAS_TASK_INFO
+#define HAS_TASK_INFO 1
+#endif
/* An AltOS task */
struct ao_task {
/* An AltOS task */
struct ao_task {
@@
-25,14
+32,30
@@
struct ao_task {
ao_arch_task_members /* any architecture-specific fields */
uint8_t task_id; /* unique id */
__code char *name; /* task name */
ao_arch_task_members /* any architecture-specific fields */
uint8_t task_id; /* unique id */
__code char *name; /* task name */
+#if HAS_TASK_QUEUE
+ struct ao_list queue;
+ struct ao_list alarm_queue;
+#endif
uint8_t stack[AO_STACK_SIZE]; /* saved stack */
uint8_t stack[AO_STACK_SIZE]; /* saved stack */
+#if HAS_SAMPLE_PROFILE
+ uint32_t ticks;
+ uint32_t yields;
+ uint16_t start;
+ uint16_t max_run;
+#endif
};
};
-extern __xdata struct ao_task *__data ao_cur_task;
-
+#ifndef AO_NUM_TASKS
#define AO_NUM_TASKS 16 /* maximum number of tasks */
#define AO_NUM_TASKS 16 /* maximum number of tasks */
+#endif
+
#define AO_NO_TASK 0 /* no task id */
#define AO_NO_TASK 0 /* no task id */
+extern __xdata struct ao_task * __xdata ao_tasks[AO_NUM_TASKS];
+extern __data uint8_t ao_num_tasks;
+extern __xdata struct ao_task *__data ao_cur_task;
+extern __data uint8_t ao_task_minimize_latency; /* Reduce IRQ latency */
+
/*
ao_task.c
*/
/*
ao_task.c
*/
@@
-47,7
+70,7
@@
ao_sleep(__xdata void *wchan);
/* Wake all tasks sleeping on wchan */
void
/* Wake all tasks sleeping on wchan */
void
-ao_wakeup(__xdata void *wchan);
+ao_wakeup(__xdata void *wchan)
__reentrant
;
/* set an alarm to go off in 'delay' ticks */
void
/* set an alarm to go off in 'delay' ticks */
void
@@
-65,6
+88,13
@@
ao_yield(void) ao_arch_naked_declare;
void
ao_add_task(__xdata struct ao_task * task, void (*start)(void), __code char *name) __reentrant;
void
ao_add_task(__xdata struct ao_task * task, void (*start)(void), __code char *name) __reentrant;
+#if HAS_TASK_QUEUE
+/* Called on timer interrupt to check alarms */
+extern uint16_t ao_task_alarm_tick;
+void
+ao_task_check_alarm(uint16_t tick);
+#endif
+
/* Terminate the current task */
void
ao_exit(void);
/* Terminate the current task */
void
ao_exit(void);
@@
-77,4
+107,11
@@
ao_task_info(void);
void
ao_start_scheduler(void);
void
ao_start_scheduler(void);
+#if HAS_TASK_QUEUE
+void
+ao_task_init(void);
+#else
+#define ao_task_init()
+#endif
+
#endif
#endif