📄 os_sem.lst
字号:
315 00aa 0E94 0000 call OS_EventTaskWait
275:os/source/os_sem.c **** OS_EXIT_CRITICAL();
317 .LM29:
318 /* #APP */
319 00ae 7894 sei
276:os/source/os_sem.c **** OS_Sched(); /* Find next highest priority task ready
321 .LM30:
322 /* #NOAPP */
323 00b0 0E94 0000 call OS_Sched
277:os/source/os_sem.c **** OS_ENTER_CRITICAL();
325 .LM31:
326 /* #APP */
327 00b4 F894 cli
278:os/source/os_sem.c **** if (OSTCBCur->OSTCBStat & OS_STAT_SEM) { /* Must have timed out if still waiting for e
329 .LM32:
330 /* #NOAPP */
331 00b6 E091 0000 lds r30,OSTCBCur
332 00ba F091 0000 lds r31,(OSTCBCur)+1
333 00be 808D ldd r24,Z+24
334 00c0 9927 clr r25
335 00c2 9C01 movw r18,r24
336 00c4 2170 andi r18,lo8(1)
337 00c6 3070 andi r19,hi8(1)
338 00c8 80FF sbrs r24,0
339 00ca 08C0 rjmp .L10
279:os/source/os_sem.c **** OS_EventTO(pevent);
341 .LM33:
342 00cc CE01 movw r24,r28
343 00ce 0E94 0000 call OS_EventTO
280:os/source/os_sem.c **** OS_EXIT_CRITICAL();
345 .LM34:
346 /* #APP */
347 00d2 7894 sei
281:os/source/os_sem.c **** *err = OS_TIMEOUT; /* Indicate that didn't get event within TO
349 .LM35:
350 /* #NOAPP */
351 00d4 8AE0 ldi r24,lo8(10)
352 .L12:
353 00d6 F801 movw r30,r16
354 00d8 8083 st Z,r24
282:os/source/os_sem.c **** return;
356 .LM36:
357 00da 05C0 rjmp .L7
358 .L10:
283:os/source/os_sem.c **** }
284:os/source/os_sem.c **** OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0;
360 .LM37:
361 00dc 338B std Z+19,r19
362 00de 228B std Z+18,r18
363 .L11:
285:os/source/os_sem.c **** OS_EXIT_CRITICAL();
365 .LM38:
366 /* #APP */
367 00e0 7894 sei
286:os/source/os_sem.c **** *err = OS_NO_ERR;
369 .LM39:
370 /* #NOAPP */
371 00e2 F801 movw r30,r16
372 00e4 F082 st Z,r15
373 .L7:
374 /* epilogue: frame size=0 */
375 00e6 DF91 pop r29
376 00e8 CF91 pop r28
377 00ea 1F91 pop r17
378 00ec 0F91 pop r16
379 00ee FF90 pop r15
380 00f0 0895 ret
381 /* epilogue end (size=6) */
382 /* function OSSemPend size 77 (66) */
384 .Lscope2:
387 .global OSSemPost
389 OSSemPost:
287:os/source/os_sem.c **** }
288:os/source/os_sem.c **** /*$PAGE*/
289:os/source/os_sem.c **** /*
290:os/source/os_sem.c **** ***************************************************************************************************
291:os/source/os_sem.c **** * POST TO A SEMAPHORE
292:os/source/os_sem.c **** *
293:os/source/os_sem.c **** * Description: This function signals a semaphore
294:os/source/os_sem.c **** *
295:os/source/os_sem.c **** * Arguments : pevent is a pointer to the event control block associated with the desired
296:os/source/os_sem.c **** * semaphore.
297:os/source/os_sem.c **** *
298:os/source/os_sem.c **** * Returns : OS_NO_ERR The call was successful and the semaphore was signaled.
299:os/source/os_sem.c **** * OS_SEM_OVF If the semaphore count exceeded its limit. In other words, you
300:os/source/os_sem.c **** * signalled the semaphore more often than you waited on it with ei
301:os/source/os_sem.c **** * OSSemAccept() or OSSemPend().
302:os/source/os_sem.c **** * OS_ERR_EVENT_TYPE If you didn't pass a pointer to a semaphore
303:os/source/os_sem.c **** * OS_ERR_PEVENT_NULL If 'pevent' is a NULL pointer.
304:os/source/os_sem.c **** ***************************************************************************************************
305:os/source/os_sem.c **** */
306:os/source/os_sem.c ****
307:os/source/os_sem.c **** INT8U OSSemPost (OS_EVENT *pevent)
308:os/source/os_sem.c **** {
391 .LM40:
392 /* prologue: frame size=0 */
393 /* prologue end (size=0) */
394 00f2 FC01 movw r30,r24
309:os/source/os_sem.c **** #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status regis
310:os/source/os_sem.c **** OS_CPU_SR cpu_sr;
311:os/source/os_sem.c **** #endif
312:os/source/os_sem.c ****
313:os/source/os_sem.c ****
314:os/source/os_sem.c **** #if OS_ARG_CHK_EN > 0
315:os/source/os_sem.c **** if (pevent == (OS_EVENT *)0) { /* Validate 'pevent'
316:os/source/os_sem.c **** return (OS_ERR_PEVENT_NULL);
317:os/source/os_sem.c **** }
318:os/source/os_sem.c **** if (pevent->OSEventType != OS_EVENT_TYPE_SEM) { /* Validate event block type
319:os/source/os_sem.c **** return (OS_ERR_EVENT_TYPE);
320:os/source/os_sem.c **** }
321:os/source/os_sem.c **** #endif
322:os/source/os_sem.c **** OS_ENTER_CRITICAL();
396 .LM41:
397 /* #APP */
398 00f4 F894 cli
323:os/source/os_sem.c **** if (pevent->OSEventGrp != 0x00) { /* See if any task waiting for semaphore
400 .LM42:
401 /* #NOAPP */
402 00f6 8181 ldd r24,Z+1
403 00f8 8823 tst r24
404 00fa 51F0 breq .L14
324:os/source/os_sem.c **** OS_EventTaskRdy(pevent, (void *)0, OS_STAT_SEM); /* Ready highest prio task waiting on ev
406 .LM43:
407 00fc 41E0 ldi r20,lo8(1)
408 00fe 60E0 ldi r22,lo8(0)
409 0100 70E0 ldi r23,hi8(0)
410 0102 CF01 movw r24,r30
411 0104 0E94 0000 call OS_EventTaskRdy
325:os/source/os_sem.c **** OS_EXIT_CRITICAL();
413 .LM44:
414 /* #APP */
415 0108 7894 sei
326:os/source/os_sem.c **** OS_Sched(); /* Find highest priority task ready to run
417 .LM45:
418 /* #NOAPP */
419 010a 0E94 0000 call OS_Sched
420 010e 0AC0 rjmp .L16
421 .L14:
327:os/source/os_sem.c **** return (OS_NO_ERR);
328:os/source/os_sem.c **** }
329:os/source/os_sem.c **** if (pevent->OSEventCnt < 65535) { /* Make sure semaphore will not overflow
423 .LM46:
424 0110 8281 ldd r24,Z+2
425 0112 9381 ldd r25,Z+3
426 0114 2FEF ldi r18,hi8(-1)
427 0116 8F3F cpi r24,lo8(-1)
428 0118 9207 cpc r25,r18
429 011a 39F0 breq .L15
330:os/source/os_sem.c **** pevent->OSEventCnt++; /* Increment semaphore count to register even
431 .LM47:
432 011c 0196 adiw r24,1
433 011e 9383 std Z+3,r25
434 0120 8283 std Z+2,r24
331:os/source/os_sem.c **** OS_EXIT_CRITICAL();
436 .LM48:
437 /* #APP */
438 0122 7894 sei
439 /* #NOAPP */
440 .L16:
332:os/source/os_sem.c **** return (OS_NO_ERR);
442 .LM49:
443 0124 80E0 ldi r24,lo8(0)
444 0126 90E0 ldi r25,hi8(0)
445 0128 0895 ret
446 .L15:
333:os/source/os_sem.c **** }
334:os/source/os_sem.c **** OS_EXIT_CRITICAL(); /* Semaphore value has reached its maximum
448 .LM50:
449 /* #APP */
450 012a 7894 sei
335:os/source/os_sem.c **** return (OS_SEM_OVF);
452 .LM51:
453 /* #NOAPP */
454 012c 82E3 ldi r24,lo8(50)
455 012e 90E0 ldi r25,hi8(50)
336:os/source/os_sem.c **** }
457 .LM52:
458 0130 0895 ret
459 /* epilogue: frame size=0 */
460 /* epilogue: noreturn */
461 /* epilogue end (size=0) */
462 /* function OSSemPost size 36 (36) */
464 .Lscope3:
465 .text
467 Letext:
468 /* File "os/source/os_sem.c": code 166 = 0x00a6 ( 149), prologues 7, epilogues 10 */
DEFINED SYMBOLS
*ABS*:00000000 os_sem.c
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc8Iaaaa.s:3 *ABS*:0000003f __SREG__
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc8Iaaaa.s:4 *ABS*:0000003e __SP_H__
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc8Iaaaa.s:5 *ABS*:0000003d __SP_L__
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc8Iaaaa.s:6 *ABS*:00000000 __tmp_reg__
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc8Iaaaa.s:7 *ABS*:00000001 __zero_reg__
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc8Iaaaa.s:133 .text:00000000 OSSemAccept
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc8Iaaaa.s:177 .text:00000018 OSSemCreate
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc8Iaaaa.s:259 .text:00000062 OSSemPend
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc8Iaaaa.s:389 .text:000000f2 OSSemPost
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc8Iaaaa.s:467 .text:00000132 Letext
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
OSIntNesting
OSEventFreeList
OS_EventWaitListInit
OSTCBCur
OS_EventTaskWait
OS_Sched
OS_EventTO
OS_EventTaskRdy
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -