当前位置: 技术问答>linux和unix
ucos.c相关问题
来源: 互联网 发布时间:2016-08-07
本文导语: /* ************************************************************ * UCOS.C * KERNEL ************************************************************ */ #include "INCLUDES.H" #ifdef TURBOC...
/*
************************************************************
* UCOS.C
* KERNEL
************************************************************
*/
#include "INCLUDES.H"
#ifdef TURBOC
#pragma inline
#endif
/*
************************************************************
* TABLES
************************************************************
*/
UBYTE const OSMapTbl[] = {0x01, 0x02, 0x04, 0x08,
0x10, 0x20, 0x40, 0x80};
UBYTE const OSUnMapTbl[] = {
0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0};
/*
************************************************************
* GLOBAL AND LOCAL VARIABLES
************************************************************
*/
OS_TCB *OSTCBCur;
OS_TCB *OSTCBHighRdy;
OS_TCB *OSTCBList;
OS_TCB *OSTCBPrioTbl[64];
BOOLEAN OSRunning;
UBYTE OSRdyGrp;
UBYTE OSRdyTbl[8];
UBYTE OSLockNesting;
UBYTE OSIntNesting;
OS_TCB *OSTCBFreeList;
/*
************************************************************
* LOCAL FUNCTION PROTOTYPES
************************************************************
*/
static void far OSTaskIdle(void *data);
/*
************************************************************
* uCOS INITIALIZATION
************************************************************
*/
void OSInit(void *idle_task_stk, UBYTE maxtasks)
{
UBYTE i;
OSTCBCur = (OS_TCB *)0;
OSTCBList = (OS_TCB *)0;
OSIntNesting = 0;
OSLockNesting = 0;
OSRunning = 0;
OSRdyGrp = 0;
for (i = 0; i OSTCBDly == 0) {
p = ptcb->OSTCBPrio;
OSRdyGrp |= OSMapTbl[p >> 3];
OSRdyTbl[p >> 3] |= OSMapTbl[p & 0x07];
}
}
OS_EXIT_CRITICAL();
ptcb = ptcb->OSTCBNext;
}
}
/*
************************************************************
* GET TCB FROM FREE TCB LIST
************************************************************
*/
OS_TCB *OSTCBGetFree(void)
{
OS_TCB *ptcb;
OS_ENTER_CRITICAL();
ptcb = OSTCBFreeList;
OSTCBFreeList = ptcb->OSTCBNext;
OS_EXIT_CRITICAL();
return (ptcb);
}
有没有相关人士帮我分析一下是什么意思。我实在是看不太明白 谢谢大家了。
************************************************************
* UCOS.C
* KERNEL
************************************************************
*/
#include "INCLUDES.H"
#ifdef TURBOC
#pragma inline
#endif
/*
************************************************************
* TABLES
************************************************************
*/
UBYTE const OSMapTbl[] = {0x01, 0x02, 0x04, 0x08,
0x10, 0x20, 0x40, 0x80};
UBYTE const OSUnMapTbl[] = {
0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0};
/*
************************************************************
* GLOBAL AND LOCAL VARIABLES
************************************************************
*/
OS_TCB *OSTCBCur;
OS_TCB *OSTCBHighRdy;
OS_TCB *OSTCBList;
OS_TCB *OSTCBPrioTbl[64];
BOOLEAN OSRunning;
UBYTE OSRdyGrp;
UBYTE OSRdyTbl[8];
UBYTE OSLockNesting;
UBYTE OSIntNesting;
OS_TCB *OSTCBFreeList;
/*
************************************************************
* LOCAL FUNCTION PROTOTYPES
************************************************************
*/
static void far OSTaskIdle(void *data);
/*
************************************************************
* uCOS INITIALIZATION
************************************************************
*/
void OSInit(void *idle_task_stk, UBYTE maxtasks)
{
UBYTE i;
OSTCBCur = (OS_TCB *)0;
OSTCBList = (OS_TCB *)0;
OSIntNesting = 0;
OSLockNesting = 0;
OSRunning = 0;
OSRdyGrp = 0;
for (i = 0; i OSTCBDly == 0) {
p = ptcb->OSTCBPrio;
OSRdyGrp |= OSMapTbl[p >> 3];
OSRdyTbl[p >> 3] |= OSMapTbl[p & 0x07];
}
}
OS_EXIT_CRITICAL();
ptcb = ptcb->OSTCBNext;
}
}
/*
************************************************************
* GET TCB FROM FREE TCB LIST
************************************************************
*/
OS_TCB *OSTCBGetFree(void)
{
OS_TCB *ptcb;
OS_ENTER_CRITICAL();
ptcb = OSTCBFreeList;
OSTCBFreeList = ptcb->OSTCBNext;
OS_EXIT_CRITICAL();
return (ptcb);
}
有没有相关人士帮我分析一下是什么意思。我实在是看不太明白 谢谢大家了。
|
很简单的,那个表是用来快速找出当前最高优先级的就绪任务。
|
注释太少,也不知道程序是干啥用的,没有头文件,很多类型都不知道是什么。无从下手。
|
建议楼主邵贝贝那本书,讲的很好。
没有时间就找本薄的ucos2书籍看看。
没有时间就找本薄的ucos2书籍看看。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。