diff options
Diffstat (limited to 'src/user/app/test/main.c')
-rw-r--r-- | src/user/app/test/main.c | 48 |
1 files changed, 29 insertions, 19 deletions
diff --git a/src/user/app/test/main.c b/src/user/app/test/main.c index 2c42cf8..d9b6332 100644 --- a/src/user/app/test/main.c +++ b/src/user/app/test/main.c @@ -1,14 +1,34 @@ #include <tce/syscall.h> #include <stdio.h> #include <stdlib.h> +#include <sched.h> int threads = 1; +mutex_t d_mutex = MUTEX_UNLOCKED; +int d_pos = 0; +int vgatxt = -1; + +void display_it(char k) { + mutex_lock(&d_mutex); + + // just display some stuff on /.dev/vgatxt + if (vgatxt == -1) { + vgatxt = open("/.dev/vgatxt", FM_READ | FM_WRITE); + } + uint16_t c = k | (4 << 8); + write(vgatxt, 2 * d_pos, 2, (char*)&c); + + d_pos++; + + mutex_unlock(&d_mutex); +} + void thread_cascade(void* d) { int n = (int)d; char *v = malloc(2048); - if (!v) printk("!"); + if (!v) display_it('!'); if (d == 0) { //printk("{#} 0 cascade element started => end\n"); @@ -16,21 +36,21 @@ void thread_cascade(void* d) { } else { if (n < 0) { //printk("{#} - cascade element started\n"); - printk("-"); + display_it('-'); n = 0 - n; } else { //printk("{#} + cascade element started\n"); - printk("+"); + display_it('+'); } //printk("{#} FORK + ...\n"); - printk(">"); + display_it('>'); threads += 2; thread_new(thread_cascade, (void*)(n - 1)); //printk("{#} FORK - ...\n"); - printk("<"); + display_it('<'); thread_new(thread_cascade, (void*)(1 - n)); //printk("{#} Thread cascade element finished.\n"); - printk("."); + display_it('.'); } free(v); @@ -40,25 +60,15 @@ void thread_cascade(void* d) { void useless_thread(void* d) { while(1) { - printk("~"); + display_it('~'); schedule(); } } int main(int argc, char** args) { - char**a; - if (args != 0) { - printk("(test) args"); - for (a = args; *a != 0; a++) { - printk(" - "); - printk(*a); - } - printk("\n"); - } - - printk("(test) Creating thread cascade (total 2**6 = 64 threads)\n"); + printk("(test) Creating thread cascade (total 2**7 = 128 threads)\n"); thread_new(useless_thread, 0); - thread_new(thread_cascade, (void*)6); + thread_new(thread_cascade, (void*)7); while (1) { schedule(); |