📄 os_core.lst
字号:
\ 0000003C 000056E3 CMP R6,#+0
\ 00000040 0300001A BNE ??OSEventNameGet_4
126 *err = OS_ERR_PNAME_NULL;
\ 00000044 0C00A0E3 MOV R0,#+12
\ 00000048 0000C4E5 STRB R0,[R4, #+0]
127 return (0);
\ 0000004C 0000A0E3 MOV R0,#+0
\ 00000050 160000EA B ??OSEventNameGet_2
128 }
129 #endif
130 switch (pevent->OSEventType) {
\ ??OSEventNameGet_4:
\ 00000054 0000D5E5 LDRB R0,[R5, #+0]
\ 00000058 010040E2 SUB R0,R0,#+1
\ 0000005C 030050E3 CMP R0,#+3
\ 00000060 0F00008A BHI ??OSEventNameGet_5
\ 00000064 011F8FE2 ADR R1,??OSEventNameGet_0
\ 00000068 0010D1E7 LDRB R1,[R1, R0]
\ 0000006C 01F18FE0 ADD PC,PC,R1, LSL #+2
\ ??OSEventNameGet_0:
\ 00000070 00000000 DC8 +0,+0,+0,+0
131 case OS_EVENT_TYPE_SEM:
132 case OS_EVENT_TYPE_MUTEX:
133 case OS_EVENT_TYPE_MBOX:
134 case OS_EVENT_TYPE_Q:
135 break;
136
137 default:
138 *err = OS_ERR_EVENT_TYPE;
139 return (0);
140 }
141 OS_ENTER_CRITICAL();
\ ??OSEventNameGet_6:
\ 00000074 ........ _BLF OS_CPU_SR_Save,??OS_CPU_SR_Save??rA
\ 00000078 0070B0E1 MOVS R7,R0
142 len = OS_StrCopy(pname, pevent->OSEventName); /* Copy name from OS_EVENT */
\ 0000007C 0F1095E2 ADDS R1,R5,#+15
\ 00000080 0600B0E1 MOVS R0,R6
\ 00000084 ........ BL OS_StrCopy
\ 00000088 0050B0E1 MOVS R5,R0
143 OS_EXIT_CRITICAL();
\ 0000008C 0700B0E1 MOVS R0,R7
\ 00000090 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
144 *err = OS_ERR_NONE;
\ 00000094 0000A0E3 MOV R0,#+0
\ 00000098 0000C4E5 STRB R0,[R4, #+0]
145 return (len);
\ 0000009C 0500B0E1 MOVS R0,R5
\ 000000A0 020000EA B ??OSEventNameGet_2
\ ??OSEventNameGet_5:
\ 000000A4 0100A0E3 MOV R0,#+1
\ 000000A8 0000C4E5 STRB R0,[R4, #+0]
\ 000000AC 0000A0E3 MOV R0,#+0
\ ??OSEventNameGet_2:
\ 000000B0 F080BDE8 POP {R4-R7,PC} ;; return
146 }
147 #endif
148
149 /*$PAGE*/
150 /*
151 *********************************************************************************************************
152 * ASSIGN A NAME TO A SEMAPHORE, MUTEX, MAILBOX or QUEUE
153 *
154 * Description: This function assigns a name to a semaphore, mutex, mailbox or queue.
155 *
156 * Arguments : pevent is a pointer to the event group. 'pevent' can point either to a semaphore,
157 * a mutex, a mailbox or a queue. Where this function is concerned, it doesn't
158 * matter the actual type.
159 *
160 * pname is a pointer to an ASCII string that will be used as the name of the semaphore,
161 * mutex, mailbox or queue. The string must be able to hold at least
162 * OS_EVENT_NAME_SIZE characters.
163 *
164 * err is a pointer to an error code that can contain one of the following values:
165 *
166 * OS_ERR_NONE if the requested task is resumed
167 * OS_ERR_EVENT_TYPE if 'pevent' is not pointing to the proper event
168 * control block type.
169 * OS_ERR_PNAME_NULL You passed a NULL pointer for 'pname'
170 * OS_ERR_PEVENT_NULL if you passed a NULL pointer for 'pevent'
171 *
172 * Returns : None
173 *********************************************************************************************************
174 */
175
176 #if OS_EVENT_EN && (OS_EVENT_NAME_SIZE > 1)
\ In segment CODE, align 4, keep-with-next
177 void OSEventNameSet (OS_EVENT *pevent, INT8U *pname, INT8U *err)
178 {
\ OSEventNameSet:
\ 00000000 F0402DE9 PUSH {R4-R7,LR}
\ 00000004 0050B0E1 MOVS R5,R0
\ 00000008 0160B0E1 MOVS R6,R1
\ 0000000C 0240B0E1 MOVS R4,R2
179 INT8U len;
180 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
181 OS_CPU_SR cpu_sr = 0;
\ 00000010 0070A0E3 MOV R7,#+0
182 #endif
183
184
185
186 #if OS_ARG_CHK_EN > 0
187 if (err == (INT8U *)0) { /* Validate 'err' */
\ 00000014 000054E3 CMP R4,#+0
\ 00000018 2600000A BEQ ??OSEventNameSet_1
188 return;
189 }
190 if (pevent == (OS_EVENT *)0) { /* Is 'pevent' a NULL pointer? */
\ 0000001C 000055E3 CMP R5,#+0
\ 00000020 0200001A BNE ??OSEventNameSet_2
191 *err = OS_ERR_PEVENT_NULL;
\ 00000024 0400A0E3 MOV R0,#+4
\ 00000028 0000C4E5 STRB R0,[R4, #+0]
192 return;
\ 0000002C 210000EA B ??OSEventNameSet_1
193 }
194 if (pname == (INT8U *)0) { /* Is 'pname' a NULL pointer? */
\ ??OSEventNameSet_2:
\ 00000030 000056E3 CMP R6,#+0
\ 00000034 0200001A BNE ??OSEventNameSet_3
195 *err = OS_ERR_PNAME_NULL;
\ 00000038 0C00A0E3 MOV R0,#+12
\ 0000003C 0000C4E5 STRB R0,[R4, #+0]
196 return;
\ 00000040 1C0000EA B ??OSEventNameSet_1
197 }
198 #endif
199 switch (pevent->OSEventType) {
\ ??OSEventNameSet_3:
\ 00000044 0000D5E5 LDRB R0,[R5, #+0]
\ 00000048 010040E2 SUB R0,R0,#+1
\ 0000004C 030050E3 CMP R0,#+3
\ 00000050 0E00008A BHI ??OSEventNameSet_4
\ 00000054 011F8FE2 ADR R1,??OSEventNameSet_0
\ 00000058 0010D1E7 LDRB R1,[R1, R0]
\ 0000005C 01F18FE0 ADD PC,PC,R1, LSL #+2
\ ??OSEventNameSet_0:
\ 00000060 00000000 DC8 +0,+0,+0,+0
200 case OS_EVENT_TYPE_SEM:
201 case OS_EVENT_TYPE_MUTEX:
202 case OS_EVENT_TYPE_MBOX:
203 case OS_EVENT_TYPE_Q:
204 break;
205
206 default:
207 *err = OS_ERR_EVENT_TYPE;
208 return;
209 }
210 OS_ENTER_CRITICAL();
\ ??OSEventNameSet_5:
\ 00000064 ........ _BLF OS_CPU_SR_Save,??OS_CPU_SR_Save??rA
\ 00000068 0070B0E1 MOVS R7,R0
211 len = OS_StrLen(pname); /* Can we fit the string in the storage area? */
\ 0000006C 0600B0E1 MOVS R0,R6
\ 00000070 ........ BL OS_StrLen
212 if (len > (OS_EVENT_NAME_SIZE - 1)) { /* No */
\ 00000074 100050E3 CMP R0,#+16
\ 00000078 0700003A BCC ??OSEventNameSet_6
213 OS_EXIT_CRITICAL();
\ 0000007C 0700B0E1 MOVS R0,R7
\ 00000080 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
214 *err = OS_ERR_EVENT_NAME_TOO_LONG;
\ 00000084 0B00A0E3 MOV R0,#+11
\ 00000088 0000C4E5 STRB R0,[R4, #+0]
215 return;
\ 0000008C 090000EA B ??OSEventNameSet_1
216 }
\ ??OSEventNameSet_4:
\ 00000090 0100A0E3 MOV R0,#+1
\ 00000094 0000C4E5 STRB R0,[R4, #+0]
\ 00000098 060000EA B ??OSEventNameSet_1
217 (void)OS_StrCopy(pevent->OSEventName, pname); /* Yes, copy name to the event control block */
\ ??OSEventNameSet_6:
\ 0000009C 0610B0E1 MOVS R1,R6
\ 000000A0 0F0095E2 ADDS R0,R5,#+15
\ 000000A4 ........ BL OS_StrCopy
218 OS_EXIT_CRITICAL();
\ 000000A8 0700B0E1 MOVS R0,R7
\ 000000AC ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
219 *err = OS_ERR_NONE;
\ 000000B0 0000A0E3 MOV R0,#+0
\ 000000B4 0000C4E5 STRB R0,[R4, #+0]
220 }
\ ??OSEventNameSet_1:
\ 000000B8 F080BDE8 POP {R4-R7,PC} ;; return
221 #endif
222
223 /*$PAGE*/
224 /*
225 *********************************************************************************************************
226 * INITIALIZATION
227 *
228 * Description: This function is used to initialize the internals of uC/OS-II and MUST be called prior to
229 * creating any uC/OS-II object and, prior to calling OSStart().
230 *
231 * Arguments : none
232 *
233 * Returns : none
234 *********************************************************************************************************
235 */
236
\ In segment CODE, align 4, keep-with-next
237 void OSInit (void)
238 {
\ OSInit:
\ 00000000 00402DE9 PUSH {LR}
239 #if OS_VERSION >= 204
240 OSInitHookBegin(); /* Call port specific initialization code */
\ 00000004 ........ _BLF OSInitHookBegin,??OSInitHookBegin??rA
241 #endif
242
243 OS_InitMisc(); /* Initialize miscellaneous variables */
\ 00000008 ........ BL OS_InitMisc
244
245 OS_InitRdyList(); /* Initialize the Ready List */
\ 0000000C ........ BL OS_InitRdyList
246
247 OS_InitTCBList(); /* Initialize the free list of OS_TCBs */
\ 00000010 ........ BL OS_InitTCBList
248
249 OS_InitEventList(); /* Initialize the free list of OS_EVENTs */
\ 00000014 ........ BL OS_InitEventList
250
251 #if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
252 OS_FlagInit(); /* Initialize the event flag structures */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -