From a8be231257437743118ad5c2d9d7bfef10c806b9 Mon Sep 17 00:00:00 2001 From: Giovanni Di Sirio Date: Fri, 24 Nov 2017 10:01:13 +0000 Subject: Experimental preemptive round robin module. To be tested. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@11074 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/common/oslib/include/chpreempt.h | 106 ++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 os/common/oslib/include/chpreempt.h (limited to 'os/common/oslib/include/chpreempt.h') diff --git a/os/common/oslib/include/chpreempt.h b/os/common/oslib/include/chpreempt.h new file mode 100644 index 000000000..bfa1ce270 --- /dev/null +++ b/os/common/oslib/include/chpreempt.h @@ -0,0 +1,106 @@ +/* + ChibiOS - Copyright (C) 2006..2016 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 . +*/ + +/** + * @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 */ + +/** @} */ -- cgit v1.2.3