void SemA ( uint32_t parameter ) { _mqx_uint sem_result; void *Sem1_handle; /* create semaphore - sem.Sem1 */ sem_result = _sem_create("sem.Sem1", 1, 0); if (sem_result != MQX_OK) { /* semaphore sem.Sem1 not be created */ } /* endif */ /* open connection to semaphore sem.Sem1 */ sem_result = _sem_open("sem.Sem1",&Sem1_handle); if (sem_result != MQX_OK) { /* could not open sem.Sem1 */ } /* endif */ /* ** LOOP - */ while ( TRUE ) { /* wait for semaphore sem.Sem1 */ sem_result = _sem_wait_ticks(Sem1_handle, NO_TIMEOUT); if (sem_result != MQX_OK) { /* waiting on semaphore sem.Sem1 failed */ } /* semaphore obtained, perform work */ _time_delay_ticks(1); /* semaphore protected work done, release semaphore */ sem_result = _sem_post(Sem1_handle); } /* endwhile */ } /*end of task*/
void write_task ( uint_32 initial_data ) { pointer write_sem; pointer read_sem; pointer index_sem; /* open connections to all the semaphores */ if (_sem_open("sem.write", &write_sem) != MQX_OK) { printf("\nOpening write semaphore failed."); _task_block(); } if (_sem_open("sem.index", &index_sem) != MQX_OK) { printf("\nOpening index semaphore failed."); _task_block(); } if (_sem_open("sem.read", &read_sem) != MQX_OK) { printf("\nOpening read semaphore failed."); _task_block(); } while (TRUE) { /* wait for the semphores */ if (_sem_wait(write_sem, 0) != MQX_OK) { printf("\nWwaiting for Write semaphore failed"); _task_block(); } if (_sem_wait(index_sem, 0) != MQX_OK) { printf("\nWaiting for index semaphore failed"); _task_block(); } fifo.DATA[fifo.WRITE_INDEX++] = _task_get_id(); if (fifo.WRITE_INDEX >= ARRAY_SIZE) { fifo.WRITE_INDEX = 0; } /* Post the semaphores */ _sem_post(index_sem); _sem_post(read_sem); } }
static int sem_unlock(lua_State *L) { sem_t *mutex; const char *semname = lua_tostring (L, 1); //open semaphore mutex = _sem_open(semname); //unlock semaphore _sem_unlock(mutex); //close semaphore _sem_close(mutex); return 0; }