diff --git a/miosix/config/miosix_settings.h b/miosix/config/miosix_settings.h index 911f483a971aa1044b99cc272e5839334e4bd605..879e4424ba23ff24ee989c90f4a4da29d74a0f90 100644 --- a/miosix/config/miosix_settings.h +++ b/miosix/config/miosix_settings.h @@ -69,7 +69,7 @@ namespace miosix { /// \def WITH_FILESYSTEM /// Allows to enable/disable filesystem support. /// By default it is defined (filesystem support is enabled) -//#define WITH_FILESYSTEM +#define WITH_FILESYSTEM /// \def SYNC_AFTER_WRITE /// Increases filesystem write robustness. After each write operation the diff --git a/miosix/doc/textdoc/Changelog.txt b/miosix/doc/textdoc/Changelog.txt index 9ac9fb04a3a947545a28eff9c66e0b1138354dec..8c951d5cbb2a38f2358c9170a17b1daf8663a75b 100644 --- a/miosix/doc/textdoc/Changelog.txt +++ b/miosix/doc/textdoc/Changelog.txt @@ -1,5 +1,11 @@ Changelog for Miosix np embedded OS +v1.61 +- Modified the implementation of pauseKernel() and restartKernel() so as to + be able to call them safely within an InterruptDisableLock block. This allows + allocating memory with malloc/new when interrupts are disabled in an + InterruptDisableLock (but not in a FastInterruptDisableLock). This change + only relaxes a constraint, so it does not break existing code. v1.60 - Added new board: bitsboard. This is effectively an stm32f4discovery tweaked be used in the bits project: bits.poul.org diff --git a/miosix/kernel/kernel.cpp b/miosix/kernel/kernel.cpp index e61269825c3475e27bd3a7ccc8e7e15d7959c6ea..e4fd73b9c8bc12d9b0f76ec5be5d805069e5a9a4 100644 --- a/miosix/kernel/kernel.cpp +++ b/miosix/kernel/kernel.cpp @@ -125,7 +125,11 @@ void pauseKernel() miosix_private::doDisableInterrupts(); if(kernel_running==0xff) errorHandler(NESTING_OVERFLOW); kernel_running++; - if(kernel_started==true) miosix_private::doEnableInterrupts(); + + //Check interruptDisableNesting to allow pauseKernel() while interrupts + //are disabled with an InterruptDisableLock + if(interruptDisableNesting==0 && kernel_started==true) + miosix_private::doEnableInterrupts(); } void restartKernel() @@ -137,12 +141,18 @@ void restartKernel() errorHandler(PAUSE_KERNEL_NESTING); } kernel_running--; - if(kernel_started==true) miosix_private::doEnableInterrupts(); - if((kernel_running==0)&&tick_skew)//If we missed some tick yield immediately - { - tick_skew=false; - Thread::yield(); + //Check interruptDisableNesting to allow pauseKernel() while interrupts + //are disabled with an InterruptDisableLock + if(interruptDisableNesting==0) + { + if(kernel_started==true) miosix_private::doEnableInterrupts(); + + if((kernel_running==0)&&tick_skew)//If we missed some tick yield immediately + { + tick_skew=false; + Thread::yield(); + } } } diff --git a/miosix/util/version.cpp b/miosix/util/version.cpp index 747097702db88783daeabd1e28eb76db65ddba8b..76dd6ab0e9baca9864e3a6d0af8b078efe7c1222 100644 --- a/miosix/util/version.cpp +++ b/miosix/util/version.cpp @@ -37,7 +37,7 @@ namespace miosix { #define AU #endif -const char AU ver[]="Miosix v1.60 (" _MIOSIX ", " __DATE__ " " __TIME__ CV ")"; +const char AU ver[]="Miosix v1.61 (" _MIOSIX ", " __DATE__ " " __TIME__ CV ")"; const char *getMiosixVersion() {