![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
问两个简单ucos问题?谢谢!
系统初始化中1:OSTCBTbl[]就表示实际的任务的TCB吗2:ptcb1=&OSTCBTbl[0];//我认为是ptcb1指向第一个TCB的OSTCBStkPtr指针...
系统初始化中
1:OSTCBTbl[]就表示实际的任务的TCB吗
2: ptcb1 = &OSTCBTbl[0]; //我认为是ptcb1指向第一个TCB的OSTCBStkPtr指针
ptcb2 = &OSTCBTbl[1];/我认为是ptcb2指向第二个TCB的OSTCBStkPtr指针
上面的描述对吗?为什么?为什么只用两个指针来指向
for (i = 0; i < (OS_MAX_TASKS + OS_N_SYS_TASKS - 1); i++) {
ptcb1->OSTCBNext = ptcb2;//ptcb1->OSTCBNext 指向ptcb2指向的第二个TCB的OSTCBStkPtr指针,对吗?
ptcb1++; //这句话有什么用?
ptcb2++; //这句话有什么用?
}
ptcb1->OSTCBNext = (OS_TCB *)0;
OSTCBFreeList = &OSTCBTbl[0];//OSTCBFreeList指向第一个TCB的OSTCBStkPtr指针,这样说法对吗?
问题2中的几句话有什么用,为何要这样初始化?谢谢了 展开
1:OSTCBTbl[]就表示实际的任务的TCB吗
2: ptcb1 = &OSTCBTbl[0]; //我认为是ptcb1指向第一个TCB的OSTCBStkPtr指针
ptcb2 = &OSTCBTbl[1];/我认为是ptcb2指向第二个TCB的OSTCBStkPtr指针
上面的描述对吗?为什么?为什么只用两个指针来指向
for (i = 0; i < (OS_MAX_TASKS + OS_N_SYS_TASKS - 1); i++) {
ptcb1->OSTCBNext = ptcb2;//ptcb1->OSTCBNext 指向ptcb2指向的第二个TCB的OSTCBStkPtr指针,对吗?
ptcb1++; //这句话有什么用?
ptcb2++; //这句话有什么用?
}
ptcb1->OSTCBNext = (OS_TCB *)0;
OSTCBFreeList = &OSTCBTbl[0];//OSTCBFreeList指向第一个TCB的OSTCBStkPtr指针,这样说法对吗?
问题2中的几句话有什么用,为何要这样初始化?谢谢了 展开
2个回答
展开全部
问题一:OS_EXT OS_TCB OSTCBTbl[OS_MAX_TASKS + OS_N_SYS_TASKS]; 是一个数组(全局变量);每个数组元素包含一个任务控制块(是结构体);每个任务控制块没被任务占用时,就是空闲控制块,可以被新任务占用,任务控制块被占用时,就储存任务的信息和属性。所以被占用的OSTCBTbl[x]就是实际的任务的TCB。
问题二:你看的这段代码是初始化空闲任务控制块链表用的。每个TCB结构体中有2个指针(os_tcb *OSTCBNext; os_tcb *OSTCBPrev;),这段代码就是让OS_MAX_TASKS + OS_N_SYS_TASKS个任务控制块通过指针串成一个双链表,便于空闲任务控制块的管理。
ptcb1,ptcb2是两个局部变量指针,就是为使任务控制块通过指针串成一个双链表而定义的;
OSTCBFreeList 指向任务控制块链表的第一个TCB。你看一下数据结构中的双链表,就发现这段代码很容易理解。
我是圆木 1025167394
问题二:你看的这段代码是初始化空闲任务控制块链表用的。每个TCB结构体中有2个指针(os_tcb *OSTCBNext; os_tcb *OSTCBPrev;),这段代码就是让OS_MAX_TASKS + OS_N_SYS_TASKS个任务控制块通过指针串成一个双链表,便于空闲任务控制块的管理。
ptcb1,ptcb2是两个局部变量指针,就是为使任务控制块通过指针串成一个双链表而定义的;
OSTCBFreeList 指向任务控制块链表的第一个TCB。你看一下数据结构中的双链表,就发现这段代码很容易理解。
我是圆木 1025167394
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询