aboutsummaryrefslogtreecommitdiffstats
path: root/os/common
diff options
context:
space:
mode:
authorGiovanni Di Sirio <gdisirio@gmail.com>2018-03-13 09:02:55 +0000
committerGiovanni Di Sirio <gdisirio@gmail.com>2018-03-13 09:02:55 +0000
commit074e213e8f48ebb660af1531b7d116c497b1f444 (patch)
treee8f2fba8c4ad8820de64bc784969d6718493b78d /os/common
parentd150be256b5e618dc052a19c28b6643c024e3ada (diff)
downloadChibiOS-074e213e8f48ebb660af1531b7d116c497b1f444.tar.gz
ChibiOS-074e213e8f48ebb660af1531b7d116c497b1f444.tar.bz2
ChibiOS-074e213e8f48ebb660af1531b7d116c497b1f444.zip
Unified OS Library header, preparation for separate subsystem.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@11718 110e8d01-0319-4d1e-a829-52ad28d1bb01
Diffstat (limited to 'os/common')
-rw-r--r--os/common/oslib/include/chlib.h184
-rw-r--r--os/common/oslib/include/chpreempt.h106
-rw-r--r--os/common/oslib/src/chpreempt.c153
-rw-r--r--os/common/oslib/templates/chlibconf.h126
4 files changed, 310 insertions, 259 deletions
diff --git a/os/common/oslib/include/chlib.h b/os/common/oslib/include/chlib.h
new file mode 100644
index 000000000..30ba56b72
--- /dev/null
+++ b/os/common/oslib/include/chlib.h
@@ -0,0 +1,184 @@
+/*
+ ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio.
+
+ This file is part of ChibiOS.
+
+ ChibiOS is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ ChibiOS is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/**
+ * @file chlib.h
+ * @brief ChibiOS/LIB main include file.
+ * @details This header includes all the required library headers. This file
+ * is meant do be included by @p ch.h not directly by user.
+ *
+ * @addtogroup library_info
+ * @details OS Library related info.
+ * @{
+ */
+
+#ifndef CHLIB_H
+#define CHLIB_H
+
+/* Tmeporary hack.*/
+#if !defined(_CHIBIOS_RT_CONF_VER_5_0_) && !defined(_CHIBIOS_NIL_CONF_VER_3_0_)
+#include "chlibconf.h"
+#else
+#define _CHIBIOS_LIB_CONF_
+#define _CHIBIOS_LIB_CONF_VER_1_0_
+#endif
+#include "chlicense.h"
+
+/*===========================================================================*/
+/* Module constants. */
+/*===========================================================================*/
+
+/**
+ * @brief ChibiOS/LIB identification macro.
+ */
+#define _CHIBIOS_LIB_
+
+/**
+ * @brief Stable release flag.
+ */
+#define CH_OSLIB_STABLE 0
+
+/**
+ * @name ChibiOS/LIB version identification
+ * @{
+ */
+/**
+ * @brief OS Library version string.
+ */
+#define CH_OSLIB_VERSION "1.0.0"
+
+/**
+ * @brief Kernel version major number.
+ */
+#define CH_OSLIB_MAJOR 1
+
+/**
+ * @brief Kernel version minor number.
+ */
+#define CH_OSLIB_MINOR 0
+
+/**
+ * @brief Kernel version patch number.
+ */
+#define CH_OSLIB_PATCH 0
+/** @} */
+
+/*===========================================================================*/
+/* Module pre-compile time settings. */
+/*===========================================================================*/
+
+/*===========================================================================*/
+/* Derived constants and error checks. */
+/*===========================================================================*/
+
+/* Host OS checks.*/
+#if !defined(_CHIBIOS_RT_) && !defined(_CHIBIOS_NIL_)
+#error "OS check failed, must be included after ch.h"
+#endif
+
+/* Configuration file checks.*/
+#if !defined(_CHIBIOS_LIB_CONF_)
+#error "invalid configuration file"
+#endif
+
+#if !defined(_CHIBIOS_LIB_CONF_VER_1_0_)
+#error "obsolete or unknown configuration file"
+#endif
+
+#if !defined(CH_CFG_USE_SEMAPHORES)
+#error "CH_CFG_USE_SEMAPHORES not defined in chconf.h"
+#endif
+
+#if !defined(CH_CFG_USE_MAILBOXES)
+#error "CH_CFG_USE_MAILBOXES not defined in chlibconf.h"
+#endif
+
+#if !defined(CH_CFG_USE_MEMCORE)
+#error "CH_CFG_USE_MEMCORE not defined in chlibconf.h"
+#endif
+
+#if !defined(CH_CFG_USE_HEAP)
+#error "CH_CFG_USE_HEAP not defined in chlibconf.h"
+#endif
+
+#if !defined(CH_CFG_USE_MEMPOOLS)
+#error "CH_CFG_USE_MEMPOOLS not defined in chlibconf.h"
+#endif
+
+#if !defined(CH_CFG_USE_OBJ_FIFOS)
+#error "CH_CFG_USE_OBJ_FIFOS not defined in chlibconf.h"
+#endif
+
+/* Objects factory options checks.*/
+#if !defined(CH_CFG_USE_FACTORY)
+#error "CH_CFG_USE_FACTORY not defined in chlibconf.h"
+#endif
+
+#if !defined(CH_CFG_FACTORY_MAX_NAMES_LENGTH)
+#error "CH_CFG_FACTORY_MAX_NAMES_LENGTH not defined in chlibconf.h"
+#endif
+
+#if !defined(CH_CFG_FACTORY_OBJECTS_REGISTRY)
+#error "CH_CFG_FACTORY_OBJECTS_REGISTRY not defined in chlibconf.h"
+#endif
+
+#if !defined(CH_CFG_FACTORY_GENERIC_BUFFERS)
+#error "CH_CFG_FACTORY_GENERIC_BUFFERS not defined in chlibconf.h"
+#endif
+
+#if !defined(CH_CFG_FACTORY_SEMAPHORES)
+#error "CH_CFG_FACTORY_SEMAPHORES not defined in chlibconf.h"
+#endif
+
+#if !defined(CH_CFG_FACTORY_MAILBOXES)
+#error "CH_CFG_FACTORY_MAILBOXES not defined in chlibconf.h"
+#endif
+
+#if !defined(CH_CFG_FACTORY_OBJ_FIFOS)
+#error "CH_CFG_FACTORY_OBJ_FIFOS not defined in chlibconf.h"
+#endif
+
+/*===========================================================================*/
+/* Module data structures and types. */
+/*===========================================================================*/
+
+/*===========================================================================*/
+/* Module macros. */
+/*===========================================================================*/
+
+/*===========================================================================*/
+/* External declarations. */
+/*===========================================================================*/
+
+/*===========================================================================*/
+/* Late inclusions. */
+/*===========================================================================*/
+
+/* OS Library headers.*/
+#include "chbsem.h"
+#include "chmboxes.h"
+#include "chmemcore.h"
+#include "chheap.h"
+#include "chmempools.h"
+#include "chfifo.h"
+#include "chfactory.h"
+
+#endif /* CHLIB_H */
+
+/** @} */
diff --git a/os/common/oslib/include/chpreempt.h b/os/common/oslib/include/chpreempt.h
deleted file mode 100644
index 87e2a029a..000000000
--- a/os/common/oslib/include/chpreempt.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio.
-
- This file is part of ChibiOS.
-
- ChibiOS is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
-
- ChibiOS is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-/**
- * @file chpreempt.h
- * @brief Preemption enforcement structures and macros.
- *
- * @addtogroup preemption_enforcement
- * @{
- */
-
-#ifndef CHPREEMPT_H
-#define CHPREEMPT_H
-
-/* This header is included from chconf.h and that can be included by asm
- modules.*/
-#if !defined(_FROM_ASM_)
-
-/*===========================================================================*/
-/* Module constants. */
-/*===========================================================================*/
-
-/**
- * @brief Hooks function @p chSchIsPreemptionRequired().
- */
-#define CH_SCH_IS_PREEMPTION_REQUIRED_HOOKED
-
-/**
- * @brief Hooks function @p chSchDoReschedule().
- */
-#define CH_SCH_DO_RESCHEDULE_HOOKED
-
-/*===========================================================================*/
-/* Module pre-compile time settings. */
-/*===========================================================================*/
-
-/*===========================================================================*/
-/* Derived constants and error checks. */
-/*===========================================================================*/
-
-#if !defined(CH_CFG_ROUND_ROBIN_QUANTUM)
-#error "CH_CFG_ROUND_ROBIN_QUANTUM not defined in chconf.h"
-#endif
-
-#if CH_CFG_ROUND_ROBIN_QUANTUM <= 0
-#error "CH_CFG_ROUND_ROBIN_QUANTUM must be greater than zero"
-#endif
-
-#if CH_CFG_TIME_QUANTUM > 0
-#error "CH_CFG_ROUND_ROBIN_QUANTUM is not compatible with CH_CFG_TIME_QUANTUM > 0"
-#endif
-
-/*===========================================================================*/
-/* Module data structures and types. */
-/*===========================================================================*/
-
-/*===========================================================================*/
-/* Module macros. */
-/*===========================================================================*/
-
-/**
- * @brief Fields to be added to the @p ch_system_t structure.
- *
- * @notapi
- */
-#define CH_PREEMPT_SYSTEM_FIELDS \
- virtual_timer_t preempt_vt;
-
-/*===========================================================================*/
-/* External declarations. */
-/*===========================================================================*/
-
-#ifdef __cplusplus
-extern "C" {
-#endif
- void ch_preempt_system_init(void);
- void ch_preempt_thread_switch(void);
-#ifdef __cplusplus
-}
-#endif
-
-/*===========================================================================*/
-/* Module inline functions. */
-/*===========================================================================*/
-
-#endif /* !defined(_FROM_ASM_) */
-
-#endif /* CHPREEMPT_H */
-
-/** @} */
diff --git a/os/common/oslib/src/chpreempt.c b/os/common/oslib/src/chpreempt.c
deleted file mode 100644
index 2cdb94efe..000000000
--- a/os/common/oslib/src/chpreempt.c
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio.
-
- This file is part of ChibiOS.
-
- ChibiOS is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
-
- ChibiOS is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-/**
- * @file chpreempt.c
- * @brief Preemption enforcement code.
- *
- * @addtogroup preemption_enforcement
- * @details This modules export hook macros required for implementing
- * a preemptive round robin mode for threads at the same priority
- * level.<br>
- * This method is alternative to the ChibiOS/RT native implementation
- * which is not compatible with the tick-less mode, however, this
- * timers-based solution can decrease threads context-switch
- * performance because the added overhead.
- * @note This file is not included automatically by @p ch.h, you need
- * to:
- * - Define @p CH_CFG_ROUND_ROBIN_QUANTUM in chconf.h. It is the
- * time quantum in ticks.
- * - Include @p chpreempt.h from @p chconf.h.
- * - Add all the macros and functions to the appropriate hooks in
- * chconf.h.
- * - Explicitely add @p chpreempt.c to your makefile.
- * .
- */
-
-#include "ch.h"
-
-/*===========================================================================*/
-/* Module exported variables. */
-/*===========================================================================*/
-
-/*===========================================================================*/
-/* Module local types. */
-/*===========================================================================*/
-
-/*===========================================================================*/
-/* Module local variables. */
-/*===========================================================================*/
-
-/*===========================================================================*/
-/* Module local functions. */
-/*===========================================================================*/
-
-static void preempt_cb(void *p) {
-
- (void)p;
-}
-
-/*===========================================================================*/
-/* Module exported functions. */
-/*===========================================================================*/
-
-/**
- * @brief Hook code for system initialization.
- *
- * @notapi
- */
-void ch_preempt_system_init(void) {
-
- chVTObjectInit(&ch.preempt_vt);
-}
-
-/**
- * @brief Hook code for context switch.
- *
- * @notapi
- */
-void ch_preempt_thread_switch(void) {
-
- chVTSetI(&ch.preempt_vt, CH_CFG_ROUND_ROBIN_QUANTUM, preempt_cb, NULL);
-}
-
-/**
- * @brief Evaluates if preemption is required.
- * @details The decision is taken by comparing the relative priorities and
- * depending on the state of the round robin timeout counter.
- * @note Not a user function, it is meant to be invoked by the scheduler
- * itself or from within the port layer.
- *
- * @retval true if there is a thread that must go in running state
- * immediately.
- * @retval false if preemption is not required.
- *
- * @special
- */
-bool chSchIsPreemptionRequired(void) {
- tprio_t p1 = firstprio(&ch.rlist.queue);
- tprio_t p2 = currp->prio;
-
- /* If the running thread has not reached its time quantum, reschedule only
- if the first thread on the ready queue has a higher priority.
- Otherwise, if the running thread has used up its time quantum, reschedule
- if the first thread on the ready queue has equal or higher priority.*/
- return chVTIsArmedI(&ch.preempt_vt) ? (p1 > p2) : (p1 >= p2);
-}
-/**
- * @brief Switches to the first thread on the runnable queue.
- * @details The current thread is positioned in the ready list behind or
- * ahead of all threads having the same priority depending on
- * if it used its whole time slice.
- * @note Not a user function, it is meant to be invoked by the scheduler
- * itself or from within the port layer.
- *
- * @special
- */
-void chSchDoReschedule(void) {
- thread_t *otp = currp;
-
- /* Picks the first thread from the ready queue and makes it current.*/
- currp = queue_fifo_remove(&ch.rlist.queue);
- currp->state = CH_STATE_CURRENT;
-
- /* Handling idle-leave hook.*/
- if (otp->prio == IDLEPRIO) {
- CH_CFG_IDLE_LEAVE_HOOK();
- }
-
- /* There are two different scenarios to handle on preemption: time quantum
- elapsed or not.*/
- if (!chVTIsArmedI(&ch.preempt_vt)) {
-
- /* The thread consumed its time quantum so it is enqueued behind threads
- with same priority level, however, it acquires a new time quantum.*/
- otp = chSchReadyI(otp);
- }
- else {
- /* The thread didn't consume all its time quantum so it is put ahead of
- threads with equal priority and does not acquire a new time quantum.*/
- otp = chSchReadyAheadI(otp);
- }
-
- /* Swap operation as tail call.*/
- chSysSwitch(currp, otp);
-}
-
-/** @} */
diff --git a/os/common/oslib/templates/chlibconf.h b/os/common/oslib/templates/chlibconf.h
new file mode 100644
index 000000000..e51397e19
--- /dev/null
+++ b/os/common/oslib/templates/chlibconf.h
@@ -0,0 +1,126 @@
+/*
+ ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/**
+ * @file templates/chlibconf.h
+ * @brief Configuration file template.
+ * @details A copy of this file must be placed in each project directory, it
+ * contains the application specific kernel settings.
+ *
+ * @addtogroup oslib_config
+ * @details OS Library related settings.
+ * @{
+ */
+
+#ifndef CHLIBCONF_H
+#define CHLIBCONF_H
+
+#define _CHIBIOS_LIB_CONF_
+#define _CHIBIOS_LIB_CONF_VER_1_0_
+
+/**
+ * @brief Mailboxes APIs.
+ * @details If enabled then the asynchronous messages (mailboxes) APIs are
+ * included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_SEMAPHORES in chconf.h.
+ */
+#define CH_CFG_USE_MAILBOXES TRUE
+
+/**
+ * @brief Core Memory Manager APIs.
+ * @details If enabled then the core memory manager APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MEMCORE TRUE
+
+/**
+ * @brief Heap Allocator APIs.
+ * @details If enabled then the memory heap allocator APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or
+ * @p CH_CFG_USE_SEMAPHORES in chconf.h.
+ * @note Mutexes are recommended.
+ */
+#define CH_CFG_USE_HEAP TRUE
+
+/**
+ * @brief Memory Pools Allocator APIs.
+ * @details If enabled then the memory pools allocator APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MEMPOOLS TRUE
+
+/**
+ * @brief Objects FIFOs APIs.
+ * @details If enabled then the objects FIFOs APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_OBJ_FIFOS TRUE
+
+/**
+ * @brief Objects Factory APIs.
+ * @details If enabled then the objects factory APIs are included in the
+ * kernel.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_CFG_USE_FACTORY TRUE
+
+/**
+ * @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.
+ */
+#define CH_CFG_FACTORY_MAX_NAMES_LENGTH 8
+
+/**
+ * @brief Enables the registry of generic objects.
+ */
+#define CH_CFG_FACTORY_OBJECTS_REGISTRY TRUE
+
+/**
+ * @brief Enables factory for generic buffers.
+ */
+#define CH_CFG_FACTORY_GENERIC_BUFFERS TRUE
+
+/**
+ * @brief Enables factory for semaphores.
+ */
+#define CH_CFG_FACTORY_SEMAPHORES TRUE
+
+/**
+ * @brief Enables factory for mailboxes.
+ */
+#define CH_CFG_FACTORY_MAILBOXES TRUE
+
+/**
+ * @brief Enables factory for objects FIFOs.
+ */
+#define CH_CFG_FACTORY_OBJ_FIFOS TRUE
+
+#endif /* CHLIBCONF_H */
+
+/** @} */