1. Scheduler status:
全局标志: static volatile BaseType_t xSchedulerRunning = pdFALSE;
取值:
#define taskSCHEDULER_SUSPENDED ( ( BaseType_t ) 0 ) // 挂起
#define taskSCHEDULER_NOT_STARTED ( ( BaseType_t ) 1 ) // 未开启
#define taskSCHEDULER_RUNNING ( ( BaseType_t ) 2 ) // 运行
2. vTaskStartScheduler
- 创建Idle task, proprity 最低
- 创建 Timer task, "Tmr Svc"
- 关闭中断,Risc-V #define portDISABLE_INTERRUPTS() __asm volatile( "csrc mstatus, 8" )
- 设置下一任务ready block 时间, xNextTaskUnblockTime = portMAX_DELAY = 0xffffffffUL
- 设置scheduler 状态为t1, taskSCHEDULER_NOT_STARTED
- 设置系统节拍数xTickCount = 0
- 开启调度器, xPortStartScheduler
3. xPortStartScheduler (portable)
- 检查是否single vector mode,否则assert
- 开启外部中断,__asm volatile( "csrs mie, %0" :: "r"(0x800) );
- 开启第一个任务,xPortStartFirstTask