📄 os_sem.ls1
字号:
358 ; *
359 ; * Arguments : pevent is a pointer to the event control block associated with the
desired
360 ; * semaphore.
361 ; *
362 ; * Returns : OS_NO_ERR The call was successful and the semaphore was signaled
.
A51 MACRO ASSEMBLER OS_SEM 08/08/2005 11:36:53 PAGE 8
363 ; * OS_SEM_OVF If the semaphore count exceeded its limit. In other w
ords, you have
364 ; * signalled the semaphore more often than you waited on
it with either
365 ; * OSSemAccept() or OSSemPend().
366 ; * OS_ERR_EVENT_TYPE If you didn't pass a pointer to a semaphore
367 ; * OS_ERR_PEVENT_NULL If 'pevent' is a NULL pointer.
368 ; *****************************************************************************************
****************
369 ; */
370 ;
371 ; INT8U OSSemPost (OS_EVENT *pevent)
372 ; {
373 ;
374 ;
375 ;
376 ; #if OS_ARG_CHK_EN > 0
377 ; if (pevent == (OS_EVENT *)0) { /* Validate 'pevent'
*/
378 ; return (OS_ERR_PEVENT_NULL);
379 ; }
380 ; if (pevent->OSEventType != OS_EVENT_TYPE_SEM) { /* Validate event block type
*/
381 ; return (OS_ERR_EVENT_TYPE);
382 ; }
383 ; #endif
384 ; OS_ENTER_CRITICAL();
385 ; if (pevent->OSEventGrp != 0x00) { /* See if any task waiting for
semaphore */
386 ; OS_EventTaskRdy(pevent, (void *)0, OS_STAT_SEM); /* Ready highest prio task wai
ting on event */
387 ; OS_EXIT_CRITICAL();
388 ; OS_Sched(); /* Find highest priority task
ready to run */
389 ; return (OS_NO_ERR);
390 ; }
391 ; if (pevent->OSEventCnt < 65535) { /* Make sure semaphore will not ove
rflow */
392 ; pevent->OSEventCnt++; /* Increment semaphore count to reg
ister event */
393 ; OS_EXIT_CRITICAL();
394 ; return (OS_NO_ERR);
395 ; }
396 ; OS_EXIT_CRITICAL(); /* Semaphore value has reached its
maximum */
397 ; return (OS_SEM_OVF);
398 ; }
399 ; /*$PAGE*/
400 ; /*
401 ; *****************************************************************************************
****************
402 ; * QUERY A SEMAPHORE
403 ; *
404 ; * Description: This function obtains information about a semaphore
405 ; *
406 ; * Arguments : pevent is a pointer to the event control block associated with the
desired
407 ; * semaphore
408 ; *
409 ; * pdata is a pointer to a structure that will contain information ab
out the
410 ; * semaphore.
411 ; *
412 ; * Returns : OS_NO_ERR The call was successful and the message was sent
413 ; * OS_ERR_EVENT_TYPE If you are attempting to obtain data from a non semaph
ore.
A51 MACRO ASSEMBLER OS_SEM 08/08/2005 11:36:53 PAGE 9
414 ; * OS_ERR_PEVENT_NULL If 'pevent' is a NULL pointer.
415 ; *****************************************************************************************
****************
416 ; */
417 ;
418 ; #if OS_SEM_QUERY_EN > 0
419 ; INT8U OSSemQuery (OS_EVENT *pevent, OS_SEM_DATA *ppdata)
420 ; {
421 ;
422 ; INT8U *psrc;
423 ; INT8U *pdest;
424 ;
425 ;
426 ; #if OS_ARG_CHK_EN > 0
427 ; if (pevent == (OS_EVENT *)0) { /* Validate 'pevent'
*/
428 ; return (OS_ERR_PEVENT_NULL);
429 ; }
430 ; if (pevent->OSEventType != OS_EVENT_TYPE_SEM) { /* Validate event block type
*/
431 ; return (OS_ERR_EVENT_TYPE);
432 ; }
433 ; #endif
434 ; OS_ENTER_CRITICAL();
435 ; ppdata->OSEventGrp = pevent->OSEventGrp; /* Copy message mailbox wait
list */
436 ; psrc = &pevent->OSEventTbl[0];
437 ; pdest = &ppdata->OSEventTbl[0];
438 ; #if OS_EVENT_TBL_SIZE > 0
439 ; *pdest++ = *psrc++;
440 ; #endif
441 ;
442 ; #if OS_EVENT_TBL_SIZE > 1
443 ; *pdest++ = *psrc++;
444 ; #endif
445 ;
446 ; #if OS_EVENT_TBL_SIZE > 2
447 ; *pdest++ = *psrc++;
448 ; #endif
449 ;
450 ; #if OS_EVENT_TBL_SIZE > 3
451 ; *pdest++ = *psrc++;
452 ; #endif
453 ;
454 ; #if OS_EVENT_TBL_SIZE > 4
455 ; *pdest++ = *psrc++;
456 ; #endif
457 ;
458 ; #if OS_EVENT_TBL_SIZE > 5
459 ; *pdest++ = *psrc++;
460 ; #endif
461 ;
462 ; #if OS_EVENT_TBL_SIZE > 6
463 ; *pdest++ = *psrc++;
464 ; #endif
465 ;
466 ; #if OS_EVENT_TBL_SIZE > 7
467 ; *pdest = *psrc;
468 ; #endif
469 ; ppdata->OSCnt = pevent->OSEventCnt; /* Get semaphore count
*/
470 ; OS_EXIT_CRITICAL();
471 ; return (OS_NO_ERR);
472 ; }
473 ; #endif /* OS_SEM_QUERY_EN
*/
A51 MACRO ASSEMBLER OS_SEM 08/08/2005 11:36:53 PAGE 10
474 ; #endif /* OS_SEM_EN
*/
475 ; *** sync lost ***
476 ; *** sync lost ***
477 ; *** sync lost ***
478 END
A51 MACRO ASSEMBLER OS_SEM 08/08/2005 11:36:53 PAGE 11
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
AC . . . . . . . . B ADDR 00D0H.6 A
ACC. . . . . . . . D ADDR 00E0H A
B. . . . . . . . . D ADDR 00F0H A
CY . . . . . . . . B ADDR 00D0H.7 A
DPH. . . . . . . . D ADDR 0083H A
DPL. . . . . . . . D ADDR 0082H A
EA . . . . . . . . B ADDR 00A8H.7 A
ES . . . . . . . . B ADDR 00A8H.4 A
ET0. . . . . . . . B ADDR 00A8H.1 A
ET1. . . . . . . . B ADDR 00A8H.3 A
EX0. . . . . . . . B ADDR 00A8H.0 A
EX1. . . . . . . . B ADDR 00A8H.2 A
F0 . . . . . . . . B ADDR 00D0H.5 A
IE . . . . . . . . D ADDR 00A8H A
IE0. . . . . . . . B ADDR 0088H.1 A
IE1. . . . . . . . B ADDR 0088H.3 A
INT0 . . . . . . . B ADDR 00B0H.2 A
INT1 . . . . . . . B ADDR 00B0H.3 A
IP . . . . . . . . D ADDR 00B8H A
IT0. . . . . . . . B ADDR 0088H.0 A
IT1. . . . . . . . B ADDR 0088H.2 A
OS_SEM . . . . . . N NUMB -----
OV . . . . . . . . B ADDR 00D0H.2 A
P. . . . . . . . . B ADDR 00D0H.0 A
P0 . . . . . . . . D ADDR 0080H A
P1 . . . . . . . . D ADDR 0090H A
P2 . . . . . . . . D ADDR 00A0H A
P3 . . . . . . . . D ADDR 00B0H A
PCON . . . . . . . D ADDR 0087H A
PS . . . . . . . . B ADDR 00B8H.4 A
PSW. . . . . . . . D ADDR 00D0H A
PT0. . . . . . . . B ADDR 00B8H.1 A
PT1. . . . . . . . B ADDR 00B8H.3 A
PX0. . . . . . . . B ADDR 00B8H.0 A
PX1. . . . . . . . B ADDR 00B8H.2 A
RB8. . . . . . . . B ADDR 0098H.2 A
RD . . . . . . . . B ADDR 00B0H.7 A
REN. . . . . . . . B ADDR 0098H.4 A
RI . . . . . . . . B ADDR 0098H.0 A
RS0. . . . . . . . B ADDR 00D0H.3 A
RS1. . . . . . . . B ADDR 00D0H.4 A
RXD. . . . . . . . B ADDR 00B0H.0 A
SBUF . . . . . . . D ADDR 0099H A
SCON . . . . . . . D ADDR 0098H A
SM0. . . . . . . . B ADDR 0098H.7 A
SM1. . . . . . . . B ADDR 0098H.6 A
SM2. . . . . . . . B ADDR 0098H.5 A
SP . . . . . . . . D ADDR 0081H A
T0 . . . . . . . . B ADDR 00B0H.4 A
T1 . . . . . . . . B ADDR 00B0H.5 A
TB8. . . . . . . . B ADDR 0098H.3 A
TCON . . . . . . . D ADDR 0088H A
TF0. . . . . . . . B ADDR 0088H.5 A
TF1. . . . . . . . B ADDR 0088H.7 A
TH0. . . . . . . . D ADDR 008CH A
TH1. . . . . . . . D ADDR 008DH A
TI . . . . . . . . B ADDR 0098H.1 A
TL0. . . . . . . . D ADDR 008AH A
TL1. . . . . . . . D ADDR 008BH A
TMOD . . . . . . . D ADDR 0089H A
A51 MACRO ASSEMBLER OS_SEM 08/08/2005 11:36:53 PAGE 12
TR0. . . . . . . . B ADDR 0088H.4 A
TR1. . . . . . . . B ADDR 0088H.6 A
TXD. . . . . . . . B ADDR 00B0H.1 A
WR . . . . . . . . B ADDR 00B0H.6 A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -