aboutsummaryrefslogtreecommitdiffstats
path: root/os/ports/GCC/ARMCM3
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2009-09-13 09:38:59 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2009-09-13 09:38:59 +0000
commitc5496788e53c99371c2f4a36c67dcbf556176398 (patch)
treeead285751d4abfec3b6d1d2ce0ee87cf7cb162a1 /os/ports/GCC/ARMCM3
parente4400a5c7f5c5790cf94d84db5e8ad4c356773d8 (diff)
downloadChibiOS-c5496788e53c99371c2f4a36c67dcbf556176398.tar.gz
ChibiOS-c5496788e53c99371c2f4a36c67dcbf556176398.tar.bz2
ChibiOS-c5496788e53c99371c2f4a36c67dcbf556176398.zip
Cortex-M3 related improvements.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@1161 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'os/ports/GCC/ARMCM3')
-rw-r--r--os/ports/GCC/ARMCM3/chcore.c6
-rw-r--r--os/ports/GCC/ARMCM3/chcore.h7
2 files changed, 5 insertions, 8 deletions
diff --git a/os/ports/GCC/ARMCM3/chcore.c b/os/ports/GCC/ARMCM3/chcore.c
index ce76ffa4c..4e9874f82 100644
--- a/os/ports/GCC/ARMCM3/chcore.c
+++ b/os/ports/GCC/ARMCM3/chcore.c
@@ -151,13 +151,7 @@ void PendSVVector(void) {
Thread *otp;
register struct intctx *sp_thd asm("r12");
- asm volatile ("push {lr}");
chSysLockFromIsr();
- if (!chSchRescRequiredI()) {
- chSysUnlockFromIsr();
- asm volatile ("pop {pc}");
- }
- asm volatile ("pop {lr}");
PUSH_CONTEXT(sp_thd);
diff --git a/os/ports/GCC/ARMCM3/chcore.h b/os/ports/GCC/ARMCM3/chcore.h
index 4a6ee2695..daff52090 100644
--- a/os/ports/GCC/ARMCM3/chcore.h
+++ b/os/ports/GCC/ARMCM3/chcore.h
@@ -209,8 +209,11 @@ struct context {
* IRQ epilogue code, inserted at the end of all IRQ handlers enabled to
* invoke system APIs.
*/
-#define PORT_IRQ_EPILOGUE() { \
- SCB_ICSR = ICSR_PENDSVSET; \
+#define PORT_IRQ_EPILOGUE() { \
+ chSysLockFromIsr(); \
+ if (chSchRescRequiredI()) \
+ SCB_ICSR = ICSR_PENDSVSET; \
+ chSysUnlockFromIsr(); \
}
/**