]> code.bitgloo.com Git - clyne/calculator.git/commitdiff
things should work now
authorClyne Sullivan <tullivan99@gmail.com>
Thu, 22 Feb 2018 16:14:33 +0000 (11:14 -0500)
committerClyne Sullivan <tullivan99@gmail.com>
Thu, 22 Feb 2018 16:14:33 +0000 (11:14 -0500)
include/heap.h
initrd/init
libinterp.a
run.sh
src/clock.c
src/heap.c
src/main.c
src/task.c

index c93eb8ef78af90fa0bbbf652c0bc3b2ed0ac6e5c..8118384377a2579c6315bb45298a4dddedc1c286 100644 (file)
@@ -4,6 +4,7 @@
 #include <stdint.h>
 
 void heap_init(void *buf);
+uint32_t heap_used(void);
 
 void *malloc(uint32_t size);
 void *calloc(uint32_t count, uint32_t size);
index 81965119d334c110630247f6fdc28e07a500734a..694c1518f4b3bc0af11a6203a7e113ace5fc8bbc 100644 (file)
@@ -19,5 +19,15 @@ do
        set y (y + 20)
 while (y < 270)
 
-line 80 250 380 90 511
+#line 80 250 380 90 511
+set purple 511
+do
+       rand 219 > x
+       rand 379 > y
+       rand 219 > i
+       rand 379 > j
 
+       line (x + 50) (y + 50) (i + 50) (j + 50) purple
+       delay 1000
+       set purple (purple + 11)
+while (1)
index f15e95662444a589f3b20489ba5c765306e620ff..78845426cf7cb133247face6a3854622bf35f3ad 100644 (file)
Binary files a/libinterp.a and b/libinterp.a differ
diff --git a/run.sh b/run.sh
index 88be7faa7c059702947534789bec2982cd0e1cc4..318f1ff62863ddd79e4b6004ceb241c75a502c85 100755 (executable)
--- a/run.sh
+++ b/run.sh
@@ -1,7 +1,7 @@
 #!/bin/bash
 
-openocd -f /usr/share/openocd/scripts/board/st_nucleo_l476rg.cfg \
-       -c "init; reset halt; flash write_image erase main.hex; reset run; exit"
+#openocd -f /usr/share/openocd/scripts/board/st_nucleo_l476rg.cfg \
+#      -c "init; reset halt; flash write_image erase main.hex; reset run; exit"
 
-#openocd -f /usr/share/openocd/scripts/board/st_nucleo_l476rg.cfg > /dev/null &
-#gdb-multiarch 
+openocd -f /usr/share/openocd/scripts/board/st_nucleo_l476rg.cfg > /dev/null &
+gdb-multiarch -iex "target remote localhost:3333" out/main.elf
index ab923867c77efd2d3be69d589db356ad402d50ff..7cb4ecfcd4a7c9c81dd8d2b33f8df65e2cfd8f43 100644 (file)
@@ -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));
index 5d32a14bf2f41f9917f72a09dfa97494e8856725..0502e76a701bb0c16b6e7836121a0fe30c823c9b 100644 (file)
@@ -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;
 }
index 0245801176dca916d44d80e9967ec5acd8c6bda2..a9466097b9eda5298ec5d59802f2c1581837ea4b 100644 (file)
@@ -107,7 +107,7 @@ int script_color(interpreter *it)
                igetarg_integer(it, 2));\r
        variable v;\r
        v.valtype = INTEGER;\r
-       v.value = c;\r
+       INT(&v) = c;\r
        v.svalue = 0;\r
        isetstr(&v);\r
        iret(it, &v);\r
@@ -120,7 +120,7 @@ int script_rand(interpreter *it)
        next = (next * 182 + 1829) % igetarg_integer(it, 0);\r
        variable v;\r
        v.valtype = INTEGER;\r
-       v.value = next;\r
+       INT(&v) = next;\r
        v.svalue = 0;\r
        isetstr(&v);\r
        iret(it, &v);\r
index 13e4e75655339f30c6f038d19f51373f2bc46120..d0cb3f10a0676e6e0896727afded4b0920b03fa7 100644 (file)
@@ -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));
 }