nOS_Error nOS_SemCreate (nOS_Sem *sem, nOS_SemCounter count, nOS_SemCounter max) { nOS_Error err; #if (NOS_CONFIG_SAFE > 0) if (sem == NULL) { err = NOS_E_INV_OBJ; } else if (sem->e.type != NOS_EVENT_INVALID) { err = NOS_E_INV_OBJ; } else if (count > max) { err = NOS_E_INV_VAL; } else #endif { nOS_EnterCritical(); #if (NOS_CONFIG_SAFE > 0) nOS_CreateEvent((nOS_Event*)sem, NOS_EVENT_SEM); #else nOS_CreateEvent((nOS_Event*)sem); #endif sem->count = count; sem->max = max; nOS_LeaveCritical(); err = NOS_OK; } return err; }
nOS_Error nOS_FlagCreate (nOS_Flag *flag, nOS_FlagBits flags) { nOS_Error err; nOS_StatusReg sr; #if (NOS_CONFIG_SAFE > 0) if (flag == NULL) { err = NOS_E_INV_OBJ; } else #endif { nOS_EnterCritical(sr); #if (NOS_CONFIG_SAFE > 0) if (flag->e.type != NOS_EVENT_INVALID) { err = NOS_E_INV_OBJ; } else #endif { #if (NOS_CONFIG_SAFE > 0) nOS_CreateEvent((nOS_Event*)flag, NOS_EVENT_FLAG); #else nOS_CreateEvent((nOS_Event*)flag); #endif flag->flags = flags; err = NOS_OK; } nOS_LeaveCritical(sr); } return err; }
void nOS_InitTime (void) { #if (NOS_CONFIG_TIME_TICKS_PER_SECOND > 1) _timePrescaler = 0; #endif _timeCounter = 0; #if (NOS_CONFIG_TIME_WAIT_ENABLE > 0) #if (NOS_CONFIG_SAFE > 0) nOS_CreateEvent(&_timeEvent, NOS_EVENT_BASE); #else nOS_CreateEvent(&_timeEvent); #endif #endif }
nOS_Error nOS_QueueCreate (nOS_Queue *queue, void *buffer, uint8_t bsize, nOS_QueueCounter bmax) { nOS_Error err; nOS_StatusReg sr; #if (NOS_CONFIG_SAFE > 0) if (queue == NULL) { err = NOS_E_INV_OBJ; } else if (bsize == 0) { err = NOS_E_INV_VAL; } else if ((buffer != NULL) && (bmax == 0)) { err = NOS_E_INV_VAL; } else if ((buffer == NULL) && (bmax > 0)) { err = NOS_E_INV_VAL; } else #endif { nOS_EnterCritical(sr); #if (NOS_CONFIG_SAFE > 0) if (queue->e.type != NOS_EVENT_INVALID) { err = NOS_E_INV_OBJ; } else #endif { #if (NOS_CONFIG_SAFE > 0) nOS_CreateEvent((nOS_Event*)queue, NOS_EVENT_QUEUE); #else nOS_CreateEvent((nOS_Event*)queue); #endif queue->buffer = (uint8_t*)buffer; queue->bsize = bsize; queue->bcount = 0; queue->bmax = bmax; queue->r = 0; queue->w = 0; err = NOS_OK; } nOS_LeaveCritical(sr); } return err; }