From 6c18028a35db35c45c8c342d43abd74b13ef1605 Mon Sep 17 00:00:00 2001 From: Giovanni Di Sirio Date: Sat, 4 Nov 2017 19:23:04 +0000 Subject: git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@10946 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/common/abstractions/cmsis_os/cmsis_os.c | 24 ++++++------ os/common/oslib/src/chfactory.c | 4 +- os/nil/include/ch.h | 62 +++++++++++++++++++++++++++++- os/nil/nil.mk | 12 ++++-- os/rt/rt.mk | 3 +- 5 files changed, 85 insertions(+), 20 deletions(-) (limited to 'os') diff --git a/os/common/abstractions/cmsis_os/cmsis_os.c b/os/common/abstractions/cmsis_os/cmsis_os.c index a871b761f..a01ebc0e0 100644 --- a/os/common/abstractions/cmsis_os/cmsis_os.c +++ b/os/common/abstractions/cmsis_os/cmsis_os.c @@ -68,7 +68,7 @@ static void timer_cb(void const *arg) { timer_id->ptimer(timer_id->argument); if (timer_id->type == osTimerPeriodic) { chSysLockFromISR(); - chVTDoSetI(&timer_id->vt, MS2ST(timer_id->millisec), + chVTDoSetI(&timer_id->vt, TIME_MS2I(timer_id->millisec), (vtfunc_t)timer_cb, timer_id); chSysUnlockFromISR(); } @@ -226,7 +226,7 @@ osStatus osTimerStart(osTimerId timer_id, uint32_t millisec) { return osErrorValue; timer_id->millisec = millisec; - chVTSet(&timer_id->vt, MS2ST(millisec), (vtfunc_t)timer_cb, timer_id); + chVTSet(&timer_id->vt, TIME_MS2I(millisec), (vtfunc_t)timer_cb, timer_id); return osOK; } @@ -287,8 +287,8 @@ int32_t osSignalClear(osThreadId thread_id, int32_t signals) { */ osEvent osSignalWait(int32_t signals, uint32_t millisec) { osEvent event; - systime_t timeout = ((millisec == 0) || (millisec == osWaitForever)) ? - TIME_INFINITE : MS2ST(millisec); + sysinterval_t timeout = ((millisec == 0) || (millisec == osWaitForever)) ? + TIME_INFINITE : TIME_MS2I(millisec); if (signals == 0) event.value.signals = (uint32_t)chEvtWaitAnyTimeout(ALL_EVENTS, timeout); @@ -324,8 +324,8 @@ osSemaphoreId osSemaphoreCreate(const osSemaphoreDef_t *semaphore_def, * @brief Wait on a semaphore. */ int32_t osSemaphoreWait(osSemaphoreId semaphore_id, uint32_t millisec) { - systime_t timeout = ((millisec == 0) || (millisec == osWaitForever)) ? - TIME_INFINITE : MS2ST(millisec); + sysinterval_t timeout = ((millisec == 0) || (millisec == osWaitForever)) ? + TIME_INFINITE : TIME_MS2I(millisec); msg_t msg = chSemWaitTimeout((semaphore_t *)semaphore_id, timeout); switch (msg) { @@ -380,8 +380,8 @@ osMutexId osMutexCreate(const osMutexDef_t *mutex_def) { * @brief Wait on a mutex. */ osStatus osMutexWait(osMutexId mutex_id, uint32_t millisec) { - systime_t timeout = ((millisec == 0) || (millisec == osWaitForever)) ? - TIME_INFINITE : MS2ST(millisec); + sysinterval_t timeout = ((millisec == 0) || (millisec == osWaitForever)) ? + TIME_INFINITE : TIME_MS2I(millisec); msg_t msg = chBSemWaitTimeout((binary_semaphore_t *)mutex_id, timeout); switch (msg) { @@ -495,8 +495,8 @@ osStatus osMessagePut(osMessageQId queue_id, uint32_t info, uint32_t millisec) { msg_t msg; - systime_t timeout = ((millisec == 0) || (millisec == osWaitForever)) ? - TIME_INFINITE : MS2ST(millisec); + sysinterval_t timeout = ((millisec == 0) || (millisec == osWaitForever)) ? + TIME_INFINITE : TIME_MS2I(millisec); if (port_is_isr_context()) { @@ -522,8 +522,8 @@ osEvent osMessageGet(osMessageQId queue_id, uint32_t millisec) { msg_t msg; osEvent event; - systime_t timeout = ((millisec == 0) || (millisec == osWaitForever)) ? - TIME_INFINITE : MS2ST(millisec); + sysinterval_t timeout = ((millisec == 0) || (millisec == osWaitForever)) ? + TIME_INFINITE : TIME_MS2I(millisec); event.def.message_id = queue_id; diff --git a/os/common/oslib/src/chfactory.c b/os/common/oslib/src/chfactory.c index 74e80e528..6e187c929 100644 --- a/os/common/oslib/src/chfactory.c +++ b/os/common/oslib/src/chfactory.c @@ -56,8 +56,8 @@ #define F_LOCK() chMtxLock(&ch_factory.mtx) #define F_UNLOCK() chMtxUnlock(&ch_factory.mtx) #else -#define F_LOCK() (void) chSemWait(ch_factory.sem) -#define F_UNLOCK() chSemSignal(ch_factory.sem) +#define F_LOCK() (void) chSemWait(&ch_factory.sem) +#define F_UNLOCK() chSemSignal(&ch_factory.sem) #endif /*===========================================================================*/ diff --git a/os/nil/include/ch.h b/os/nil/include/ch.h index f413585af..b55133b9c 100644 --- a/os/nil/include/ch.h +++ b/os/nil/include/ch.h @@ -263,6 +263,60 @@ #if !defined(CH_CFG_USE_MEMPOOLS) || defined(__DOXYGEN__) #define CH_CFG_USE_MEMPOOLS TRUE #endif +/** + * @brief Objects Factory APIs. + * @details If enabled then the objects factory APIs are included in the + * kernel. + * + * @note The default is @p FALSE. + */ +#if !defined(CH_CFG_USE_FACTORY) || defined(__DOXYGEN__) +#define CH_CFG_USE_FACTORY TRUE +#endif + +/** + * @brief Maximum length for object names. + * @details If the specified length is zero then the name is stored by + * pointer but this could have unintended side effects. + */ +#if !defined(CH_CFG_FACTORY_MAX_NAMES_LENGTH) || defined(__DOXYGEN__) +#define CH_CFG_FACTORY_MAX_NAMES_LENGTH 8 +#endif + +/** + * @brief Enables the registry of generic objects. + */ +#if !defined(CH_CFG_FACTORY_OBJECTS_REGISTRY) || defined(__DOXYGEN__) +#define CH_CFG_FACTORY_OBJECTS_REGISTRY TRUE +#endif + +/** + * @brief Enables factory for generic buffers. + */ +#if !defined(CH_CFG_FACTORY_GENERIC_BUFFERS) || defined(__DOXYGEN__) +#define CH_CFG_FACTORY_GENERIC_BUFFERS TRUE +#endif + +/** + * @brief Enables factory for semaphores. + */ +#if !defined(CH_CFG_FACTORY_SEMAPHORES) || defined(__DOXYGEN__) +#define CH_CFG_FACTORY_SEMAPHORES TRUE +#endif + +/** + * @brief Enables factory for mailboxes. + */ +#if !defined(CH_CFG_FACTORY_MAILBOXES) || defined(__DOXYGEN__) +#define CH_CFG_FACTORY_MAILBOXES TRUE +#endif + +/** + * @brief Enables factory for objects FIFOs. + */ +#if !defined(CH_CFG_FACTORY_OBJ_FIFOS) || defined(__DOXYGEN__) +#define CH_CFG_FACTORY_OBJ_FIFOS TRUE +#endif /*-* * @brief Debug option, kernel statistics. @@ -414,6 +468,10 @@ #error "missing or wrong configuration file" #endif +#if !defined(_CHIBIOS_NIL_CONF_VER_3_0_) +#error "obsolete or unknown configuration file" +#endif + #if CH_CFG_NUM_THREADS < 1 #error "at least one thread must be defined" #endif @@ -1501,8 +1559,10 @@ extern "C" { /* Optional subsystems.*/ #include "chmboxes.h" #include "chmemcore.h" -#include "chmempools.h" #include "chheap.h" +#include "chmempools.h" +#include "chfifo.h" +#include "chfactory.h" #endif /* CH_H */ diff --git a/os/nil/nil.mk b/os/nil/nil.mk index f0717ba68..800b702c8 100644 --- a/os/nil/nil.mk +++ b/os/nil/nil.mk @@ -15,12 +15,16 @@ endif ifneq ($(findstring CH_CFG_USE_MEMPOOLS TRUE,$(CHCONF)),) KERNSRC += $(CHIBIOS)/os/common/oslib/src/chmempools.c endif +ifneq ($(findstring CH_CFG_USE_FACTORY TRUE,$(CHCONF)),) +KERNSRC += $(CHIBIOS)/os/common/oslib/src/chfactory.c +endif else KERNSRC := ${CHIBIOS}/os/nil/src/ch.c \ - ${CHIBIOS}/os/common/oslib/src/chmboxes.c \ - ${CHIBIOS}/os/common/oslib/src/chmemcore.c \ - ${CHIBIOS}/os/common/oslib/src/chmempools.c \ - ${CHIBIOS}/os/common/oslib/src/chheap.c + $(CHIBIOS)/os/common/oslib/src/chmboxes.c \ + $(CHIBIOS)/os/common/oslib/src/chmemcore.c \ + $(CHIBIOS)/os/common/oslib/src/chheap.c \ + $(CHIBIOS)/os/common/oslib/src/chmempools.c \ + $(CHIBIOS)/os/common/oslib/src/chfactory.c endif # Required include directories diff --git a/os/rt/rt.mk b/os/rt/rt.mk index 85607b4c4..039963891 100644 --- a/os/rt/rt.mk +++ b/os/rt/rt.mk @@ -76,7 +76,8 @@ KERNSRC := $(CHIBIOS)/os/rt/src/chsys.c \ $(CHIBIOS)/os/common/oslib/src/chmboxes.c \ $(CHIBIOS)/os/common/oslib/src/chmemcore.c \ $(CHIBIOS)/os/common/oslib/src/chheap.c \ - $(CHIBIOS)/os/common/oslib/src/chmempools.c + $(CHIBIOS)/os/common/oslib/src/chmempools.c \ + $(CHIBIOS)/os/common/oslib/src/chfactory.c endif # Required include directories -- cgit v1.2.3