diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/clock.c | 2 | ||||
-rw-r--r-- | src/heap.c | 19 | ||||
-rw-r--r-- | src/main.c | 4 | ||||
-rw-r--r-- | src/task.c | 10 |
4 files changed, 20 insertions, 15 deletions
diff --git a/src/clock.c b/src/clock.c index ab92386..7cb4ecf 100644 --- a/src/clock.c +++ b/src/clock.c @@ -54,7 +54,7 @@ void SysTick_Handler(void) // just keep counting ticks++; - if (!(ticks % 10)) + if (!(ticks % 4)) SCB->ICSR |= SCB_ICSR_PENDSVSET_Msk; asm("mov lr, %0; bx lr" :: "r" (lr)); @@ -19,16 +19,27 @@ void heap_init(void *buf) // what to do... } +uint32_t heap_used(void) +{ + uint32_t total = 0; + alloc_t *a = &root; + while (a->next > 1) { + total += a->size; + a = (void *)(a->next & ~(1)); + } + return total; +} + void *malloc(uint32_t size) { task_hold(1); - if (size < 16) - size = 16; + if (size < HEAP_ALIGN) + size = HEAP_ALIGN; alloc_t *node = &root; while (node->next & 1 || node->size < size) { if ((node->next & ~(1)) == 0) { node->next |= (uint32_t)(heap_end + HEAP_ALIGN) & ~(HEAP_ALIGN - 1); - heap_end += 2 * HEAP_ALIGN + size; + heap_end += HEAP_ALIGN + size; node = (void *)(node->next & ~(1)); node->next = 0; node->size = size; @@ -46,7 +57,7 @@ void *malloc(uint32_t size) void *calloc(uint32_t count, uint32_t size) { uint8_t *buf = malloc(count * size); - for (uint8_t i = 0; i < count * size; i++) + for (uint32_t i = 0; i < count * size; i++) buf[i] = 0; return buf; } @@ -107,7 +107,7 @@ int script_color(interpreter *it) igetarg_integer(it, 2));
variable v;
v.valtype = INTEGER;
- v.value = c;
+ INT(&v) = c;
v.svalue = 0;
isetstr(&v);
iret(it, &v);
@@ -120,7 +120,7 @@ int script_rand(interpreter *it) next = (next * 182 + 1829) % igetarg_integer(it, 0);
variable v;
v.valtype = INTEGER;
- v.value = next;
+ INT(&v) = next;
v.svalue = 0;
isetstr(&v);
iret(it, &v);
@@ -54,7 +54,6 @@ void task_init(void (*init)(void)) task_disable = 0; init(); - // you dirty dirty dog /*asm("\ cpsie i; \ mov pc, %0; \ @@ -65,9 +64,8 @@ void task_start(void (*task)(void), uint16_t stackSize) { task_hold(1); task_t *t = task_create(task, stackSize); - task_t *next = (task_t *)current->next; + t->next = current->next; current->next = t; - t->next = next; task_hold(0); } @@ -96,12 +94,8 @@ void PendSV_Handler(void) msr psp, r0; \ isb; \ dsb; \ - " :: "r" (current->sp)); - - // end - asm("\ cpsie i; \ bx lr; \ - "); + " :: "r" (current->sp)); } |