ucosIII自学笔记__任务创建与切换_0

写在前面:任务调度切换时OSTCBHighRdyPtr值变化;中断处理函数中OSTCBCurPtr值变化

任务的创建过程:main()中先进行

1、OSInit(&err);//OS_CORE.C   具体代码如下,进行任务控制块当前指针、就绪指针初始化。里面涉及到就绪列表初始化函数OS_RdyListInit


1.1、OS_RdyListInit()就绪列表初始化函数,具体代码


2、任务创建OSTaskCreate

创建两个任务实现高低电平转换



2.1、OSTaskCreate()函数定义在os_task.c中 主要实现任务控制块的初始化 ,本函数中调用OSTaskStkInit().

2.1.1、OSTaskStkInit()任务堆栈初始化函数 在os_cpu_c.c中 具体代码如下 俺暂时看不懂,暂且搁置不管


自此任务已经创建好了

3、将任务加到就绪列表中


4、启动操作系统。刚开始启动时 优先级最高的任务控制块为任务1,调用OSStartHighRdy();//在os_cpu_a.s 函数



4.1、OSStartHighRdy()启动高优先级任务 任务不会返回 这里的汇编代码看不懂。。。反正软件仿真结果就是执行完这段代码接着执行OS_CPU_PendSVHandler_nosave ,在这段代码里OSTCBCurPtr由0变成任务1,接着执行任务1函数task1()


4.1、执行任务1,任务1结尾处进行任务调度切换OSSched();执行过程为,如果当前任务指针为任务1 ,就将高优先级任务指针变为任务2,反之亦如此。并进行中断触发OS_TASK_SW();//触发中断,为一个宏.注意此时OSTCBHighRdyPtr值变化



4.1.1OS_TASK_SW();之后就执行中断函数os_cpu_a.s中。注意此时在79行OSTCBCurPtr值变化


之后就一直切换一直切换任务。

至此第一个任务就完成了。

________热爱生活,享受生活________

猜你喜欢

转载自blog.csdn.net/u010743406/article/details/80324378