Skip to content

Commit 895d143

Browse files
authored
Merge pull request #20 from SummerGGift/float_value
update for printf float type value
2 parents 4b38f0c + fa3af37 commit 895d143

File tree

1 file changed

+37
-34
lines changed

1 file changed

+37
-34
lines changed

firmware/armv6/stack.c

Lines changed: 37 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -26,54 +26,57 @@
2626
/*****************************/
2727
/* CPU Mode */
2828
/*****************************/
29-
#define USERMODE 0x10
30-
#define FIQMODE 0x11
31-
#define IRQMODE 0x12
32-
#define SVCMODE 0x13
33-
#define ABORTMODE 0x17
34-
#define UNDEFMODE 0x1b
35-
#define MODEMASK 0x1f
36-
#define NOINT 0xc0
29+
#define USERMODE 0x10
30+
#define FIQMODE 0x11
31+
#define IRQMODE 0x12
32+
#define SVCMODE 0x13
33+
#define ABORTMODE 0x17
34+
#define UNDEFMODE 0x1b
35+
#define MODEMASK 0x1f
36+
#define NOINT 0xc0
3737

3838
/**
3939
* This function will initialize thread stack
4040
*
4141
* @param tentry the entry of thread
42-
* @param parameter the parameter of entry
42+
* @param parameter the parameter of entry
4343
* @param stack_addr the beginning stack address
4444
* @param texit the function will be called when thread exit
4545
*
4646
* @return stack address
4747
*/
4848
rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter,
49-
rt_uint8_t *stack_addr, void *texit)
49+
rt_uint8_t *stack_addr, void *texit)
5050
{
51-
rt_uint32_t *stk;
51+
rt_uint32_t *stk;
5252

53-
stk = (rt_uint32_t*)stack_addr;
54-
*(stk) = (rt_uint32_t)tentry; /* entry point */
55-
*(--stk) = (rt_uint32_t)texit; /* lr */
56-
*(--stk) = 0; /* r12 */
57-
*(--stk) = 0; /* r11 */
58-
*(--stk) = 0; /* r10 */
59-
*(--stk) = 0; /* r9 */
60-
*(--stk) = 0; /* r8 */
61-
*(--stk) = 0; /* r7 */
62-
*(--stk) = 0; /* r6 */
63-
*(--stk) = 0; /* r5 */
64-
*(--stk) = 0; /* r4 */
65-
*(--stk) = 0; /* r3 */
66-
*(--stk) = 0; /* r2 */
67-
*(--stk) = 0; /* r1 */
68-
*(--stk) = (rt_uint32_t)parameter; /* r0 : argument */
53+
stack_addr += sizeof(rt_uint32_t);
54+
stack_addr = (rt_uint8_t *)RT_ALIGN_DOWN((rt_uint32_t)stack_addr, 8);
55+
stk = (rt_uint32_t *)stack_addr;
6956

70-
/* cpsr */
71-
if ((rt_uint32_t)tentry & 0x01)
72-
*(--stk) = SVCMODE | 0x20; /* thumb mode */
73-
else
74-
*(--stk) = SVCMODE; /* arm mode */
57+
*(--stk) = (rt_uint32_t)tentry; /* entry point */
58+
*(--stk) = (rt_uint32_t)texit; /* lr */
59+
*(--stk) = 0xdeadbeef; /* r12 */
60+
*(--stk) = 0xdeadbeef; /* r11 */
61+
*(--stk) = 0xdeadbeef; /* r10 */
62+
*(--stk) = 0xdeadbeef; /* r9 */
63+
*(--stk) = 0xdeadbeef; /* r8 */
64+
*(--stk) = 0xdeadbeef; /* r7 */
65+
*(--stk) = 0xdeadbeef; /* r6 */
66+
*(--stk) = 0xdeadbeef; /* r5 */
67+
*(--stk) = 0xdeadbeef; /* r4 */
68+
*(--stk) = 0xdeadbeef; /* r3 */
69+
*(--stk) = 0xdeadbeef; /* r2 */
70+
*(--stk) = 0xdeadbeef; /* r1 */
71+
*(--stk) = (rt_uint32_t)parameter; /* r0 : argument */
7572

76-
/* return task's current stack address */
77-
return (rt_uint8_t *)stk;
73+
/* cpsr */
74+
if ((rt_uint32_t)tentry & 0x01)
75+
*(--stk) = SVCMODE | 0x20; /* thumb mode */
76+
else
77+
*(--stk) = SVCMODE; /* arm mode */
78+
79+
/* return task's current stack address */
80+
return (rt_uint8_t *)stk;
7881
}
7982

0 commit comments

Comments
 (0)