aboutsummaryrefslogtreecommitdiffstats
path: root/ports/ARMCM3/chcore.h
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2008-04-15 15:42:34 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2008-04-15 15:42:34 +0000
commitf1ae9df82658d2e29402c931b098336909f772a3 (patch)
tree672a0dc6cf8025ee7eb69af905f724f02671a912 /ports/ARMCM3/chcore.h
parent2da330780e25ff1a1df4e18277bb2230437be5d5 (diff)
downloadChibiOS-f1ae9df82658d2e29402c931b098336909f772a3.tar.gz
ChibiOS-f1ae9df82658d2e29402c931b098336909f772a3.tar.bz2
ChibiOS-f1ae9df82658d2e29402c931b098336909f772a3.zip
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@266 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'ports/ARMCM3/chcore.h')
-rw-r--r--ports/ARMCM3/chcore.h32
1 files changed, 17 insertions, 15 deletions
diff --git a/ports/ARMCM3/chcore.h b/ports/ARMCM3/chcore.h
index 0ff988189..ccb070228 100644
--- a/ports/ARMCM3/chcore.h
+++ b/ports/ARMCM3/chcore.h
@@ -23,17 +23,9 @@
typedef void *regarm;
/*
- * Interrupt saved context.
+ * Interrupt saved context, empty in this architecture.
*/
struct extctx {
- regarm xpsr;
- regarm r0;
- regarm r1;
- regarm r2;
- regarm r3;
- regarm r12;
- regarm lr;
- regarm pc;
};
/*
@@ -50,7 +42,15 @@ struct intctx {
regarm r9;
regarm r10;
regarm r11;
- regarm lr;
+ regarm lr_exc;
+ regarm r0;
+ regarm r1;
+ regarm r2;
+ regarm r3;
+ regarm r12;
+ regarm lr_thd;
+ regarm pc;
+ regarm xpsr;
};
/*
@@ -68,15 +68,17 @@ typedef struct {
tp->p_ctx.r13 = (struct intctx *)((uint8_t *)workspace + \
wsize - \
sizeof(struct intctx)); \
- tp->p_ctx.r13->r4 = pf; \
- tp->p_ctx.r13->r5 = arg; \
- tp->p_ctx.r13->lr = threadstart; \
+ tp->p_ctx.r13->r0 = arg; \
+ tp->p_ctx.r13->r1 = pf; \
+ tp->p_ctx.r13->lr_exc = (regarm)0xFFFFFFFD; \
+ tp->p_ctx.r13->pc = threadstart; \
+ tp->p_ctx.r13->xpsr = (regarm)0x01000000; \
}
#define chSysLock() asm("cpsid i")
#define chSysUnlock() asm("cpsie i")
-#define INT_REQUIRED_STACK 0x10
+#define INT_REQUIRED_STACK 0
#define StackAlign(n) ((((n) - 1) | 3) + 1)
#define UserStackSize(n) StackAlign(sizeof(Thread) + \
sizeof(struct intctx) + \
@@ -88,7 +90,7 @@ typedef struct {
#define chSysIRQEnterI()
/* It should be 8.*/
-#define IDLE_THREAD_STACK_SIZE 16
+#define IDLE_THREAD_STACK_SIZE 0
void _IdleThread(void *p) __attribute__((noreturn));
void chSysHalt(void);