--- /dev/null
+
+#include <kern/proc.h>
+#include <drv/timer.h>
+
+/**
+ * Proc scheduling test subthread 1
+ */
+static void NORETURN proc_test_thread1(void)
+{
+ for (;;)
+ {
+ kputs(">task 1\n");
+ timer_delay(50);
+ proc_switch();
+ }
+}
+
+/**
+ * Proc scheduling test subthread 2
+ */
+static void NORETURN proc_test_thread2(void)
+{
+ for (;;)
+ {
+ kputs(">task 2\n");
+ timer_delay(75);
+ proc_switch();
+ }
+}
+
+static cpustack_t proc_test_stack1[CONFIG_KERN_DEFSTACKSIZE/sizeof(cpustack_t)];
+static cpustack_t proc_test_stack2[CONFIG_KERN_DEFSTACKSIZE/sizeof(cpustack_t)];
+
+/**
+ * Proc scheduling test
+ */
+void NORETURN proc_test(void)
+{
+ proc_new(proc_test_thread1, NULL, sizeof(proc_test_stack1), proc_test_stack1);
+ proc_new(proc_test_thread2, NULL, sizeof(proc_test_stack2), proc_test_stack2);
+ kputs("Created tasks\n");
+
+ kputs("stack1:\n");
+ #warning FIXME
+ //kdump(proc_test_stack1+sizeof(proc_test_stack1)-64, 64);
+ kputs("stack2:\n");
+ #warning FIXME
+ //kdump(proc_test_stack2+sizeof(proc_test_stack1)-64, 64);
+
+ for (;;)
+ {
+ kputs(">main task\n");
+ timer_delay(93);
+ proc_switch();
+ }
+
+ ASSERT(false);
+}