📄 ucos_ii.ls
字号:
3527 0398 10ef cli
3529 039a 20ea bra L5031
3581 switch .const
3582 0108 L64:
3583 0108 00000064 dc.l 100
3584 ; 638 void OSTaskStat (void *pdata)
3584 ; 639 {
3585 switch .text
3586 039c _OSTaskStat:
3588 039c 3b pshd
3589 039d 1b97 leas -9,s
3590 00000009 OFST: set 9
3593 ; 644 pdata = pdata; /* Prevent compiler warning for not using 'pdata' */
3595 ;***** ldd OFST+0,s ***** M2
3596 ;***** std OFST+0,s ***** M2
3598 039f 2006 bra L5331
3599 03a1 L1331:
3600 ; 646 OSTimeDly(2 * OS_TICKS_PER_SEC); /* Wait until statistic task is ready */
3602 03a1 cc0028 ldd #40
3603 03a4 1611fc jsr _OSTimeDly
3605 03a7 L5331:
3606 ; 645 while (OSStatRdy == FALSE) {
3608 03a7 f60abb ldab _OSStatRdy
3609 03aa 27f5 beq L1331
3610 03ac L1431:
3611 ; 649 OS_ENTER_CRITICAL();
3613 03ac 1410 sei
3614 ; 650 OSIdleCtrRun = OSIdleCtr; /* Obtain the of the idle counter for the past second */
3616 ;***** ldd _OSIdleCtr+2 ***** M2
3617 ;***** std _OSIdleCtrRun+2 ***** M2
3618 03ae 18040ac70abe movw _OSIdleCtr+2,_OSIdleCtrRun+2
3619 ;***** ldd _OSIdleCtr ***** M2
3620 ;***** std _OSIdleCtrRun ***** M2
3621 03b4 18040ac50abc movw _OSIdleCtr,_OSIdleCtrRun
3622 ; 651 run = OSIdleCtr;
3624 ;***** ldd _OSIdleCtr+2 ***** M2
3625 ;***** std OFST-2,s ***** M2
3626 03ba 1801870ac7 movw _OSIdleCtr+2,OFST-2,s
3627 ;***** ldd _OSIdleCtr ***** M2
3628 ;***** std OFST-4,s ***** M2
3629 03bf 1801850ac5 movw _OSIdleCtr,OFST-4,s
3630 ; 652 OSIdleCtr = 0L; /* Reset the idle counter for the next second */
3632 ;***** ldd #0 ***** L0
3633 03c4 87 clra
3634 03c5 c7 clrb
3635 03c6 7c0ac7 std _OSIdleCtr+2
3636 ;***** ldd #0 ***** L0
3637 ;***** clra ***** C0
3638 ;***** clrb ***** C0
3639 03c9 7c0ac5 std _OSIdleCtr
3640 ; 653 OS_EXIT_CRITICAL();
3642 03cc 10ef cli
3643 ; 654 if (OSIdleCtrMax > 0L) {
3645 03ce fc0ac0 ldd _OSIdleCtrMax
3646 ;***** bne L44 ***** B1
3647 03d1 2605 bne LC002
3648 03d3 fc0ac2 ldd _OSIdleCtrMax+2
3649 03d6 2734 beq L5431
3650 03d8 LC002:
3651 ; 655 usage = (INT8S)(100L - 100L * run / OSIdleCtrMax);
3653 03d8 ec87 ldd OFST-2,s
3654 03da ee85 ldx OFST-4,s
3655 03dc cd0108 ldy #L64
3656 03df 160000 jsr c_lmul
3657 03e2 cd0ac0 ldy #_OSIdleCtrMax
3658 03e5 160000 jsr c_ludv
3659 03e8 6c82 std OFST-7,s
3660 03ea 6e80 stx OFST-9,s
3661 03ec ce0000 ldx #0
3662 03ef cc0064 ldd #100
3663 03f2 1980 leay OFST-9,s
3664 03f4 160000 jsr c_lsub
3665 03f7 6b84 stab OFST-5,s
3666 ; 656 if (usage > 100) {
3668 ;***** ldab OFST-5,s ***** L1
3669 03f9 c164 cmpb #100
3670 03fb 2f07 ble L7431
3671 ; 657 OSCPUUsage = 100;
3673 03fd c664 ldab #100
3674 03ff 7b0ac4 stab _OSCPUUsage
3676 0402 200b bra L7531
3677 0404 L7431:
3678 ; 658 } else if (usage < 0) {
3680 ;***** tst OFST-5,s ***** T3
3681 0404 d7 tstb
3682 ;***** bge L3531 ***** B1
3683 ; 659 OSCPUUsage = 0;
3685 ;***** clr _OSCPUUsage ***** F0
3687 ;***** jbr L5431 ***** B1
3688 0405 2d05 blt L5431
3689 ; 661 OSCPUUsage = usage;
3691 ;***** ldab OFST-5,s ***** L1
3692 0407 7b0ac4 stab _OSCPUUsage
3693 040a 2003 bra L7531
3694 040c L5431:
3695 ; 664 OSCPUUsage = 0;
3697 040c 790ac4 clr _OSCPUUsage
3698 040f L7531:
3699 ; 666 OSTaskStatHook(); /* Invoke user definable hook */
3701 040f 160000 jsr _OSTaskStatHook
3703 ; 667 OSTimeDly(OS_TICKS_PER_SEC); /* Accumulate OSIdleCtr for the next second */
3705 0412 cc0014 ldd #20
3706 0415 1611fc jsr _OSTimeDly
3709 0418 2092 bra L1431
3803 ; 715 INT8U OSTCBInit (INT8U prio, OS_STK *ptos, OS_STK *pbos, INT16U id, INT16U stk_size, void *pext, INT16U opt)
3803 ; 716 {
3804 switch .text
3805 041a _OSTCBInit:
3807 041a 37 pshb
3808 041b 3b pshd
3809 00000002 OFST: set 2
3812 ; 720 OS_ENTER_CRITICAL();
3814 041c 1410 sei
3815 ; 721 ptcb = OSTCBFreeList; /* Get a free TCB from the free TCB list */
3817 041e fd0aa8 ldy _OSTCBFreeList
3818 0421 6d80 sty OFST-2,s
3819 ; 722 if (ptcb != (OS_TCB *)0) {
3821 ;***** ldy OFST-2,s ***** L1
3822 ;***** sty -2,s ***** C2
3823 0423 182700a6 beq L1241
3824 ; 723 OSTCBFreeList = ptcb->OSTCBNext; /* Update pointer to free TCB list */
3826 ;***** ldy OFST-2,s ***** L1
3827 ;***** ldd 14,y ***** M2
3828 ;***** std _OSTCBFreeList ***** M2
3829 0427 18054e0aa8 movw 14,y,_OSTCBFreeList
3830 ; 724 OS_EXIT_CRITICAL();
3832 042c 10ef cli
3833 ; 725 ptcb->OSTCBStkPtr = ptos; /* Load Stack pointer in TCB */
3835 ;***** ldd OFST+3,s ***** M2
3836 ;***** std [OFST-2,s] ***** D1
3837 ;***** std 0,y ***** M2
3838 042e 18028540 movw OFST+3,s,0,y
3839 ; 726 ptcb->OSTCBPrio = (INT8U)prio; /* Load task priority into TCB */
3841 0432 e682 ldab OFST+0,s
3842 ;***** ldy OFST-2,s ***** L1
3843 0434 6be819 stab 25,y
3844 ; 727 ptcb->OSTCBStat = OS_STAT_RDY; /* Task is ready to run */
3846 ;***** ldy OFST-2,s ***** L1
3847 ;***** clr 24,y ***** C0
3848 0437 87 clra
3849 0438 6ae818 staa 24,y
3850 ; 728 ptcb->OSTCBDly = 0; /* Task is not delayed */
3852 ;***** clra ***** C0
3853 043b c7 clrb
3854 ;***** ldy OFST-2,s ***** L1
3855 043c 6ce816 std 22,y
3856 ; 731 ptcb->OSTCBExtPtr = pext; /* Store pointer to TCB extension */
3858 ;***** ldd OFST+11,s ***** M2
3859 ;***** ldy OFST-2,s ***** L1
3860 ;***** std 2,y ***** M2
3861 043f 18028d42 movw OFST+11,s,2,y
3862 ; 732 ptcb->OSTCBStkSize = stk_size; /* Store stack size */
3864 ;***** ldd OFST+9,s ***** M2
3865 ;***** ldy OFST-2,s ***** L1
3866 ;***** std 8,y ***** M2
3867 0443 18028b48 movw OFST+9,s,8,y
3868 ;***** clra ***** C0
3869 ;***** clrb ***** C0
3870 0447 6c46 std 6,y
3871 ; 733 ptcb->OSTCBStkBottom = pbos; /* Store pointer to bottom of stack */
3873 ;***** ldd OFST+5,s ***** M2
3874 ;***** ldy OFST-2,s ***** L1
3875 ;***** std 4,y ***** M2
3876 0449 18028744 movw OFST+5,s,4,y
3877 ; 734 ptcb->OSTCBOpt = opt; /* Store task options */
3879 ;***** ldd OFST+13,s ***** M2
3880 ;***** ldy OFST-2,s ***** L1
3881 ;***** std 10,y ***** M2
3882 044d 18028f4a movw OFST+13,s,10,y
3883 ; 735 ptcb->OSTCBId = id; /* Store task ID */
3885 ;***** ldd OFST+7,s ***** M2
3886 ;***** ldy OFST-2,s ***** L1
3887 ;***** std 12,y ***** M2
3888 0451 1802894c movw OFST+7,s,12,y
3889 ; 745 ptcb->OSTCBDelReq = OS_NO_ERR;
3891 ;***** ldy OFST-2,s ***** L1
3892 ;***** clr 30,y ***** C0
3893 ;***** clra ***** C0
3894 0455 6ae81e staa 30,y
3895 ; 748 ptcb->OSTCBY = prio >> 3; /* Pre-compute X, Y, BitX and BitY */
3897 0458 e682 ldab OFST+0,s
3898 045a 54 lsrb
3899 045b 54 lsrb
3900 045c 54 lsrb
3901 ;***** ldy OFST-2,s ***** L1
3902 045d 6be81b stab 27,y
3903 ; 749 ptcb->OSTCBBitY = OSMapTbl[ptcb->OSTCBY];
3905 ;***** ldy OFST-2,s ***** L1
3906 ;***** ldab 27,y ***** L1
3907 ;***** clra ***** C0
3908 0460 b746 tfr d,y
3909 0462 e6ea0000 ldab _OSMapTbl,y
3910 0466 ed80 ldy OFST-2,s
3911 0468 6be81d stab 29,y
3912 ; 750 ptcb->OSTCBX = prio & 0x07;
3914 046b e682 ldab OFST+0,s
3915 046d c407 andb #7
3916 ;***** ldy OFST-2,s ***** L1
3917 046f 6be81a stab 26,y
3918 ; 751 ptcb->OSTCBBitX = OSMapTbl[ptcb->OSTCBX];
3920 ;***** ldy OFST-2,s ***** L1
3921 ;***** ldab 26,y ***** L1
3922 ;***** clra ***** C0
3923 0472 b746 tfr d,y
3924 0474 e6ea0000 ldab _OSMapTbl,y
3925 0478 ed80 ldy OFST-2,s
3926 047a 6be81c stab 28,y
3927 ; 754 ptcb->OSTCBEventPtr = (OS_EVENT *)0; /* Task is not pending on an event */
3929 ;***** clra ***** C0
3930 047d c7 clrb
3931 ;***** ldy OFST-2,s ***** L1
3932 047e 6ce812 std 18,y
3933 ; 758 ptcb->OSTCBMsg = (void *)0; /* No message received */
3935 ;***** clra ***** C0
3936 ;***** clrb ***** C0
3937 ;***** ldy OFST-2,s ***** L1
3938 0481 6ce814 std 20,y
3939 ; 761 OS_ENTER_CRITICAL();
3941 0484 1410 sei
3942 ; 762 OSTCBPrioTbl[prio] = ptcb;
3944 0486 e682 ldab OFST+0,s
3945 ;***** clra ***** C0
3946 0488 59 lsld
3947 0489 b746 tfr d,y
3948 048b ec80 ldd OFST-2,s
3949 048d 6cea0a24 std _OSTCBPrioTbl,y
3950 ; 763 ptcb->OSTCBNext = OSTCBList; /* Link into TCB chain */
3952 ;***** ldd _OSTCBList ***** M2
3953 ;***** ldy OFST-2,s ***** L6
3954 0491 b746 tfr d,y
3955 ;***** std 14,y ***** M2
3956 0493 18014e0aa4 movw _OSTCBList,14,y
3957 ; 764 ptcb->OSTCBPrev = (OS_TCB *)0;
3959 0498 87 clra
3960 0499 c7 clrb
3961 ;***** ldy OFST-2,s ***** L1
3962 049a 6ce810 std 16,y
3963 ; 765 if (OSTCBList != (OS_TCB *)0) {
3965 049d fd0aa4 ldy _OSTCBList
3966 ;***** sty -2,s ***** C2
3967 04a0 2705 beq L3241
3968 ; 766 OSTCBList->OSTCBPrev = ptcb;
3970 04a2 ec80 ldd OFST-2,s
3971 ;***** ldy _OSTCBList ***** L1
3972 04a4 6ce810 std 16,y
3973 04a7 L3241:
3974 ; 768 OSTCBList = ptcb;
3976 04a7 ed80 ldy OFST-2,s
3977 04a9 7d0aa4 sty _OSTCBList
3978 ; 769 OSRdyGrp |= ptcb->OSTCBBitY; /* Make task ready to run */
3980 ;***** ldy OFST-2,s ***** L1
3981 04ac e6e81d ldab 29,y
3982 04af fa0ab6 orab _OSRdyGrp
3983 04b2 7b0ab6 stab _OSRdyGrp
3984 ; 770 OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
3986 ;***** ldy OFST-2,s ***** L1
3987 04b5 e6e81b ldab 27,y
3988 04b8 87 clra
3989 04b9 b746 tfr d,y
3990 04bb ee80 ldx OFST-2,s
3991 04bd e6e01c ldab 28,x
3992 04c0 eaea0aae orab _OSRdyTbl,y
3993 04c4 6bea0aae stab
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -