Functions | |||
![]() | ![]() | wakeup_t | sem_event_wait (wakeup_t data) |
![]() | ![]() | the semaphore event wakeup function for wait_event(). More... | |
![]() | ![]() | int | sem_wait (sem_t * sem) |
![]() | ![]() | wait on a semaphore. More... | |
![]() | ![]() | int | sem_trywait (sem_t * sem) |
![]() | ![]() | non-blocking check on a semaphore. More... | |
![]() | ![]() | __asm__ (" .text .align 1 .globl _sem_trywait _sem_trywait: stc ccr,r1h ; save flags orc #0x80,ccr ; block all but NMI mov.b @r0,r1l beq sem_fail ; !=0 -> decrease, return 0 dec r1l mov.b r1l,@r0 sub.w r0,r0 bra sem_ok sem_fail:mov #0xffff,r0 ; else return 0xffff sem_ok:ldc r1h,ccr ; restore flags rts ") | |
![]() | ![]() | int | sem_post (sem_t * sem) |
![]() | ![]() | increase semaphore count. More... | |
![]() | ![]() | __asm__ (" .text .align 1 .globl _sem_post _sem_post: stc ccr,r1h ; save flags orc #0x80,ccr ; disable all but NMI mov.b @r0,r1l inc r1l mov.b r1l,@r0 ldc r1h,ccr ; restore flags sub r0,r0 ; return 0 rts ") |
wakeup_t sem_event_wait (wakeup_t data) |
the semaphore event wakeup function for wait_event().
data | pointer to the semaphore passed as a wakeup_t |
int sem_wait (sem_t * sem) |
wait on a semaphore.
sem |
a valid semaphore
|
implemented with wait_event().
int sem_trywait (sem_t * sem) |
non-blocking check on a semaphore.
sem |
a valid semaphore
|
this is IRQ handler safe.
__asm__ (".text.align 1.globl _sem_trywait_sem_trywait:stc ccr, r1h;save flags orc# 0x80, ccr;block all but NMI mov.b@ r0, r1l beq sem_fail;! = 0 -, decrease, return 0 dec r1l mov. b r1l, @r0 sub. w r0, r0 bra sem_ok sem_fail:mov# 0xffff, r0;else return 0xffff sem_ok:ldc r1h, ccr;restore flags rts") |
int sem_post (sem_t * sem) |
increase semaphore count.
sem |
a valid semaphore
|
__asm__ (".text.align 1.globl _sem_post_sem_post:stc ccr, r1h;save flags orc# 0x80, ccr;disable all but NMI mov.b@ r0, r1l inc r1l mov. b r1l, @ r0 ldc r1h, ccr; restore flags sub r0, r0;return 0 rts") |