📄 os_core.lst
字号:
787 0228 3A95 dec r19
788 022a E1F7 brne 1b
789 022c 280F add r18,r24
790 022e 2093 0000 sts OSPrioHighRdy,r18
422:os/source/os_core.c **** OSPrioCur = OSPrioHighRdy;
792 .LM59:
793 0232 2093 0000 sts OSPrioCur,r18
423:os/source/os_core.c **** OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy]; /* Point to highest priority task ready to run
795 .LM60:
796 0236 E22F mov r30,r18
797 0238 FF27 clr r31
798 023a EE0F add r30,r30
799 023c FF1F adc r31,r31
800 023e E050 subi r30,lo8(-(OSTCBPrioTbl))
801 0240 F040 sbci r31,hi8(-(OSTCBPrioTbl))
802 0242 8081 ld r24,Z
803 0244 9181 ldd r25,Z+1
804 0246 9093 0000 sts (OSTCBHighRdy)+1,r25
805 024a 8093 0000 sts OSTCBHighRdy,r24
424:os/source/os_core.c **** OSTCBCur = OSTCBHighRdy;
807 .LM61:
808 024e 9093 0000 sts (OSTCBCur)+1,r25
809 0252 8093 0000 sts OSTCBCur,r24
425:os/source/os_core.c **** OSStartHighRdy(); /* Execute target specific code to start task
811 .LM62:
812 0256 0E94 0000 call OSStartHighRdy
813 .L40:
814 025a 0895 ret
815 /* epilogue: frame size=0 */
816 /* epilogue: noreturn */
817 /* epilogue end (size=0) */
818 /* function OSStart size 50 (50) */
823 .Lscope3:
825 .global OSTimeTick
827 OSTimeTick:
426:os/source/os_core.c **** }
427:os/source/os_core.c **** }
428:os/source/os_core.c **** /*$PAGE*/
429:os/source/os_core.c **** /*
430:os/source/os_core.c **** ***************************************************************************************************
431:os/source/os_core.c **** * STATISTICS INITIALIZATION
432:os/source/os_core.c **** *
433:os/source/os_core.c **** * Description: This function is called by your application to establish CPU usage by first determin
434:os/source/os_core.c **** * how high a 32-bit counter would count to in 1 second if no other tasks were to execu
435:os/source/os_core.c **** * during that time. CPU usage is then determined by a low priority task which keeps t
436:os/source/os_core.c **** * of this 32-bit counter every second but this time, with other tasks running. CPU us
437:os/source/os_core.c **** * determined by:
438:os/source/os_core.c **** *
439:os/source/os_core.c **** * OSIdleCtr
440:os/source/os_core.c **** * CPU Usage (%) = 100 * (1 - ------------)
441:os/source/os_core.c **** * OSIdleCtrMax
442:os/source/os_core.c **** *
443:os/source/os_core.c **** * Arguments : none
444:os/source/os_core.c **** *
445:os/source/os_core.c **** * Returns : none
446:os/source/os_core.c **** ***************************************************************************************************
447:os/source/os_core.c **** */
448:os/source/os_core.c ****
449:os/source/os_core.c **** #if OS_TASK_STAT_EN > 0
450:os/source/os_core.c **** void OSStatInit (void)
451:os/source/os_core.c **** {
452:os/source/os_core.c **** #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register
453:os/source/os_core.c **** OS_CPU_SR cpu_sr;
454:os/source/os_core.c **** #endif
455:os/source/os_core.c ****
456:os/source/os_core.c ****
457:os/source/os_core.c **** OSTimeDly(2); /* Synchronize with clock tick
458:os/source/os_core.c **** OS_ENTER_CRITICAL();
459:os/source/os_core.c **** OSIdleCtr = 0L; /* Clear idle counter
460:os/source/os_core.c **** OS_EXIT_CRITICAL();
461:os/source/os_core.c **** OSTimeDly(OS_TICKS_PER_SEC); /* Determine MAX. idle counter value for 1 second
462:os/source/os_core.c **** OS_ENTER_CRITICAL();
463:os/source/os_core.c **** OSIdleCtrMax = OSIdleCtr; /* Store maximum idle counter count in 1 second
464:os/source/os_core.c **** OSStatRdy = TRUE;
465:os/source/os_core.c **** OS_EXIT_CRITICAL();
466:os/source/os_core.c **** }
467:os/source/os_core.c **** #endif
468:os/source/os_core.c **** /*$PAGE*/
469:os/source/os_core.c **** /*
470:os/source/os_core.c **** ***************************************************************************************************
471:os/source/os_core.c **** * PROCESS SYSTEM TICK
472:os/source/os_core.c **** *
473:os/source/os_core.c **** * Description: This function is used to signal to uC/OS-II the occurrence of a 'system tick' (also
474:os/source/os_core.c **** * as a 'clock tick'). This function should be called by the ticker ISR but, can also
475:os/source/os_core.c **** * called by a high priority task.
476:os/source/os_core.c **** *
477:os/source/os_core.c **** * Arguments : none
478:os/source/os_core.c **** *
479:os/source/os_core.c **** * Returns : none
480:os/source/os_core.c **** ***************************************************************************************************
481:os/source/os_core.c **** */
482:os/source/os_core.c ****
483:os/source/os_core.c **** void OSTimeTick (void)
484:os/source/os_core.c **** {
829 .LM63:
830 /* prologue: frame size=0 */
831 025c CF93 push r28
832 025e DF93 push r29
833 /* prologue end (size=2) */
485:os/source/os_core.c **** #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status regis
486:os/source/os_core.c **** OS_CPU_SR cpu_sr;
487:os/source/os_core.c **** #endif
488:os/source/os_core.c **** OS_TCB *ptcb;
489:os/source/os_core.c ****
490:os/source/os_core.c ****
491:os/source/os_core.c **** OSTimeTickHook(); /* Call user definable hook
835 .LM64:
836 0260 0E94 0000 call OSTimeTickHook
492:os/source/os_core.c **** #if OS_TIME_GET_SET_EN > 0
493:os/source/os_core.c **** OS_ENTER_CRITICAL(); /* Update the 32-bit tick counter
494:os/source/os_core.c **** OSTime++;
495:os/source/os_core.c **** OS_EXIT_CRITICAL();
496:os/source/os_core.c **** #endif
497:os/source/os_core.c **** ptcb = OSTCBList; /* Point at first TCB in TCB list
838 .LM65:
839 0264 A091 0000 lds r26,OSTCBList
840 0268 B091 0000 lds r27,(OSTCBList)+1
498:os/source/os_core.c **** while (ptcb->OSTCBPrio != OS_IDLE_PRIO) { /* Go through all TCBs in TCB list
499:os/source/os_core.c **** OS_ENTER_CRITICAL();
500:os/source/os_core.c **** if (ptcb->OSTCBDly != 0) { /* Delayed or waiting for event with TO
501:os/source/os_core.c **** if (--ptcb->OSTCBDly == 0) { /* Decrement nbr of ticks to end of dela
502:os/source/os_core.c **** if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) == 0x00) { /* Is task suspended?
503:os/source/os_core.c **** OSRdyGrp |= ptcb->OSTCBBitY; /* No, Make task Rdy to Run (timed
504:os/source/os_core.c **** OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
505:os/source/os_core.c **** } else { /* Yes, Leave 1 tick to prevent ...
506:os/source/os_core.c **** ptcb->OSTCBDly = 1; /* ... loosing the task when the ...
507:os/source/os_core.c **** } /* ... suspension is removed.
508:os/source/os_core.c **** }
509:os/source/os_core.c **** }
510:os/source/os_core.c **** ptcb = ptcb->OSTCBNext; /* Point at next TCB in TCB list
511:os/source/os_core.c **** OS_EXIT_CRITICAL();
842 .LM66:
843 026c ED01 movw r28,r26
844 026e 898D ldd r24,Y+25
845 0270 8A30 cpi r24,lo8(10)
846 0272 61F1 breq .L51
847 .L49:
849 .LM67:
850 /* #APP */
851 0274 F894 cli
853 .LM68:
854 /* #NOAPP */
855 0276 FD01 movw r30,r26
856 0278 8689 ldd r24,Z+22
857 027a 9789 ldd r25,Z+23
858 027c 0097 sbiw r24,0
859 027e F1F0 breq .L45
861 .LM69:
862 0280 0197 sbiw r24,1
863 0282 978B std Z+23,r25
864 0284 868B std Z+22,r24
865 0286 892B or r24,r25
866 0288 C9F4 brne .L45
868 .LM70:
869 028a 808D ldd r24,Z+24
870 028c 83FD sbrc r24,3
871 028e 11C0 rjmp .L47
873 .LM71:
874 0290 8091 0000 lds r24,OSRdyGrp
875 0294 958D ldd r25,Z+29
876 0296 892B or r24,r25
877 0298 8093 0000 sts OSRdyGrp,r24
879 .LM72:
880 029c 838D ldd r24,Z+27
881 029e E82F mov r30,r24
882 02a0 FF27 clr r31
883 02a2 E050 subi r30,lo8(-(OSRdyTbl))
884 02a4 F040 sbci r31,hi8(-(OSRdyTbl))
885 02a6 8081 ld r24,Z
886 02a8 ED01 movw r28,r26
887 02aa 9C8D ldd r25,Y+28
888 02ac 892B or r24,r25
889 02ae 8083 st Z,r24
890 02b0 05C0 rjmp .L45
891 .L47:
893 .LM73:
894 02b2 81E0 ldi r24,lo8(1)
895 02b4 90E0 ldi r25,hi8(1)
896 02b6 FD01 movw r30,r26
897 02b8 978B std Z+23,r25
898 02ba 868B std Z+22,r24
899 .L45:
901 .LM74:
902 02bc ED01 movw r28,r26
903 02be AE85 ldd r26,Y+14
904 02c0 BF85 ldd r27,Y+15
906 .LM75:
907 /* #APP */
908 02c2 7894 sei
909 /* #NOAPP */
910 02c4 FD01 movw r30,r26
911 02c6 818D ldd r24,Z+25
912 02c8 8A30 cpi r24,lo8(10)
913 02ca A1F6 brne .L49
914 .L51:
915 /* epilogue: frame size=0 */
916 02cc DF91 pop r29
917 02ce CF91 pop r28
918 02d0 0895 ret
919 /* epilogue end (size=3) */
920 /* function OSTimeTick size 61 (56) */
925 .Lscope4:
927 .global OSVersion
929 OSVersion:
512:os/source/os_core.c **** }
513:os/source/os_core.c **** }
514:os/source/os_core.c **** /*$PAGE*/
515:os/source/os_core.c **** /*
516:os/source/os_core.c **** ***************************************************************************************************
517:os/source/os_core.c **** * GET VERSION
518:os/source/os_core.c **** *
519:os/source/os_core.c **** * Description: This function is used to return the version number of uC/OS-II. The returned value
520:os/source/os_core.c **** * corresponds to uC/OS-II's version number multiplied by 100. In other words, version
521:os/source/os_core.c **** * would be returned as 200.
522:os/source/os_core.c **** *
523:os/source/os_core.c **** * Arguments : none
524:os/source/os_core.c **** *
525:os/source/os_core.c **** * Returns : the version number of uC/OS-II multiplied by 100.
526:os/source/os_core.c **** ***************************************************************************************************
527:os/source/os_core.c **** */
528:os/source/os_core.c ****
529:os/source/os_core.c **** INT16U OSVersion (void)
530:os/source/os_core.c **** {
931 .LM76:
932 /* prologue: frame size=0 */
933 /* prologue end (size=0) */
531:os/source/os_core.c **** return (OS_VERSION);
532:os/source/os_core.c **** }
935 .LM77:
936 02d2 8BEF ldi r24,lo8(251)
937 02d4 90E0 ldi r25,hi8(251)
938 /* epilogue: frame size=0 */
939 02d6 0895 ret
940 /* epilogue end (size=1) */
941 /* function OSVersion size 3 (2) */
943 .Lscope5:
948 .global OS_EventTaskRdy
950 OS_EventTaskRdy:
533:os/source/os_core.c ****
534:os/source/os_core.c **** /*$PAGE*/
535:os/source/os_core.c **** /*
536:os/source/os_core.c **** ***************************************************************************************************
537:os/source/os_core.c **** * DUMMY FUNCTION
538:os/source/os_core.c **** *
539:os/source/os_core.c **** * Description: This function doesn't do anything. It is called by OSTaskDel().
540:os/source/os_core.c **** *
541:os/source/os_core.c **** * Arguments : none
542:os/source/os_core.c **** *
543:os/source/os_core.c **** * Returns : none
544:os/source/os_core.c **** ******************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -