aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2011-12-12 12:33:00 +0000
committerDimitri Sokolyuk <demon@dim13.org>2011-12-12 12:33:00 +0000
commit9d9d6a985a813c81c84d39c4a42d2d19c2b6fa16 (patch)
tree23f9c21a882aeb4677221ec6d9b33a9aba509cd4
parenta644a9bd824d6ac2fb0dc79402e15d0d2d4f9055 (diff)
update set()
-rw-r--r--kernel/kernel.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/kernel/kernel.c b/kernel/kernel.c
index 6dc4458..15fb4b1 100644
--- a/kernel/kernel.c
+++ b/kernel/kernel.c
@@ -222,11 +222,19 @@ signal(uint8_t sema)
void
set(uint32_t release, uint32_t deadline)
{
+ struct task *t;
+ uint32_t now;
+
cli();
- kernel.running->state = TIMEQ;
- kernel.running->release = release;
- kernel.running->deadline = deadline;
+ now = NOW(kernel.cycles, TCNT1);
+ t = kernel.running;
+#if SLACK
+ t->slack = DISTANCE(now, t->deadline);
+#endif
+ t->state = TIMEQ;
+ t->release = release;
+ t->deadline = deadline;
SCHEDULE();
}
@@ -236,6 +244,7 @@ update(uint32_t release, uint32_t deadline)
{
struct task *t;
uint32_t now;
+
cli();
now = NOW(kernel.cycles, TCNT1);