📄 os_core.s43
字号:
; 627. pevent1->OSEventPtr = pevent2;
MOV R13,4(R14)
; 628. pevent1++;
ADD #8,R14
; 629. pevent2++;
ADD #8,R13
ADD #1,R12
JMP (?0139)
?0138:
; 630. }
; 631. pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;
; 632. pevent1->OSEventPtr = (OS_EVENT *)0;
MOV #0,4(R14)
; 633. OSEventFreeList = &OSEventTbl[0];
MOV #OSEventTbl,&OSEventFreeList
; 634. #else
; 635. OSEventFreeList = &OSEventTbl[0]; /* Only have ONE event control block */
; 636. OSEventFreeList->OSEventType = OS_EVENT_TYPE_UNUSED;
; 637. OSEventFreeList->OSEventPtr = (OS_EVENT *)0;
; 638. #endif
; 639. #endif
; 640. }
RET
OS_InitMisc:
; 641. /*$PAGE*/
; 642. /*
; 643. *********************************************************************************************************
; 644. * INITIALIZATION
; 645. * INITIALIZE MISCELLANEOUS VARIABLES
; 646. *
; 647. * Description: This function is called by OSInit() to initialize miscellaneous variables.
; 648. *
; 649. * Arguments : none
; 650. *
; 651. * Returns : none
; 652. *********************************************************************************************************
; 653. */
; 654.
; 655. static void OS_InitMisc (void)
; 656. {
; 657. #if OS_TIME_GET_SET_EN > 0
; 658. OSTime = 0L; /* Clear the 32-bit system clock */
MOV #0,&OSTime
MOV #0,&(OSTime+2)
; 659. #endif
; 660.
; 661. OSIntNesting = 0; /* Clear the interrupt nesting counter */
MOV.B #0,&OSIntNesting
; 662. OSLockNesting = 0; /* Clear the scheduling lock counter */
MOV.B #0,&OSLockNesting
; 663.
; 664. OSTaskCtr = 0; /* Clear the number of tasks */
MOV.B #0,&OSTaskCtr
; 665.
; 666. OSRunning = FALSE; /* Indicate that multitasking not started */
MOV.B #0,&OSRunning
; 667.
; 668. OSCtxSwCtr = 0; /* Clear the context switch counter */
MOV #0,&OSCtxSwCtr
MOV #0,&(OSCtxSwCtr+2)
; 669. OSIdleCtr = 0L; /* Clear the 32-bit idle counter */
MOV #0,&OSIdleCtr
MOV #0,&(OSIdleCtr+2)
; 670.
; 671. #if (OS_TASK_STAT_EN > 0) && (OS_TASK_CREATE_EXT_EN > 0)
; 672. OSIdleCtrRun = 0L;
MOV #0,&OSIdleCtrRun
MOV #0,&(OSIdleCtrRun+2)
; 673. OSIdleCtrMax = 0L;
MOV #0,&OSIdleCtrMax
MOV #0,&(OSIdleCtrMax+2)
; 674. OSStatRdy = FALSE; /* Statistic task is not ready */
MOV.B #0,&OSStatRdy
; 675. #endif
; 676. }
RET
OS_InitRdyList:
; 677. /*$PAGE*/
; 678. /*
; 679. *********************************************************************************************************
; 680. * INITIALIZATION
; 681. * INITIALIZE THE READY LIST
; 682. *
; 683. * Description: This function is called by OSInit() to initialize the Ready List.
; 684. *
; 685. * Arguments : none
; 686. *
; 687. * Returns : none
; 688. *********************************************************************************************************
; 689. */
; 690.
; 691. static void OS_InitRdyList (void)
; 692. {
; 693. INT16U i;
; 694. INT8U *prdytbl;
; 695.
; 696.
; 697. OSRdyGrp = 0x00; /* Clear the ready list */
MOV.B #0,&OSRdyGrp
; 698. prdytbl = &OSRdyTbl[0];
MOV #OSRdyTbl,R13
; 699. for (i = 0; i < OS_RDY_TBL_SIZE; i++) {
MOV #0,R12
?0145:
CMP #2,R12
JC (?0144)
; 700. *prdytbl++ = 0x00;
MOV.B #0,0(R13)
ADD #1,R13
ADD #1,R12
JMP (?0145)
?0144:
; 701. }
; 702.
; 703. OSPrioCur = 0;
MOV.B #0,&OSPrioCur
; 704. OSPrioHighRdy = 0;
MOV.B #0,&OSPrioHighRdy
; 705.
; 706. OSTCBHighRdy = (OS_TCB *)0;
MOV #0,&OSTCBHighRdy
; 707. OSTCBCur = (OS_TCB *)0;
MOV #0,&OSTCBCur
; 708. }
RET
OS_InitTaskIdle:
; 709.
; 710. /*$PAGE*/
; 711. /*
; 712. *********************************************************************************************************
; 713. * INITIALIZATION
; 714. * CREATING THE IDLE TASK
; 715. *
; 716. * Description: This function creates the Idle Task.
; 717. *
; 718. * Arguments : none
; 719. *
; 720. * Returns : none
; 721. *********************************************************************************************************
; 722. */
; 723.
; 724. static void OS_InitTaskIdle (void)
; 725. {
; 726. #if OS_TASK_CREATE_EXT_EN > 0
; 727. #if OS_STK_GROWTH == 1
; 728. (void)OSTaskCreateExt(OS_TaskIdle,
; 729. (void *)0, /* No arguments passed to OS_TaskIdle() */
; 730. &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], /* Set Top-Of-Stack */
; 731. OS_IDLE_PRIO, /* Lowest priority level */
; 732. OS_TASK_IDLE_ID,
; 733. &OSTaskIdleStk[0], /* Set Bottom-Of-Stack */
; 734. OS_TASK_IDLE_STK_SIZE,
; 735. (void *)0, /* No TCB extension */
; 736. OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);/* Enable stack checking + clear stack */
PUSH #3
PUSH #0
PUSH #0
PUSH #512
PUSH #OSTaskIdleStk
PUSH #65535
PUSH.B #12
PUSH #(OSTaskIdleStk+1022)
MOV #0,R14
MOV #OS_TaskIdle,R12
CALL #OSTaskCreateExt
ADD #16,SP
; 737. #else
; 738. (void)OSTaskCreateExt(OS_TaskIdle,
; 739. (void *)0, /* No arguments passed to OS_TaskIdle() */
; 740. &OSTaskIdleStk[0], /* Set Top-Of-Stack */
; 741. OS_IDLE_PRIO, /* Lowest priority level */
; 742. OS_TASK_IDLE_ID,
; 743. &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], /* Set Bottom-Of-Stack */
; 744. OS_TASK_IDLE_STK_SIZE,
; 745. (void *)0, /* No TCB extension */
; 746. OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);/* Enable stack checking + clear stack */
; 747. #endif
; 748. #else
; 749. #if OS_STK_GROWTH == 1
; 750. (void)OSTaskCreate(OS_TaskIdle,
; 751. (void *)0,
; 752. &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1],
; 753. OS_IDLE_PRIO);
; 754. #else
; 755. (void)OSTaskCreate(OS_TaskIdle,
; 756. (void *)0,
; 757. &OSTaskIdleStk[0],
; 758. OS_IDLE_PRIO);
; 759. #endif
; 760. #endif
; 761. }
RET
OS_InitTaskStat:
; 762. /*$PAGE*/
; 763. /*
; 764. *********************************************************************************************************
; 765. * INITIALIZATION
; 766. * CREATING THE STATISTIC TASK
; 767. *
; 768. * Description: This function creates the Statistic Task.
; 769. *
; 770. * Arguments : none
; 771. *
; 772. * Returns : none
; 773. *********************************************************************************************************
; 774. */
; 775.
; 776. #if OS_TASK_STAT_EN > 0
; 777. static void OS_InitTaskStat (void)
; 778. {
; 779. #if OS_TASK_CREATE_EXT_EN > 0
; 780. #if OS_STK_GROWTH == 1
; 781. (void)OSTaskCreateExt(OS_TaskStat,
; 782. (void *)0, /* No args passed to OS_TaskStat()*/
; 783. &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1], /* Set Top-Of-Stack */
; 784. OS_STAT_PRIO, /* One higher than the idle task */
; 785. OS_TASK_STAT_ID,
; 786. &OSTaskStatStk[0], /* Set Bottom-Of-Stack */
; 787. OS_TASK_STAT_STK_SIZE,
; 788. (void *)0, /* No TCB extension */
; 789. OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); /* Enable stack checking + clear */
PUSH #3
PUSH #0
PUSH #0
PUSH #512
PUSH #OSTaskStatStk
PUSH #65534
PUSH.B #11
PUSH #(OSTaskStatStk+1022)
MOV #0,R14
MOV #OS_TaskStat,R12
CALL #OSTaskCreateExt
ADD #16,SP
; 790. #else
; 791. (void)OSTaskCreateExt(OS_TaskStat,
; 792. (void *)0, /* No args passed to OS_TaskStat()*/
; 793. &OSTaskStatStk[0], /* Set Top-Of-Stack */
; 794. OS_STAT_PRIO, /* One higher than the idle task */
; 795. OS_TASK_STAT_ID,
; 796. &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1], /* Set Bottom-Of-Stack */
; 797. OS_TASK_STAT_STK_SIZE,
; 798. (void *)0, /* No TCB extension */
; 799. OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); /* Enable stack checking + clear */
; 800. #endif
; 801. #else
; 802. #if OS_STK_GROWTH == 1
; 803. (void)OSTaskCreate(OS_TaskStat,
; 804. (void *)0, /* No args passed to OS_TaskStat()*/
; 805. &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1], /* Set Top-Of-Stack */
; 806. OS_STAT_PRIO); /* One higher than the idle task */
; 807. #else
; 808. (void)OSTaskCreate(OS_TaskStat,
; 809. (void *)0, /* No args passed to OS_TaskStat()*/
; 810. &OSTaskStatStk[0], /* Set Top-Of-Stack */
; 811. OS_STAT_PRIO); /* One higher than the idle task */
; 812. #endif
; 813. #endif
; 814. }
RET
OS_InitTCBList:
; 815. #endif
; 816. /*$PAGE*/
; 817. /*
; 818. *********************************************************************************************************
; 819. * INITIALIZATION
; 820. * INITIALIZE THE FREE LIST OF TASK CONTROL BLOCKS
; 821. *
; 822. * Description: This function is called by OSInit() to initialize the free list of OS_TCBs.
; 823. *
; 824. * Arguments : none
; 825. *
; 826. * Returns : none
; 827. *********************************************************************************************************
; 828. */
; 829.
; 830. static void OS_InitTCBList (void)
; 831. {
; 832. INT8U i;
; 833. OS_TCB *ptcb1;
; 834. OS_TCB *ptcb2;
; 835.
; 836.
; 837. OSTCBList = (OS_TCB *)0; /* TCB Initialization */
MOV #0,&OSTCBList
; 838. for (i = 0; i < (OS_LOWEST_PRIO + 1); i++) { /* Clear the priority table */
MOV.B #0,R14
?0149:
CMP.B #13,R14
JC (?0148)
; 839. OSTCBPrioTbl[i] = (OS_TCB *)0;
MOV.B R14,R12
ADD R12,R12
MOV #0,OSTCBPrioTbl(R12)
ADD.B #1,R14
JMP (?0149)
?0148:
; 840. }
; 841. ptcb1 = &OSTCBTbl[0];
MOV #OSTCBTbl,R13
; 842. ptcb2 = &OSTCBTbl[1];
MOV #(OSTCBTbl+36),R12
; 843. for (i = 0; i < (OS_MAX_TASKS + OS_N_SYS_TASKS - 1); i++) { /* Init. list of free TCBs */
MOV.B #0,R14
?0153:
CMP.B #12,R14
JC (?0152)
; 844. ptcb1->OSTCBNext = ptcb2;
MOV R12,14(R13)
; 845. ptcb1++;
ADD #36,R13
; 846. ptcb2++;
ADD #36,R12
ADD.B #1,R14
JMP (?0153)
?0152:
; 847. }
; 848. ptcb1->OSTCBNext = (OS_TCB *)0; /* Last OS_TCB */
MOV #0,14(R13)
; 849. OSTCBFreeList = &OSTCBTbl[0];
MOV #OSTCBTbl,&OSTCBFreeList
; 850. }
RET
OS_Sched:
; 851. /*$PAGE*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -