main.c 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #include "../lib/kernel/print.h"
  2. #include "debug.h"
  3. #include "init.h"
  4. #include "memory.h"
  5. #include "../thread/thread.h"
  6. #include "interrupt.h"
  7. #include "../device/console.h"
  8. void thread_a_func(void *);
  9. void thread_b_func(void *);
  10. int main(void)
  11. {
  12. put_str("I am kernel\n");
  13. init_all();
  14. // asm volatile("sti"); // 使能中断
  15. // ASSERT(1 == 2);
  16. // void *addr = get_kernel_pages(4);
  17. // put_str("\n get_kernel_page start vaddr is ");
  18. // put_int((uintptr_t)addr);
  19. // put_str("\n");
  20. thread_start("thread_a", 31, thread_a_func, "argA ");
  21. thread_start("thread_b", 8, thread_b_func, "argB ");
  22. intr_enable(); // 打开中断,使时钟中断起作用
  23. // 主线程会一直执行, 直到被中断或被其他线程强制结束
  24. while (1)
  25. {
  26. console_put_str("Main ");
  27. }
  28. return 0;
  29. }
  30. void thread_a_func(void *arg)
  31. {
  32. // 用 void 来表示通用类型,这样就可以传递任意类型的参数
  33. char *para = arg;
  34. while (1)
  35. {
  36. console_put_str(para);
  37. }
  38. }
  39. void thread_b_func(void *arg)
  40. {
  41. // 用 void 来表示通用类型,这样就可以传递任意类型的参数
  42. char *para = arg;
  43. while (1)
  44. {
  45. console_put_str(para);
  46. }
  47. }