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 main_task ( uint32_t initial_data ) { _task_id task_id; _mqx_uint i; fifo.READ_INDEX = 0; fifo.WRITE_INDEX = 0; /* Create the semaphores */ if (_sem_create_component(3,1,6) != MQX_OK) { printf("\nCreate semaphore component failed"); _task_block(); } if (_sem_create("sem.write", ARRAY_SIZE, 0) != MQX_OK) { printf("\nCreating write semaphore failed"); _task_block(); } if (_sem_create("sem.read", 0, 0) != MQX_OK) { printf("\nCreating read semaphore failed"); _task_block(); } if (_sem_create("sem.index", 1, 0) != MQX_OK) { printf("\nCreating index semaphore failed"); _task_block(); } /* Create the tasks */ for (i = 0; i < NUM_WRITERS; i++) { task_id = _task_create(0, WRITE_TASK, (uint32_t)i); printf("\nwrite_task created, id 0x%lx", task_id); } task_id = _task_create(0,READ_TASK, 0); printf("\nread_task created, id 0x%lX", task_id); _task_block(); }
static int sem_new(lua_State *L) { sem_t *mutex; const char *semname = lua_tostring (L, 1); //delete semaphore _sem_delete(semname); //create semaphore mutex = _sem_create(semname); //close semaphore _sem_close(mutex); return 0; }