From 46c0e6255e9d3013ce6308cd1fa494d6550fa80e Mon Sep 17 00:00:00 2001 From: gdisirio Date: Tue, 12 Aug 2014 16:05:36 +0000 Subject: Added chSysConditionalLock() and chSysConditionalUnlock() functions to RT and NIL. Improved debug documentation. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@7166 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/nil/src/nil.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'os/nil/src') diff --git a/os/nil/src/nil.c b/os/nil/src/nil.c index 3462b735a..48f640b09 100644 --- a/os/nil/src/nil.c +++ b/os/nil/src/nil.c @@ -218,6 +218,32 @@ void chSysTimerHandlerI(void) { #endif } +/** + * @brief Conditionally enters the kernel lock state. + * @note Can be called without previous knowledge of the current lock state. + * The final state is "s-locked". + * + * @special + */ +void chSysConditionalLock(void) { + + if (port_irq_enabled(port_get_irq_status())) + chSysLock(); +} + +/** + * @brief Conditionally leaves the kernel lock state. + * @note Can be called without previous knowledge of the current lock state. + * The final state is "normal". + * + * @special + */ +void chSysConditionalUnlock(void) { + + if (!port_irq_enabled(port_get_irq_status())) + chSysUnlock(); +} + /** * @brief Returns the execution status and enters a critical zone. * @details This functions enters into a critical zone and can be called -- cgit v1.2.3