📄 osal_timers.lst
字号:
98 // Initialize the rollover modulo
99 tmr_count = TICK_TIME;
\ 000005 90.... MOV DPTR,#__Constant_3e8
\ 000008 78.. MOV R0,#?V0 + 0
\ 00000A 12.... LCALL ?L_MOV_X
\ 00000D 90.... MOV DPTR,#tmr_count
\ 000010 78.. MOV R0,#?V0 + 0
\ 000012 12.... LCALL ?L_MOV_TO_X
100 tmr_decr_time = TIMER_DECR_TIME;
\ 000015 90.... MOV DPTR,#tmr_decr_time
\ 000018 7401 MOV A,#0x1
\ 00001A F0 MOVX @DPTR,A
\ 00001B A3 INC DPTR
\ 00001C E4 CLR A
\ 00001D F0 MOVX @DPTR,A
101
102 // Initialize the system timer
103 osal_timer_activate( false );
\ 00001E ; Setup parameters for call to function osal_timer_activate
\ 00001E F9 MOV R1,A
\ 00001F 90.... MOV DPTR,#(osal_timer_activate & 0xffff)
\ 000022 74.. MOV A,#((osal_timer_activate >> 16) & 0xff)
\ 000024 12.... LCALL ?BCALL ; Banked call to: DPTR()
104 timerActive = false;
\ 000027 E4 CLR A
\ 000028 90.... MOV DPTR,#timerActive
\ 00002B F0 MOVX @DPTR,A
105
106 osal_systemClock = 0;
\ 00002C 90.... MOV DPTR,#__Constant_0
\ 00002F 78.. MOV R0,#?V0 + 0
\ 000031 12.... LCALL ?L_MOV_X
\ 000034 90.... MOV DPTR,#??osal_systemClock
\ 000037 78.. MOV R0,#?V0 + 0
\ 000039 12.... LCALL ?L_MOV_TO_X
107 }
\ 00003C 02.... LJMP ?Subroutine3 & 0xFFFF
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine3:
\ 000000 7F04 MOV R7,#0x4
\ 000002 02.... LJMP ?BANKED_LEAVE_XDATA
108
109 /*********************************************************************
110 * @fn osalAddTimer
111 *
112 * @brief Add a timer to the timer list.
113 * Ints must be disabled.
114 *
115 * @param task_id
116 * @param event_flag
117 * @param timeout
118 *
119 * @return osalTimerRec_t * - pointer to newly created timer
120 */
\ In segment BANKED_CODE, align 1, keep-with-next
121 osalTimerRec_t * osalAddTimer( byte task_id, UINT16 event_flag, UINT16 timeout )
\ osalAddTimer:
122 {
\ 000000 74F2 MOV A,#-0xe
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 14
\ 000005 ; Auto size: 0
\ 000005 89.. MOV ?V0 + 2,R1
\ 000007 8A.. MOV ?V0 + 0,R2
\ 000009 8B.. MOV ?V0 + 1,R3
\ 00000B EC MOV A,R4
\ 00000C FE MOV R6,A
\ 00000D ED MOV A,R5
\ 00000E FF MOV R7,A
123 osalTimerRec_t *newTimer;
124 osalTimerRec_t *srchTimer;
125
126 // Look for an existing timer first
127 newTimer = osalFindTimer( task_id, event_flag );
\ 00000F ; Setup parameters for call to function osalFindTimer
\ 00000F 90.... MOV DPTR,#(osalFindTimer & 0xffff)
\ 000012 74.. MOV A,#((osalFindTimer >> 16) & 0xff)
\ 000014 12.... LCALL ?BCALL ; Banked call to: DPTR()
128 if ( newTimer )
\ 000017 EA MOV A,R2
\ 000018 7001 JNZ ??osalAddTimer_0
\ 00001A EB MOV A,R3
\ ??osalAddTimer_0:
\ 00001B 600D JZ ??osalAddTimer_1
129 {
130 // Timer is found - update it.
131 newTimer->timeout = timeout;
\ 00001D 8A82 MOV DPL,R2
\ 00001F 8B83 MOV DPH,R3
\ 000021 A3 INC DPTR
\ 000022 A3 INC DPTR
\ 000023 EE MOV A,R6
\ 000024 F0 MOVX @DPTR,A
\ 000025 A3 INC DPTR
\ 000026 EF MOV A,R7
\ ??osalAddTimer_2:
\ 000027 F0 MOVX @DPTR,A
\ 000028 806A SJMP ??osalAddTimer_3
132
133 return ( newTimer );
134 }
135 else
136 {
137 // New Timer
138 newTimer = osal_mem_alloc( sizeof( osalTimerRec_t ) );
\ ??osalAddTimer_1:
\ 00002A ; Setup parameters for call to function osal_mem_alloc
\ 00002A 7A07 MOV R2,#0x7
\ 00002C 7B00 MOV R3,#0x0
\ 00002E 90.... MOV DPTR,#(osal_mem_alloc & 0xffff)
\ 000031 74.. MOV A,#((osal_mem_alloc >> 16) & 0xff)
\ 000033 12.... LCALL ?BCALL ; Banked call to: DPTR()
139
140 if ( newTimer )
\ 000036 EA MOV A,R2
\ 000037 7001 JNZ ??osalAddTimer_4
\ 000039 EB MOV A,R3
\ ??osalAddTimer_4:
\ 00003A 6054 JZ ??osalAddTimer_5
141 {
142 // Fill in new timer
143 newTimer->task_id = task_id;
\ 00003C 8A82 MOV DPL,R2
\ 00003E 8B83 MOV DPH,R3
\ 000040 A3 INC DPTR
\ 000041 A3 INC DPTR
\ 000042 A3 INC DPTR
\ 000043 A3 INC DPTR
\ 000044 A3 INC DPTR
\ 000045 A3 INC DPTR
\ 000046 E5.. MOV A,?V0 + 2
\ 000048 F0 MOVX @DPTR,A
144 newTimer->event_flag = event_flag;
\ 000049 8A82 MOV DPL,R2
\ 00004B 8B83 MOV DPH,R3
\ 00004D A3 INC DPTR
\ 00004E A3 INC DPTR
\ 00004F A3 INC DPTR
\ 000050 A3 INC DPTR
\ 000051 E5.. MOV A,?V0 + 0
\ 000053 F0 MOVX @DPTR,A
\ 000054 A3 INC DPTR
\ 000055 E5.. MOV A,?V0 + 1
\ 000057 F0 MOVX @DPTR,A
145 newTimer->timeout = timeout;
\ 000058 8A82 MOV DPL,R2
\ 00005A 8B83 MOV DPH,R3
\ 00005C A3 INC DPTR
\ 00005D A3 INC DPTR
\ 00005E EE MOV A,R6
\ 00005F F0 MOVX @DPTR,A
\ 000060 A3 INC DPTR
\ 000061 EF MOV A,R7
\ 000062 F0 MOVX @DPTR,A
146 newTimer->next = (void *)NULL;
\ 000063 8A82 MOV DPL,R2
\ 000065 8B83 MOV DPH,R3
\ 000067 E4 CLR A
\ 000068 F0 MOVX @DPTR,A
\ 000069 A3 INC DPTR
\ 00006A F0 MOVX @DPTR,A
147
148 // Does the timer list already exist
149 if ( timerHead == NULL )
\ 00006B 90.... MOV DPTR,#timerHead
\ 00006E E0 MOVX A,@DPTR
\ 00006F 7002 JNZ ??osalAddTimer_6
\ 000071 A3 INC DPTR
\ 000072 E0 MOVX A,@DPTR
\ ??osalAddTimer_6:
\ 000073 90.... MOV DPTR,#timerHead
\ ??osalAddTimer_7:
\ 000076 7006 JNZ ??osalAddTimer_8
150 {
151 // Start task list
152 timerHead = newTimer;
\ 000078 EA MOV A,R2
\ 000079 F0 MOVX @DPTR,A
\ 00007A A3 INC DPTR
\ 00007B EB MOV A,R3
\ 00007C 80A9 SJMP ??osalAddTimer_2
153 }
154 else
155 {
156 // Add it to the end of the timer list
157 srchTimer = timerHead;
158
159 // Stop at the last record
160 while ( srchTimer->next )
161 srchTimer = srchTimer->next;
\ ??osalAddTimer_8:
\ 00007E 12.... LCALL ?Subroutine2 & 0xFFFF
\ ??CrossCallReturnLabel_6:
\ 000081 8882 MOV DPL,R0
\ 000083 8983 MOV DPH,R1
\ 000085 E0 MOVX A,@DPTR
\ 000086 7002 JNZ ??osalAddTimer_9
\ 000088 A3 INC DPTR
\ 000089 E0 MOVX A,@DPTR
\ ??osalAddTimer_9:
\ 00008A 8882 MOV DPL,R0
\ 00008C 8983 MOV DPH,R1
\ 00008E 80E6 SJMP ??osalAddTimer_7
162
163 // Add to the list
164 srchTimer->next = newTimer;
165 }
166
167 return ( newTimer );
168 }
169 else
170 return ( (osalTimerRec_t *)NULL );
\ ??osalAddTimer_5:
\ 000090 7A00 MOV R2,#0x0
\ 000092 7B00 MOV R3,#0x0
\ ??osalAddTimer_3:
\ 000094 7F06 MOV R7,#0x6
\ 000096 02.... LJMP ?BANKED_LEAVE_XDATA
171 }
172 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine2:
\ 000000 E0 MOVX A,@DPTR
\ 000001 F8 MOV R0,A
\ 000002 A3 INC DPTR
\ 000003 E0 MOVX A,@DPTR
\ 000004 F9 MOV R1,A
\ 000005 22 RET
173
174 /*********************************************************************
175 * @fn osalFindTimer
176 *
177 * @brief Find a timer in a timer list.
178 * Ints must be disabled.
179 *
180 * @param task_id
181 * @param event_flag
182 *
183 * @return osalTimerRec_t *
184 */
\ In segment BANKED_CODE, align 1, keep-with-next
185 osalTimerRec_t *osalFindTimer( byte task_id, uint16 event_flag )
\ osalFindTimer:
186 {
\ 000000 74F7 MOV A,#-0x9
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 9
\ 000005 ; Auto size: 0
187 osalTimerRec_t *srchTimer;
188
189 // Head of the timer list
190 srchTimer = timerHead;
\ 000005 90.... MOV DPTR,#timerHead
\ 000008 8004 SJMP ??osalFindTimer_0
191
192 // Stop when found or at the end
193 while ( srchTimer )
194 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -