uC/OS-II源码分析(总体思路一)(
来源:互联网 发布:雪梨开的淘宝店叫什么? 编辑:程序博客网 时间:2024/05/16 08:42
首先从main函数开始,下面是uC/OS-II main函数的大致流程:
main(){
}
首先是调用OSInit进行初始化,然后使用TaskCreate创建几个进程/Task,最后调用OSStart,操作系统就开始运行了。
OSInit
最先看看OSInit完成哪些初始化:
void
{
#if OS_VERSION >= 204
#endif
#if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
#endif
#if (OS_MEM_EN > 0) && (OS_MAX_MEM_PART > 0)
#endif
#if (OS_Q_EN > 0) && (OS_MAX_QS > 0)
#endif
#if OS_TASK_STAT_EN > 0
#endif
#if OS_VERSION >= 204
#endif
#if OS_VERSION >= 270 && OS_DEBUG_EN > 0
#endif
}
OS_InitMisc()完成的是一些其其他他的变量的初始化:
其中包括:中断嵌套标志OSIntNesting,调度锁定标志OSLockNesting,OS标志OSRunning等。OSRunning在这里设置为FALSE,在后面OSStartHighRdy中会被设置为TRUE表示OS开始工作。
OS_InitRdyList()初始化就绪Task列表:
static
{
}
首先将OSRdyTbl[]数组中全部初始化0,同时将OSPrioCur/OSTCBCur初始化为0,OSPrioHighRdy/OSTCBHighRdy也初始化为0,这几个变量将在第一个OSSchedule中被赋予正确的值。
OS_InitTCBList()这个函数看名称我们就知道是初始化TCB列表。
static
{
#if OS_TASK_NAME_SIZE > 1
#endif
#if OS_TASK_NAME_SIZE > 1
#endif
}
这里完成的工作很简单,首先把整个数组使用OSTCBNext指针连接成链表链起来,然后将OSTCBList初始化为0,也就是还没有TCB,因为还没有Task产生,OSTCBFreeList指向OSTCBTbl[]数组的第一个表示所有TCB都处于Free状态。
OS_InitEventList()初始化Event列表。
static
{
#if OS_EVENT_EN && (OS_MAX_EVENTS > 0)
#if (OS_MAX_EVENTS > 1)
#if OS_EVENT_NAME_SIZE > 1
#endif
#if OS_EVENT_NAME_SIZE > 1
#endif
#else
#if OS_EVENT_NAME_SIZE > 1
#endif
#endif
#endif
}
同样将EventTbl[]数组中的OSEventType都初始化为OS_EVENT_TYPE_UNUSED。
OS_InitTaskIdle(),中间我们跳过其他的如Mem等的初始化,看看Idle Task的初始化。
其实Idle Task的初始化很简单就是调用OSTaskCrete系列的函数创建一个Task, OSTaskCreate我们后面再做进一步分析。
初始化State Task也是类似调用OSTaskCreate系列函数创建Stat Task。这里只是创建了该Task的各个结构还没有真正运行该Task,直到OSStart中才依据优先级调度运行。
OK,到这里OSInit算高一个段落了,我们接着回到main往下看。
- uC/OS-II源码分析(总体思路一)
- uC/OS-II源码分析(总体思路一)(
- uC/OS-II源码分析(总体思路一)
- uC/OS-II源码分析(总体思路一)
- uC/OS-II源码分析(总体思路一)
- uC/OS-II源码分析(总体思路 二)
- uC/OS-II源码分析(总体思路 三)
- uC/OS-II源码分析(总体思路 二)
- uC/OS-II源码分析(总体思路 三)
- uC/OS-II源码分析(总体思路 二)
- uC/OS-II源码分析(总体思路 三)
- uC/OS-II源码分析(总体思路 二)
- uC/OS-II源码分析(一)
- uC/OS-II源码分析(一)
- uC/OS-II源码分析(一)
- uC/OS-II源码分析(一)
- uC/OS-II源码分析
- uC/OS-II源码分析
- C/C++笔记(1)
- ARM汇编中lr(r14)寄存器的作用
- Android 各种杀脑细胞的问题集合
- ARM7寄存器分布图
- cmd命令提示符打不开,一闪而过
- uC/OS-II源码分析(总体思路一)(
- Oracle数据库解锁
- [WAF]apache和modsecurity的安装
- uC/OS-II源码分析(总体思路 二)
- uC/OS-II源码分析(总体思路 三)
- 数学之美 一 统计语言模型
- Spring 注入不成功的问题
- adb使用简介
- 年前小结-2012-01-20