📄 ucos_ii.i
字号:
#line 29 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/includes.h"
#line 1 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/uCOS_II.H"
#line 15 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/uCOS_II.H"
#line 21 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/uCOS_II.H"
#line 77 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/uCOS_II.H"
#line 128 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/uCOS_II.H"
typedef struct {
void *OSEventPtr;
INT8U OSEventTbl[((12) / 8 + 1)];
INT16U OSEventCnt;
INT8U OSEventType;
INT8U OSEventGrp;
} OS_EVENT;
#line 145 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/uCOS_II.H"
#line 159 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/uCOS_II.H"
#line 186 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/uCOS_II.H"
#line 202 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/uCOS_II.H"
typedef struct {
INT16U OSCnt;
INT8U OSEventTbl[((12) / 8 + 1)];
INT8U OSEventGrp;
} OS_SEM_DATA;
#line 216 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/uCOS_II.H"
#line 230 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/uCOS_II.H"
typedef struct os_tcb {
OS_STK *OSTCBStkPtr;
struct os_tcb *OSTCBNext;
struct os_tcb *OSTCBPrev;
OS_EVENT *OSTCBEventPtr;
INT16U OSTCBDly;
INT8U OSTCBStat;
INT8U OSTCBPrio;
INT8U OSTCBX;
INT8U OSTCBY;
INT8U OSTCBBitX;
INT8U OSTCBBitY;
} OS_TCB;
#line 273 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/uCOS_II.H"
INT32U OSCtxSwCtr;
OS_EVENT *OSEventFreeList;
OS_EVENT OSEventTbl[2];
INT32U OSIdleCtr;
INT8S OSCPUUsage;
INT32U OSIdleCtrMax;
INT32U OSIdleCtrRun;
BOOLEAN OSStatRdy;
INT8U OSIntNesting;
INT8U OSLockNesting;
INT8U OSPrioCur;
INT8U OSPrioHighRdy;
INT8U OSRdyGrp;
INT8U OSRdyTbl[((12) / 8 + 1)];
BOOLEAN OSRunning;
INT8U OSTaskCtr;
OS_TCB *OSTCBCur;
OS_TCB *OSTCBFreeList;
OS_TCB *OSTCBHighRdy;
OS_TCB *OSTCBList;
OS_TCB *OSTCBPrioTbl[12 + 1];
INT32U OSTime;
extern INT8U const OSMapTbl[];
extern INT8U const OSUnMapTbl[];
#line 325 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/uCOS_II.H"
#line 331 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/uCOS_II.H"
#line 343 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/uCOS_II.H"
#line 354 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/uCOS_II.H"
#line 369 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/uCOS_II.H"
INT16U OSSemAccept(OS_EVENT *pevent);
OS_EVENT *OSSemCreate(INT16U value);
void OSSemPend(OS_EVENT *pevent, INT16U timeout, INT8U *err);
INT8U OSSemPost(OS_EVENT *pevent);
INT8U OSSemQuery(OS_EVENT *pevent, OS_SEM_DATA *pdata);
#line 381 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/uCOS_II.H"
INT8U OSTaskCreate(void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio);
INT8U OSTaskQuery(INT8U prio, OS_TCB *pdata);
#line 420 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/uCOS_II.H"
void OSTimeDly(INT16U ticks);
INT8U OSTimeDlyHMSM(INT8U hours, INT8U minutes, INT8U seconds, INT16U milli);
INT8U OSTimeDlyResume(INT8U prio);
INT32U OSTimeGet(void);
void OSTimeSet(INT32U ticks);
void OSTimeTick(void);
#line 432 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/uCOS_II.H"
void OSInit(void);
void OSIntEnter(void);
void OSIntExit(void);
void OSSchedLock(void);
void OSSchedUnlock(void);
void OSStart(void);
void OSStatInit(void);
INT16U OSVersion(void);
#line 454 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/uCOS_II.H"
void OSEventTaskRdy(OS_EVENT *pevent, void *msg, INT8U msk);
void OSEventTaskWait(OS_EVENT *pevent);
void OSEventTO(OS_EVENT *pevent);
void OSEventWaitListInit(OS_EVENT *pevent);
void OSSched(void);
void OSTaskIdle(void *data);
void OSTaskStat(void *data);
INT8U OSTCBInit(INT8U prio, OS_STK *ptos, OS_STK *pbos, INT16U id, INT16U stk_size, void *pext, INT16U opt);
#line 487 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/uCOS_II.H"
void OSCtxSw(void);
void OSIntCtxSw(void);
void OSStartHighRdy(void);
void OSTaskCreateHook(OS_TCB *ptcb);
void OSTaskDelHook(OS_TCB *ptcb);
void OSTaskStatHook(void);
void *OSTaskStkInit(void (*task)(void *pd), void *pdata, void *ptos, INT16U opt);
void OSTaskSwHook(void);
void OSTickISR(void);
void OSTimeTickHook(void);
#line 30 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/includes.h"
#line 18 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l\UCOS_II.C"
#line 1 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_core.c"
#line 16 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_core.c"
#line 27 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_core.c"
static INT8U OSIntExitY;
static OS_STK OSTaskIdleStk[512];
static OS_STK OSTaskStatStk[512];
static OS_TCB OSTCBTbl[11 + 2];
#line 47 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_core.c"
INT8U const OSMapTbl[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
#line 58 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_core.c"
INT8U 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
};
#line 100 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_core.c"
void OSEventTaskRdy (OS_EVENT *pevent, void *msg, INT8U msk)
{
OS_TCB *ptcb;
INT8U x;
INT8U y;
INT8U bitx;
INT8U bity;
INT8U prio;
y = OSUnMapTbl[pevent->OSEventGrp];
bity = OSMapTbl[y];
x = OSUnMapTbl[pevent->OSEventTbl[y]];
bitx = OSMapTbl[x];
prio = (INT8U)((y << 3) + x);
if ((pevent->OSEventTbl[y] &= ~bitx) == 0) {
pevent->OSEventGrp &= ~bity;
}
ptcb = OSTCBPrioTbl[prio];
ptcb->OSTCBDly = 0;
ptcb->OSTCBEventPtr = (OS_EVENT *)0;
msg = msg;
ptcb->OSTCBStat &= ~msk;
if (ptcb->OSTCBStat == 0x00) {
OSRdyGrp |= bity;
OSRdyTbl[y] |= bitx;
}
}
#line 149 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_core.c"
void OSEventTaskWait (OS_EVENT *pevent)
{
OSTCBCur->OSTCBEventPtr = pevent;
if ((OSRdyTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0) {
OSRdyGrp &= ~OSTCBCur->OSTCBBitY;
}
pevent->OSEventTbl[OSTCBCur->OSTCBY] |= OSTCBCur->OSTCBBitX;
pevent->OSEventGrp |= OSTCBCur->OSTCBBitY;
}
#line 175 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_core.c"
void OSEventTO (OS_EVENT *pevent)
{
if ((pevent->OSEventTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0) {
pevent->OSEventGrp &= ~OSTCBCur->OSTCBBitY;
}
OSTCBCur->OSTCBStat = 0x00;
OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0;
}
#line 199 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_core.c"
void OSEventWaitListInit (OS_EVENT *pevent)
{
INT8U i;
pevent->OSEventGrp = 0x00;
for (i = 0; i <((12) / 8 + 1); i++) {
pevent->OSEventTbl[i] = 0x00;
}
}
#line 224 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_core.c"
void OSInit (void)
{
INT16U i;
OSTime = 0L;
OSIntNesting = 0;
OSLockNesting = 0;
OSTaskCtr = 0;
OSRunning = 0;
OSIdleCtr = 0L;
OSCtxSwCtr = 0;
OSRdyGrp = 0;
for (i = 0; i <((12) / 8 + 1); i++) {
OSRdyTbl[i] = 0;
}
OSPrioCur = 0;
OSPrioHighRdy = 0;
OSTCBHighRdy = (OS_TCB *)0;
OSTCBCur = (OS_TCB *)0;
OSTCBList = (OS_TCB *)0;
for (i = 0; i < (12 + 1); i++) {
OSTCBPrioTbl[i] = (OS_TCB *)0;
}
for (i = 0; i < (11 + 2 - 1); i++) {
OSTCBTbl[i].OSTCBNext = &OSTCBTbl[i + 1];
}
OSTCBTbl[11 + 2 - 1].OSTCBNext = (OS_TCB *)0;
OSTCBFreeList = &OSTCBTbl[0];
for (i = 0; i < (2 - 1); i++) {
OSEventTbl[i].OSEventPtr = (OS_EVENT *)&OSEventTbl[i + 1];
}
OSEventTbl[2 - 1].OSEventPtr = (OS_EVENT *)0;
OSEventFreeList = &OSEventTbl[0];
OSTaskCreate(OSTaskIdle, (void *)0, &OSTaskIdleStk[512 - 1],(12));
OSTaskCreate(OSTaskStat,
(void *)0,
&OSTaskStatStk[512 - 1],
(12 - 1));
}
#line 370 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_core.c"
void OSIntEnter (void)
{
asm {PUSHF; CLI};
OSIntNesting++;
asm POPF;
}
#line 396 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_core.c"
void OSIntExit (void)
{
asm {PUSHF; CLI};
if ((--OSIntNesting | OSLockNesting) == 0) {
OSIntExitY = OSUnMapTbl[OSRdyGrp];
OSPrioHighRdy = (INT8U)((OSIntExitY << 3) + OSUnMapTbl[OSRdyTbl[OSIntExitY]]);
if (OSPrioHighRdy != OSPrioCur) {
OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];
OSCtxSwCtr++;
OSIntCtxSw();
}
}
asm POPF;
}
#line 428 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_core.c"
void OSSched (void)
{
INT8U y;
asm {PUSHF; CLI};
if ((OSLockNesting | OSIntNesting) == 0) {
y = OSUnMapTbl[OSRdyGrp];
OSPrioHighRdy = (INT8U)((y << 3) + OSUnMapTbl[OSRdyTbl[y]]);
if (OSPrioHighRdy != OSPrioCur) {
OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];
OSCtxSwCtr++;
asm INT 0x80;
}
}
asm POPF;
}
#line 462 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_core.c"
void OSSchedLock (void)
{
if (OSRunning == 1) {
asm {PUSHF; CLI};
OSLockNesting++;
asm POPF;
}
}
#line 486 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_core.c"
void OSSchedUnlock (void)
{
if (OSRunning == 1) {
asm {PUSHF; CLI};
if (OSLockNesting > 0) {
OSLockNesting--;
if ((OSLockNesting | OSIntNesting) == 0) {
asm POPF;
OSSched();
} else {
asm POPF;
}
} else {
asm POPF;
}
}
}
#line 522 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_core.c"
void OSStart (void)
{
INT8U y;
INT8U x;
if (OSRunning == 0) {
y = OSUnMapTbl[OSRdyGrp];
x = OSUnMapTbl[OSRdyTbl[y]];
OSPrioHighRdy = (INT8U)((y << 3) + x);
OSPrioCur = OSPrioHighRdy;
OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];
OSTCBCur = OSTCBHighRdy;
OSStartHighRdy();
}
}
#line 559 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_core.c"
void OSStatInit (void)
{
OSTimeDly(2);
asm {PUSHF; CLI};
OSIdleCtr = 0L;
asm POPF;
OSTimeDly(200);
asm {PUSHF; CLI};
OSIdleCtrMax = OSIdleCtr;
OSStatRdy = 1;
asm POPF;
}
#line 587 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_core.c"
void OSTaskIdle (void *pdata)
{
pdata = pdata;
for (;;) {
asm {PUSHF; CLI};
OSIdleCtr++;
asm POPF;
}
}
#line 623 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_core.c"
void OSTaskStat (void *pdata)
{
INT32U run;
INT8S usage;
pdata = pdata;
while (OSStatRdy == 0) {
OSTimeDly(2 * 200);
}
for (;;) {
asm {PUSHF; CLI};
OSIdleCtrRun = OSIdleCtr;
run = OSIdleCtr;
OSIdleCtr = 0L;
asm POPF;
if (OSIdleCtrMax > 0L) {
usage = (INT8S)(100L - 100L * run / OSIdleCtrMax);
if (usage > 100) {
OSCPUUsage = 100;
} else if (usage < 0) {
OSCPUUsage = 0;
} else {
OSCPUUsage = usage;
}
} else {
OSCPUUsage = 0;
}
OSTaskStatHook();
OSTimeDly(200);
}
}
#line 701 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_core.c"
INT8U OSTCBInit (INT8U prio, OS_STK *ptos, OS_STK *pbos, INT16U id, INT16U stk_size, void *pext, INT16U opt)
{
OS_TCB *ptcb;
asm {PUSHF; CLI};
ptcb = OSTCBFreeList;
if (ptcb != (OS_TCB *)0) {
OSTCBFreeList = ptcb->OSTCBNext;
asm POPF;
ptcb->OSTCBStkPtr = ptos;
ptcb->OSTCBPrio = (INT8U)prio;
ptcb->OSTCBStat = 0x00;
ptcb->OSTCBDly = 0;
pext = pext;
stk_size = stk_size;
pbos = pbos;
opt = opt;
id = id;
ptcb->OSTCBY = prio >> 3;
ptcb->OSTCBBitY = OSMapTbl[ptcb->OSTCBY];
ptcb->OSTCBX = prio & 0x07;
ptcb->OSTCBBitX = OSMapTbl[ptcb->OSTCBX];
ptcb->OSTCBEventPtr = (OS_EVENT *)0;
asm {PUSHF; CLI};
OSTCBPrioTbl[prio] = ptcb;
ptcb->OSTCBNext = OSTCBList;
ptcb->OSTCBPrev = (OS_TCB *)0;
if (OSTCBList != (OS_TCB *)0) {
OSTCBList->OSTCBPrev = ptcb;
}
OSTCBList = ptcb;
OSRdyGrp |= ptcb->OSTCBBitY;
OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
asm POPF;
return (0);
} else {
asm POPF;
return (70);
}
}
#line 779 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_core.c"
void OSTimeTick (void)
{
OS_TCB *ptcb;
OSTimeTickHook();
ptcb = OSTCBList;
while (ptcb->OSTCBPrio !=(12)) {
asm {PUSHF; CLI};
if (ptcb->OSTCBDly != 0) {
if (--ptcb->OSTCBDly == 0) {
if (!(ptcb->OSTCBStat & 0x08)) {
OSRdyGrp |= ptcb->OSTCBBitY;
OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
} else {
ptcb->OSTCBDly = 1;
}
}
}
ptcb = ptcb->OSTCBNext;
asm POPF;
}
asm {PUSHF; CLI};
OSTime++;
asm POPF;
}
#line 820 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_core.c"
INT16U OSVersion (void)
{
return (200);
}
#line 22 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l\UCOS_II.C"
#line 1 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_mbox.c"
#line 16 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_mbox.c"
#line 36 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_mbox.c"
#line 70 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_mbox.c"
#line 117 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_mbox.c"
#line 183 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_mbox.c"
#line 223 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_mbox.c"
#line 23 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l\UCOS_II.C"
#line 1 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_mem.c"
#line 16 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_mem.c"
#line 27 "D:\robocon\技术资料\ucos\Embedded\ucosii\samples\ex1l/os_mem.c"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -