main.c 1.2 KB

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