📄 os_time.s79
字号:
//////////////////////////////////////////////////////////////////////////////
// /
// IAR ARM ANSI C/C++ Compiler V4.40A/W32 EVALUATION 21/Jul/2006 16:27:50 /
// Copyright 1999-2005 IAR Systems. All rights reserved. /
// Time limited license: 22 days left /
// /
// Cpu mode = interwork /
// Endian = little /
// Stack alignment = 4 /
// Source file = E:\Project\ucos-ii\spi\uCOS-II\os_time.c /
// Command line = E:\Project\ucos-ii\spi\uCOS-II\os_time.c -lCN /
// E:\Project\ucos-ii\spi\Debug\List\ -lA /
// E:\Project\ucos-ii\spi\Debug\List\ -o /
// E:\Project\ucos-ii\spi\Debug\Obj\ -s9 --no_cse /
// --no_unroll --no_inline --no_code_motion --no_tbaa /
// --no_clustering --no_scheduling --debug --cpu_mode /
// thumb --endian little --cpu ARM7TDMI-S /
// --stack_align 4 --interwork -e --fpu None /
// --dlib_config "e:\Program Files\IAR /
// Systems\Embedded Workbench 4.0 /
// Evaluation\ARM\LIB\dl4tptinl8n.h" -I /
// E:\Project\ucos-ii\spi\ -I /
// E:\Project\ucos-ii\spi\App\ -I /
// E:\Project\ucos-ii\spi\ARM\ -I /
// E:\Project\ucos-ii\spi\BSP\ -I /
// E:\Project\ucos-ii\spi\uCOS-II\ -I "e:\Program /
// Files\IAR Systems\Embedded Workbench 4.0 /
// Evaluation\ARM\INC\" /
// List file = E:\Project\ucos-ii\spi\Debug\List\os_time.s79 /
// /
// /
//////////////////////////////////////////////////////////////////////////////
NAME os_time
RTMODEL "StackAlign4", "USED"
RTMODEL "__cpu_mode", "__pcs__interwork"
RTMODEL "__data_model", "absolute"
RTMODEL "__endian", "little"
RTMODEL "__rt_version", "6"
RSEG CSTACK:DATA:NOROOT(2)
EXTERN ??divu32_t
??DataTable0 EQU 0
??DataTable1 EQU 0
??DataTable2 EQU 0
??DataTable3 EQU 0
??DataTable4 EQU 0
??DataTable5 EQU 0
??DataTable7 EQU 0
??DataTable9 EQU 0
MULTWEAK ??OSTimeDly??rA
MULTWEAK ??OSTimeDlyHMSM??rA
MULTWEAK ??OSTimeDlyResume??rA
MULTWEAK ??OSTimeGet??rA
MULTWEAK ??OSTimeSet??rA
MULTWEAK ??OS_CPU_SR_Restore??rT
MULTWEAK ??OS_CPU_SR_Save??rT
MULTWEAK ??OS_Sched??rT
MULTWEAK ??rT??divu32_t
PUBLIC OSTimeDly
FUNCTION OSTimeDly,0203H
LOCFRAME CSTACK, 16, STACK
PUBLIC OSTimeDlyHMSM
FUNCTION OSTimeDlyHMSM,0203H
LOCFRAME CSTACK, 8, STACK
PUBLIC OSTimeDlyResume
FUNCTION OSTimeDlyResume,0203H
LOCFRAME CSTACK, 12, STACK
PUBLIC OSTimeGet
FUNCTION OSTimeGet,0203H
LOCFRAME CSTACK, 8, STACK
PUBLIC OSTimeSet
FUNCTION OSTimeSet,0203H
LOCFRAME CSTACK, 8, STACK
CFI Names cfiNames0
CFI StackFrame CFA R13 HUGEDATA
CFI Resource R0:32, R1:32, R2:32, R3:32, R4:32, R5:32, R6:32, R7:32
CFI Resource R8:32, R9:32, R10:32, R11:32, R12:32, CPSR:32, R13:32
CFI Resource R14:32, SPSR:32
CFI VirtualResource ?RET:32
CFI EndNames cfiNames0
CFI Common cfiCommon0 Using cfiNames0
CFI CodeAlign 4
CFI DataAlign 4
CFI ReturnAddress ?RET CODE
CFI CFA R13+0
CFI R0 Undefined
CFI R1 Undefined
CFI R2 Undefined
CFI R3 Undefined
CFI R4 SameValue
CFI R5 SameValue
CFI R6 SameValue
CFI R7 SameValue
CFI R8 SameValue
CFI R9 SameValue
CFI R10 SameValue
CFI R11 SameValue
CFI R12 Undefined
CFI CPSR SameValue
CFI R14 Undefined
CFI SPSR SameValue
CFI ?RET R14
CFI EndCommon cfiCommon0
CFI Common cfiCommon1 Using cfiNames0
CFI CodeAlign 2
CFI DataAlign 4
CFI ReturnAddress ?RET CODE
CFI CFA R13+0
CFI R0 Undefined
CFI R1 Undefined
CFI R2 Undefined
CFI R3 Undefined
CFI R4 SameValue
CFI R5 SameValue
CFI R6 SameValue
CFI R7 SameValue
CFI R8 SameValue
CFI R9 SameValue
CFI R10 SameValue
CFI R11 SameValue
CFI R12 Undefined
CFI CPSR SameValue
CFI R14 Undefined
CFI SPSR SameValue
CFI ?RET R14
CFI EndCommon cfiCommon1
OS_CPU_SR_Restore SYMBOL "OS_CPU_SR_Restore"
OS_CPU_SR_Save SYMBOL "OS_CPU_SR_Save"
OS_Sched SYMBOL "OS_Sched"
OSTimeDly SYMBOL "OSTimeDly"
??OSTimeDly??rA SYMBOL "??rA", OSTimeDly
OSTimeDlyHMSM SYMBOL "OSTimeDlyHMSM"
??OSTimeDlyHMSM??rA SYMBOL "??rA", OSTimeDlyHMSM
OSTimeDlyResume SYMBOL "OSTimeDlyResume"
??OSTimeDlyResume??rA SYMBOL "??rA", OSTimeDlyResume
OSTimeGet SYMBOL "OSTimeGet"
??OSTimeGet??rA SYMBOL "??rA", OSTimeGet
OSTimeSet SYMBOL "OSTimeSet"
??OSTimeSet??rA SYMBOL "??rA", OSTimeSet
??OS_CPU_SR_Restore??rT SYMBOL "??rT", OS_CPU_SR_Restore
??OS_CPU_SR_Save??rT SYMBOL "??rT", OS_CPU_SR_Save
??OS_Sched??rT SYMBOL "??rT", OS_Sched
EXTERN OSRdyGrp
EXTERN OSRdyTbl
EXTERN OSTCBCur
EXTERN OSTCBPrioTbl
EXTERN OSTime
EXTERN OS_CPU_SR_Restore
FUNCTION OS_CPU_SR_Restore,0202H
EXTERN OS_CPU_SR_Save
FUNCTION OS_CPU_SR_Save,0202H
EXTERN OS_Sched
FUNCTION OS_Sched,0202H
RSEG CODE:CODE:NOROOT(2)
CFI Block cfiBlock0 Using cfiCommon0
CFI NoFunction
ARM
??OSTimeDly??rA:
ADD R12,PC,#+1
BX R12
CFI EndBlock cfiBlock0
REQUIRE OSTimeDly
// E:\Project\ucos-ii\spi\uCOS-II\os_time.c
// 1 /*
// 2 *********************************************************************************************************
// 3 * uC/OS-II
// 4 * The Real-Time Kernel
// 5 * TIME MANAGEMENT
// 6 *
// 7 * (c) Copyright 1992-2003, Jean J. Labrosse, Weston, FL
// 8 * All Rights Reserved
// 9 *
// 10 * File : OS_TIME.C
// 11 * By : Jean J. Labrosse
// 12 *********************************************************************************************************
// 13 */
// 14
// 15 #ifndef OS_MASTER_FILE
// 16 #include <ucos_ii.h>
// 17 #endif
// 18
// 19 /*
// 20 *********************************************************************************************************
// 21 * DELAY TASK 'n' TICKS (n from 0 to 65535)
// 22 *
// 23 * Description: This function is called to delay execution of the currently running task until the
// 24 * specified number of system ticks expires. This, of course, directly equates to delaying
// 25 * the current task for some time to expire. No delay will result If the specified delay is
// 26 * 0. If the specified delay is greater than 0 then, a context switch will result.
// 27 *
// 28 * Arguments : ticks is the time delay that the task will be suspended in number of clock 'ticks'.
// 29 * Note that by specifying 0, the task will not be delayed.
// 30 *
// 31 * Returns : none
// 32 *********************************************************************************************************
// 33 */
// 34
RSEG CODE:CODE:NOROOT(2)
CFI Block cfiBlock1 Using cfiCommon1
CFI Function OSTimeDly
THUMB
// 35 void OSTimeDly (INT16U ticks)
// 36 {
OSTimeDly:
PUSH {R4-R6,LR}
CFI ?RET Frame(CFA, -4)
CFI R6 Frame(CFA, -8)
CFI R5 Frame(CFA, -12)
CFI R4 Frame(CFA, -16)
CFI CFA R13+16
MOVS R4,R0
// 37 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
// 38 OS_CPU_SR cpu_sr;
// 39 #endif
// 40 INT8U y;
// 41
// 42
// 43 if (ticks > 0) { /* 0 means no delay! */
BEQ ??OSTimeDly_0
// 44 OS_ENTER_CRITICAL();
_BLF OS_CPU_SR_Save,??OS_CPU_SR_Save??rT
// 45 y = OSTCBCur->OSTCBY; /* Delay current task */
LDR R1,??OSTimeDly_1 ;; OSTCBCur
LDR R1,[R1, #+0]
ADDS R1,R1,#+47
LDRB R1,[R1, #+0]
// 46 OSRdyTbl[y] &= ~OSTCBCur->OSTCBBitX;
LDR R3,??DataTable8 ;; OSRdyTbl
LDR R6,??DataTable8 ;; OSRdyTbl
LDRB R5,[R6, R1]
LDR R6,??OSTimeDly_1 ;; OSTCBCur
LDR R6,[R6, #+0]
ADDS R6,R6,#+48
LDRB R6,[R6, #+0]
BICS R5,R5,R6
STRB R5,[R3, R1]
// 47 if (OSRdyTbl[y] == 0) {
LDR R2,??DataTable8 ;; OSRdyTbl
LDRB R1,[R2, R1]
CMP R1,#+0
BNE ??OSTimeDly_2
// 48 OSRdyGrp &= ~OSTCBCur->OSTCBBitY;
LDR R1,??DataTable6 ;; OSRdyGrp
LDR R2,??DataTable6 ;; OSRdyGrp
LDRB R2,[R2, #+0]
LDR R3,??OSTimeDly_1 ;; OSTCBCur
LDR R3,[R3, #+0]
ADDS R3,R3,#+49
LDRB R3,[R3, #+0]
BICS R2,R2,R3
STRB R2,[R1, #+0]
// 49 }
// 50 OSTCBCur->OSTCBDly = ticks; /* Load ticks in TCB */
??OSTimeDly_2:
LDR R1,??OSTimeDly_1 ;; OSTCBCur
LDR R1,[R1, #+0]
STRH R4,[R1, #+42]
// 51 OS_EXIT_CRITICAL();
_BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
// 52 OS_Sched(); /* Find next task to run! */
_BLF OS_Sched,??OS_Sched??rT
// 53 }
// 54 }
??OSTimeDly_0:
POP {R4-R6}
POP {R0}
BX R0 ;; return
Nop
DATA
??OSTimeDly_1:
DC32 OSTCBCur
CFI EndBlock cfiBlock1
RSEG CODE:CODE:NOROOT(2)
CFI Block cfiBlock2 Using cfiCommon0
CFI NoFunction
ARM
??OSTimeDlyHMSM??rA:
ADD R12,PC,#+1
BX R12
CFI EndBlock cfiBlock2
REQUIRE OSTimeDlyHMSM
// 55 /*$PAGE*/
// 56 /*
// 57 *********************************************************************************************************
// 58 * DELAY TASK FOR SPECIFIED TIME
// 59 *
// 60 * Description: This function is called to delay execution of the currently running task until some time
// 61 * expires. This call allows you to specify the delay time in HOURS, MINUTES, SECONDS and
// 62 * MILLISECONDS instead of ticks.
// 63 *
// 64 * Arguments : hours specifies the number of hours that the task will be delayed (max. is 255)
// 65 * minutes specifies the number of minutes (max. 59)
// 66 * seconds specifies the number of seconds (max. 59)
// 67 * milli specifies the number of milliseconds (max. 999)
// 68 *
// 69 * Returns : OS_NO_ERR
// 70 * OS_TIME_INVALID_MINUTES
// 71 * OS_TIME_INVALID_SECONDS
// 72 * OS_TIME_INVALID_MS
// 73 * OS_TIME_ZERO_DLY
// 74 *
// 75 * Note(s) : The resolution on the milliseconds depends on the tick rate. For example, you can't do
// 76 * a 10 mS delay if the ticker interrupts every 100 mS. In this case, the delay would be
// 77 * set to 0. The actual delay is rounded to the nearest tick.
// 78 *********************************************************************************************************
// 79 */
// 80
// 81 #if OS_TIME_DLY_HMSM_EN > 0
RSEG CODE:CODE:NOROOT(2)
CFI Block cfiBlock3 Using cfiCommon1
CFI Function OSTimeDlyHMSM
THUMB
// 82 INT8U OSTimeDlyHMSM (INT8U hours, INT8U minutes, INT8U seconds, INT16U milli)
// 83 {
OSTimeDlyHMSM:
PUSH {R4,LR}
CFI ?RET Frame(CFA, -4)
CFI R4 Frame(CFA, -8)
CFI CFA R13+8
// 84 INT32U ticks;
// 85 INT16U loops;
// 86
// 87
// 88 if (hours == 0) {
CMP R0,#+0
BNE ??OSTimeDlyHMSM_0
// 89 if (minutes == 0) {
CMP R1,#+0
BNE ??OSTimeDlyHMSM_0
// 90 if (seconds == 0) {
CMP R2,#+0
BNE ??OSTimeDlyHMSM_1
// 91 if (milli == 0) {
CMP R3,#+0
BNE ??OSTimeDlyHMSM_2
// 92 return (OS_TIME_ZERO_DLY);
MOVS R0,#+84
B ??OSTimeDlyHMSM_3
// 93 }
// 94 }
// 95 }
// 96 }
// 97 if (minutes > 59) {
??OSTimeDlyHMSM_0:
CMP R1,#+60
BCC ??OSTimeDlyHMSM_1
// 98 return (OS_TIME_INVALID_MINUTES); /* Validate arguments to be within range */
MOVS R0,#+81
B ??OSTimeDlyHMSM_3
// 99 }
// 100 if (seconds > 59) {
??OSTimeDlyHMSM_1:
CMP R2,#+60
BCC ??OSTimeDlyHMSM_2
// 101 return (OS_TIME_INVALID_SECONDS);
MOVS R0,#+82
B ??OSTimeDlyHMSM_3
// 102 }
// 103 if (milli > 999) {
??OSTimeDlyHMSM_2:
MOVS R4,#+250
LSLS R4,R4,#+2 ;; #+1000
CMP R3,R4
BCC ??OSTimeDlyHMSM_4
// 104 return (OS_TIME_INVALID_MILLI);
MOVS R0,#+83
B ??OSTimeDlyHMSM_3
// 105 }
// 106 /* Compute the total number of clock ticks required.. */
// 107 /* .. (rounded to the nearest tick) */
// 108 ticks = ((INT32U)hours * 3600L + (INT32U)minutes * 60L + (INT32U)seconds) * OS_TICKS_PER_SEC
// 109 + OS_TICKS_PER_SEC * ((INT32U)milli + 500L / OS_TICKS_PER_SEC) / 1000L;
??OSTimeDlyHMSM_4:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -