aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/lib/kmem.h3
-rw-r--r--src/lib/kmem.c36
-rw-r--r--src/sys/schedule.c5
-rw-r--r--src/util/status.c2
4 files changed, 43 insertions, 3 deletions
diff --git a/include/lib/kmem.h b/include/lib/kmem.h
index eb3eb28..67751cd 100644
--- a/include/lib/kmem.h
+++ b/include/lib/kmem.h
@@ -5,4 +5,7 @@ void* kmalloc(unsigned int size);
void* kcalloc(unsigned int size);
void kfree(void* ptr);
+void kmemshow32(void* data, unsigned long length);
+void kmemshow(void* data, unsigned long length);
+
#endif
diff --git a/src/lib/kmem.c b/src/lib/kmem.c
index ce2f5fe..931d5e3 100644
--- a/src/lib/kmem.c
+++ b/src/lib/kmem.c
@@ -1,5 +1,6 @@
-#include <lib/kmem.h>
#include <globals.h>
+#include <drivers/uart.h>
+#include <lib/kmem.h>
void* kmalloc(unsigned int size)
{
@@ -53,3 +54,36 @@ void kfree(void* ptr)
}
kmem_lookup[0x1000*exp + lookup_offset] = 0;
}
+
+void kmemshow32(void* data, unsigned long length)
+{
+ unsigned long* ptr = data;
+ for(unsigned long i = 0; i < length; i++) {
+ uart_hex(*ptr);
+ ptr+=1;
+ if (i != length-1)
+ uart_char(' ');
+ }
+ uart_char('\n');
+}
+
+void kmemshow(void* data, unsigned long length)
+{
+ unsigned char* ptr = data;
+ for(unsigned long i = 0; i < length; i++) {
+ char tmp = *ptr>>4;
+ tmp += 0x30;
+ if (tmp > 0x39)
+ tmp += 0x7;
+ uart_char(tmp);
+ tmp = *ptr&0xF;
+ tmp += 0x30;
+ if (tmp > 0x39)
+ tmp += 0x7;
+ uart_char(tmp);
+ ptr+=1;
+ if (i != length-1)
+ uart_char(' ');
+ }
+ uart_char('\n');
+}
diff --git a/src/sys/schedule.c b/src/sys/schedule.c
index 7bc86c3..2764108 100644
--- a/src/sys/schedule.c
+++ b/src/sys/schedule.c
@@ -110,7 +110,7 @@ void uart_scheduler(void)
uart_string("Scheduler Info\n==============\nCurrent\n");
uart_hex((unsigned long)scheduler.rthread);
uart_char(' ');
- //memshow32((void*)scheduler.rthread, 6);
+ kmemshow32((void*)scheduler.rthread, 6);
struct ThreadQueues* tq;
for(int p = 0; p < PRIORITIES; p++) {
uart_string("Priority ");
@@ -131,7 +131,8 @@ void uart_scheduler(void)
while (roffset != trb->woffset) {
uart_hex((unsigned long)trb->queue[roffset]);
uart_char(' ');
- //memshow32((void*)trb->queue[roffset], 6);
+ //kmemshow((void*)trb->queue[roffset], 4*6);
+ kmemshow32((void*)trb->queue[roffset], 6);
roffset++;
roffset %= TQUEUE_MAX;
}
diff --git a/src/util/status.c b/src/util/status.c
index 9044b1a..8837e5d 100644
--- a/src/util/status.c
+++ b/src/util/status.c
@@ -179,4 +179,6 @@ void status(void)
g_Drawer.x = x;
g_Drawer.y = y;
+
+ draw_stacks();
}