📄 os_core.lst
字号:
389
390 E #if 1 > 0
391 typedef struct os_mutex_data {
392 E #if 4 <= 63
393 E INT8U OSEventTbl[((4) / 8 + 1)];
394 INT8U OSEventGrp; /* Group corresponding to tasks waiting for event to occur */
395 #else
396 X INT16U OSEventTbl[OS_EVENT_TBL_SIZE]; /* List of tasks waiting for event to occur */
397 X INT16U OSEventGrp; /* Group corresponding to tasks waiting for event to occur */
398 #endif
399 INT8U OSValue; /* Mutex value (0 = used, 1 = available) */
400 INT8U OSOwnerPrio; /* Mutex owner's task priority or 0xFF if no owner */
401 INT8U OSMutexPIP; /* Priority Inheritance Priority or 0xFF if no owner */
402 } OS_MUTEX_DATA;
403 #endif
404
405 /*
406 *********************************************************************************************************
407 * MESSAGE QUEUE DATA
408 *********************************************************************************************************
409 */
410
411 E #if 1 > 0
412 typedef struct os_q { /* QUEUE CONTROL BLOCK */
413 struct os_q *OSQPtr; /* Link to next queue control block in list of free blocks */
414 void **OSQStart; /* Pointer to start of queue data */
415 void **OSQEnd; /* Pointer to end of queue data */
416 void **OSQIn; /* Pointer to where next message will be inserted in the Q */
417 void **OSQOut; /* Pointer to where next message will be extracted from the Q */
418 INT16U OSQSize; /* Size of queue (maximum number of entries) */
419 INT16U OSQEntries; /* Current number of entries in the queue */
420 } OS_Q;
421
422
423 typedef struct os_q_data {
424 void *OSMsg; /* Pointer to next message to be extracted from queue */
425 INT16U OSNMsgs; /* Number of messages in message queue */
426 INT16U OSQSize; /* Size of message queue */
427 E #if 4 <= 63
428 E INT8U OSEventTbl[((4) / 8 + 1)];
429 INT8U OSEventGrp; /* Group corresponding to tasks waiting for event to occur */
430 #else
431 X INT16U OSEventTbl[OS_EVENT_TBL_SIZE]; /* List of tasks waiting for event to occur */
432 X INT16U OSEventGrp; /* Group corresponding to tasks waiting for event to occur */
433 #endif
434 } OS_Q_DATA;
435 #endif
436
437 /*
438 *********************************************************************************************************
439 * SEMAPHORE DATA
440 *********************************************************************************************************
441 */
442
443 E #if 1 > 0
444 typedef struct os_sem_data {
445 INT16U OSCnt; /* Semaphore count */
446 E #if 4 <= 63
447 E INT8U OSEventTbl[((4) / 8 + 1)];
448 INT8U OSEventGrp; /* Group corresponding to tasks waiting for event to occur */
449 #else
450 X INT16U OSEventTbl[OS_EVENT_TBL_SIZE]; /* List of tasks waiting for event to occur */
451 X INT16U OSEventGrp; /* Group corresponding to tasks waiting for event to occur */
452 #endif
453 } OS_SEM_DATA;
454 #endif
455
456 /*
457 *********************************************************************************************************
458 * TASK STACK DATA
459 *********************************************************************************************************
460 */
461
462 E #if 0 > 0
463 X typedef struct os_stk_data {
464 X INT32U OSFree; /* Number of free bytes on the stack */
465 X INT32U OSUsed; /* Number of bytes used on the stack */
466 X } OS_STK_DATA;
467 #endif
468
469 /*$PAGE*/
470 /*
471 *********************************************************************************************************
472 * TASK CONTROL BLOCK
473 *********************************************************************************************************
474 */
475
476 typedef struct os_tcb {
477 OS_STK *OSTCBStkPtr; /* Pointer to current top of stack */
478
479 E #if 0 > 0
480 X void *OSTCBExtPtr; /* Pointer to user definable data for TCB extension */
481 X OS_STK *OSTCBStkBottom; /* Pointer to bottom of stack */
482 X INT32U OSTCBStkSize; /* Size of task stack (in number of stack elements) */
483 X INT16U OSTCBOpt; /* Task options as passed by OSTaskCreateExt() */
484 X INT16U OSTCBId; /* Task ID (0..65535) */
485 #endif
486
487 struct os_tcb *OSTCBNext; /* Pointer to next TCB in the TCB list */
488 struct os_tcb *OSTCBPrev; /* Pointer to previous TCB in the TCB list */
489
490 E #if (((1 > 0) && (2 > 0)) || (1 > 0) || (1 > 0) || (1 > 0))
491 OS_EVENT *OSTCBEventPtr; /* Pointer to event control block */
492 #endif
493
494 E #if ((1 > 0) && (2 > 0)) || (1 > 0)
495 void *OSTCBMsg; /* Message received from OSMboxPost() or OSQPost() */
496 #endif
497
498 E #if (280u >= 251) && (1 > 0) && (0 > 0)
499 X #if OS_TASK_DEL_EN > 0
500 X OS_FLAG_NODE *OSTCBFlagNode; /* Pointer to event flag node */
501 X #endif
502 X OS_FLAGS OSTCBFlagsRdy; /* Event flags that made task ready to run */
503 #endif
504
505 INT16U OSTCBDly; /* Nbr ticks to delay task or, timeout waiting for event */
506 INT8U OSTCBStat; /* Task status */
507 BOOLEAN OSTCBPendTO; /* Flag indicating PEND timed out (TRUE == timed out) */
508 INT8U OSTCBPrio; /* Task priority (0 == highest) */
509
510 INT8U OSTCBX; /* Bit position in group corresponding to task priority */
511 INT8U OSTCBY; /* Index into ready table corresponding to task priority */
512 E #if 4 <= 63
513 INT8U OSTCBBitX; /* Bit mask to access bit position in ready table */
514 INT8U OSTCBBitY; /* Bit mask to access bit position in ready group */
515 #else
516 X INT16U OSTCBBitX; /* Bit mask to access bit position in ready table */
517 X INT16U OSTCBBitY; /* Bit mask to access bit position in ready group */
518 #endif
519
520 E #if 0 > 0
521 X INT8U OSTCBDelReq; /* Indicates whether a task needs to delete itself */
522 #endif
523
524 E #if 0 > 0
525 X INT32U OSTCBCtxSwCtr; /* Number of time the task was switched in */
526 X INT32U OSTCBCyclesTot; /* Total number of clock cycles the task has been running */
527 X INT32U OSTCBCyclesStart; /* Snapshot of cycle counter at start of task resumption */
528 X OS_STK *OSTCBStkBase; /* Pointer to the beginning of the task stack */
529 X INT32U OSTCBStkUsed; /* Number of bytes used from the stack */
530 #endif
531
532 E #if 0 > 1
533 X INT8U OSTCBTaskName[OS_TASK_NAME_SIZE];
534 #endif
535 } OS_TCB;
536
537 /*$PAGE*/
538 /*
539 *********************************************************************************************************
540 * GLOBAL VARIABLES
541 *********************************************************************************************************
542 */
543
544 E INT32U OSCtxSwCtr;
545
546 E #if (((1 > 0) && (2 > 0)) || (1 > 0) || (1 > 0) || (1 > 0)) && (5 > 0)
547 E OS_EVENT *OSEventFreeList;
548 E OS_EVENT OSEventTbl[5];
549 #endif
550
551 E #if (280u >= 251) && (1 > 0) && (0 > 0)
552 X OS_EXT OS_FLAG_GRP OSFlagTbl[OS_MAX_FLAGS]; /* Table containing event flag groups */
553 X OS_EXT OS_FLAG_GRP *OSFlagFreeList; /* Pointer to free list of event flag groups */
554 #endif
555
556 E #if 1 > 0
557 E INT8S OSCPUUsage;
558 E INT32U OSIdleCtrMax;
559 E INT32U OSIdleCtrRun;
560 E BOOLEAN OSStatRdy;
561 E OS_STK OSTaskStatStk[50];
562 #endif
563
564 E INT8U OSIntNesting;
565
566 E INT8U OSLockNesting;
567
568 E INT8U OSPrioCur;
569 E INT8U OSPrioHighRdy;
570
571 E #if 4 <= 63
572 E INT8U OSRdyGrp;
573 E INT8U OSRdyTbl[((4) / 8 + 1)];
574 #else
575 X OS_EXT INT16U OSRdyGrp; /* Ready list group */
576 X OS_EXT INT16U OSRdyTbl[OS_RDY_TBL_SIZE]; /* Table of tasks which are ready to run */
577 #endif
578
579 E BOOLEAN OSRunning;
580
581 E INT8U OSTaskCtr;
582
583 E volatile INT32U OSIdleCtr;
584
585 E OS_STK OSTaskIdleStk[25];
586
587
588 E OS_TCB *OSTCBCur;
589 E OS_TCB *OSTCBFreeList;
590 E OS_TCB *OSTCBHighRdy;
591 E OS_TCB *OSTCBList;
592 E OS_TCB *OSTCBPrioTbl[4 + 1];
593 E OS_TCB OSTCBTbl[3 + 2u];
594
595 E #if 0 > 0
596 X OS_EXT INT8U OSTickStepState; /* Indicates the state of the tick step feature */
597 #endif
598
599 E #if (1 > 0) && (0 > 0)
600 X OS_EXT OS_MEM *OSMemFreeList; /* Pointer to free list of memory partitions */
601 X OS_EXT OS_MEM OSMemTbl[OS_MAX_MEM_PART];/* Storage for memory partition manager */
602 #endif
603
604 E #if (1 > 0) && (2 > 0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -