diff options
author | gdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4> | 2008-04-18 13:27:05 +0000 |
---|---|---|
committer | gdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4> | 2008-04-18 13:27:05 +0000 |
commit | f563ad9387e132cece6634811a89aa450c60a176 (patch) | |
tree | 0cf9f3ff6b7dde1ace508a8af477d54b2c5e9376 /ports | |
parent | 792c528dbc75f0ffeb19766594607bee73fa36ad (diff) | |
download | ChibiOS-f563ad9387e132cece6634811a89aa450c60a176.tar.gz ChibiOS-f563ad9387e132cece6634811a89aa450c60a176.tar.bz2 ChibiOS-f563ad9387e132cece6634811a89aa450c60a176.zip |
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@271 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'ports')
-rw-r--r-- | ports/ARMCM3/chcore.c | 8 | ||||
-rw-r--r-- | ports/ARMCM3/chcore.h | 20 |
2 files changed, 11 insertions, 17 deletions
diff --git a/ports/ARMCM3/chcore.c b/ports/ARMCM3/chcore.c index bf0cdc0d9..8c4c74315 100644 --- a/ports/ARMCM3/chcore.c +++ b/ports/ARMCM3/chcore.c @@ -39,14 +39,6 @@ void chSysPuts(char *msg) { }
/*
- * Context switch.
- */
-void chSysSwitchI(Thread *otp, Thread *ntp) {
-
- asm volatile ("svc #0");
-}
-
-/*
* System halt.
*/
__attribute__((naked, weak))
diff --git a/ports/ARMCM3/chcore.h b/ports/ARMCM3/chcore.h index 6c80fdc09..5b9a0915b 100644 --- a/ports/ARMCM3/chcore.h +++ b/ports/ARMCM3/chcore.h @@ -78,16 +78,19 @@ typedef struct { }
#define chSysLock() { \
- asm volatile ("push {r3}"); \
- asm volatile ("movs r3, #0x10"); \
- asm volatile ("msr BASEPRI, r3"); \
- asm volatile ("pop {r3}"); \
+ register uint32_t tmp asm ("r3"); \
+ asm volatile ("movs %0, #0x10" : "=r" (tmp): ); \
+ asm volatile ("msr BASEPRI, %0" : : "r" (tmp)); \
}
#define chSysUnlock() { \
- asm volatile ("push {r3}"); \
- asm volatile ("movs r3, #0"); \
- asm volatile ("msr BASEPRI, r3"); \
- asm volatile ("pop {r3}"); \
+ register uint32_t tmp asm ("r3"); \
+ asm volatile ("movs %0, #0" : "=r" (tmp): ); \
+ asm volatile ("msr BASEPRI, %0" : : "r" (tmp)); \
+}
+#define chSysSwitchI(otp, ntp) { \
+ register Thread *_otp asm ("r0") = (otp); \
+ register Thread *_ntp asm ("r1") = (ntp); \
+ asm volatile ("svc #0" : : "r" (_otp), "r" (_ntp)); \
}
#define INT_REQUIRED_STACK 0
@@ -109,7 +112,6 @@ typedef struct { void _IdleThread(void *p) __attribute__((noreturn));
void chSysHalt(void);
-void chSysSwitchI(Thread *otp, Thread *ntp);
void chSysPuts(char *msg);
void threadstart(void);
|