OSSTART 源代码分析
时间: 2024-02-10 14:16:41 浏览: 153
OSStart是UCOS-II中的一个函数,其作用是启动操作系统并开始任务调度。其源代码如下:
```c
void OSStart(void)
{
#if OS_CRITICAL_METHOD == 3u /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0u;
#endif
OS_ENTER_CRITICAL(); /* Disable interrupts */
#if OS_TASK_CREATE_EXT_EN > 0u
while (OSTaskCreateExt((void (*)(void *))OS_IdleTask, /* Create the Idle Task */
(void *)0,
(OS_STK *)&OSIdleTaskStk[OS_IDLE_TASK_STK_SIZE - 1u],
(INT8U )OS_IDLE_PRIO,
(INT16U )OS_IDLE_PRIO,
(OS_STK *)&OSIdleTaskStk[0u],
(INT32U )OS_IDLE_TASK_STK_SIZE,
(void *)0,
(INT16U )(OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR | OS_TASK_OPT_IDLE)) != OS_NO_ERR) {
;
}
#else
OSTaskCreate((void (*)(void *))OS_IdleTask, /* Create the Idle Task */
(void *)0,
(OS_STK *)&OSIdleTaskStk[OS_IDLE_TASK_STK_SIZE - 1u],
(INT8U )OS_IDLE_PRIO);
#endif
#if OS_SCHED_LOCK_EN
OSSchedLockTime = 0uL; /* Initialize locking time variable */
#endif
OSRunning = OS_TRUE; /* OS is running */
OS_EXIT_CRITICAL(); /* Enable interrupts */
OS_Sched(); /* Start multitasking (i.e. give control to the scheduler) */
}
```
该函数的主要作用是启动操作系统并开始任务调度,其中包括以下几个步骤:
1.通过宏定义判断是否需要分配存储CPU状态寄存器的空间。
2.禁止中断,进入临界区。
3.创建空闲任务,并分配其优先级。
4.初始化任务锁定时间变量。
5.将OSRunning设置为OS_TRUE,表示操作系统已经在运行。
6.退出临界区,允许中断。
7.调用OS_Sched函数开始任务调度。
需要注意的是,该函数在调用OS_Sched函数之前,必须先创建空闲任务,否则系统无法进行任务调度。同时,该函数还会关闭中断以确保系统的可靠性和实时性。
阅读全文