📄 os_core.lst
字号:
137 default:
138 *err = OS_ERR_EVENT_TYPE;
139 return (0);
140 }
141 OS_ENTER_CRITICAL();
\ ??OSEventNameGet_6:
\ 00000078 ........ _BLF OS_CPU_SR_Save,??OS_CPU_SR_Save??rA
\ 0000007C 0080B0E1 MOVS R8,R0
142 len = OS_StrCopy(pname, pevent->OSEventName); /* Copy name from OS_EVENT */
\ 00000080 0F1094E2 ADDS R1,R4,#+15
\ 00000084 0500B0E1 MOVS R0,R5
\ 00000088 ........ BL OS_StrCopy
\ 0000008C 0070B0E1 MOVS R7,R0
143 OS_EXIT_CRITICAL();
\ 00000090 0800B0E1 MOVS R0,R8
\ 00000094 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
144 *err = OS_ERR_NONE;
\ 00000098 0000A0E3 MOV R0,#+0
\ 0000009C 0000C6E5 STRB R0,[R6, #+0]
145 return (len);
\ 000000A0 0700B0E1 MOVS R0,R7
\ 000000A4 020000EA B ??OSEventNameGet_2
\ ??OSEventNameGet_5:
\ 000000A8 0100A0E3 MOV R0,#+1
\ 000000AC 0000C6E5 STRB R0,[R6, #+0]
\ 000000B0 0000A0E3 MOV R0,#+0
\ ??OSEventNameGet_2:
\ 000000B4 F081BDE8 POP {R4-R8,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 F0412DE9 PUSH {R4-R8,LR}
\ 00000004 0040B0E1 MOVS R4,R0
\ 00000008 0150B0E1 MOVS R5,R1
\ 0000000C 0260B0E1 MOVS R6,R2
179 INT8U len;
180 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
181 OS_CPU_SR cpu_sr = 0;
\ 00000010 0000A0E3 MOV R0,#+0
\ 00000014 0080B0E1 MOVS R8,R0
182 #endif
183
184
185
186 #if OS_ARG_CHK_EN > 0
187 if (err == (INT8U *)0) { /* Validate 'err' */
\ 00000018 000056E3 CMP R6,#+0
\ 0000001C 2800000A BEQ ??OSEventNameSet_1
188 return;
189 }
190 if (pevent == (OS_EVENT *)0) { /* Is 'pevent' a NULL pointer? */
\ 00000020 000054E3 CMP R4,#+0
\ 00000024 0200001A BNE ??OSEventNameSet_2
191 *err = OS_ERR_PEVENT_NULL;
\ 00000028 0400A0E3 MOV R0,#+4
\ 0000002C 0000C6E5 STRB R0,[R6, #+0]
192 return;
\ 00000030 230000EA B ??OSEventNameSet_1
193 }
194 if (pname == (INT8U *)0) { /* Is 'pname' a NULL pointer? */
\ ??OSEventNameSet_2:
\ 00000034 000055E3 CMP R5,#+0
\ 00000038 0200001A BNE ??OSEventNameSet_3
195 *err = OS_ERR_PNAME_NULL;
\ 0000003C 0C00A0E3 MOV R0,#+12
\ 00000040 0000C6E5 STRB R0,[R6, #+0]
196 return;
\ 00000044 1E0000EA B ??OSEventNameSet_1
197 }
198 #endif
199 switch (pevent->OSEventType) {
\ ??OSEventNameSet_3:
\ 00000048 0000D4E5 LDRB R0,[R4, #+0]
\ 0000004C 010040E2 SUB R0,R0,#+1
\ 00000050 030050E3 CMP R0,#+3
\ 00000054 0B00008A BHI ??OSEventNameSet_4
\ 00000058 011F8FE2 ADR R1,??OSEventNameSet_0
\ 0000005C 0010D1E7 LDRB R1,[R1, R0]
\ 00000060 01F18FE0 ADD PC,PC,R1, LSL #+2
\ ??OSEventNameSet_0:
\ 00000064 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:
\ 00000068 ........ _BLF OS_CPU_SR_Save,??OS_CPU_SR_Save??rA
\ 0000006C 0080B0E1 MOVS R8,R0
211 len = OS_StrLen(pname); /* Can we fit the string in the storage area? */
\ 00000070 0500B0E1 MOVS R0,R5
\ 00000074 ........ BL OS_StrLen
\ 00000078 0070B0E1 MOVS R7,R0
212 if (len > (OS_EVENT_NAME_SIZE - 1)) { /* No */
\ 0000007C 100057E3 CMP R7,#+16
\ 00000080 0800003A BCC ??OSEventNameSet_6
\ 00000084 020000EA B ??OSEventNameSet_7
\ ??OSEventNameSet_4:
\ 00000088 0100A0E3 MOV R0,#+1
\ 0000008C 0000C6E5 STRB R0,[R6, #+0]
\ 00000090 0B0000EA B ??OSEventNameSet_1
213 OS_EXIT_CRITICAL();
\ ??OSEventNameSet_7:
\ 00000094 0800B0E1 MOVS R0,R8
\ 00000098 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
214 *err = OS_ERR_EVENT_NAME_TOO_LONG;
\ 0000009C 0B00A0E3 MOV R0,#+11
\ 000000A0 0000C6E5 STRB R0,[R6, #+0]
215 return;
\ 000000A4 060000EA B ??OSEventNameSet_1
216 }
217 (void)OS_StrCopy(pevent->OSEventName, pname); /* Yes, copy name to the event control block */
\ ??OSEventNameSet_6:
\ 000000A8 0510B0E1 MOVS R1,R5
\ 000000AC 0F0094E2 ADDS R0,R4,#+15
\ 000000B0 ........ BL OS_StrCopy
218 OS_EXIT_CRITICAL();
\ 000000B4 0800B0E1 MOVS R0,R8
\ 000000B8 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
219 *err = OS_ERR_NONE;
\ 000000BC 0000A0E3 MOV R0,#+0
\ 000000C0 0000C6E5 STRB R0,[R6, #+0]
220 }
\ ??OSEventNameSet_1:
\ 000000C4 F081BDE8 POP {R4-R8,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 */
\ 00000018 ........ _BLF OS_FlagInit,??OS_FlagInit??rA
253 #endif
254
255 #if (OS_MEM_EN > 0) && (OS_MAX_MEM_PART > 0)
256 OS_MemInit(); /* Initialize the memory manager */
\ 0000001C ........ _BLF OS_MemInit,??OS_MemInit??rA
257 #endif
258
259 #if (OS_Q_EN > 0) && (OS_MAX_QS > 0)
260 OS_QInit(); /* Initialize the message queue structures */
\ 00000020 ........ _BLF OS_QInit,??OS_QInit??rA
261 #endif
262
263 OS_InitTaskIdle(); /* Create the Idle Task */
\ 00000024 ........ BL OS_InitTaskIdle
264 #if OS_TASK_STAT_EN > 0
265 OS_InitTaskStat(); /* Create the Statistic Task */
\ 00000028 ........ BL OS_InitTaskStat
266 #endif
267
268 #if OS_TMR_EN > 0
269 OSTmr_Init(); /* Initialize the Timer Manager */
\ 0000002C ........ _BLF OSTmr_Init,??OSTmr_Init??rA
270 #endif
271
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -