Skip to content

Commit 02a3838

Browse files
committed
Merge pull request #1052 from chrisistuff/teensy_gcc_arm_rtos
Fixed GCC_ARM toolchain issue and RTOS library support for TEENSY3_1
2 parents ecaaa71 + 82b7d9d commit 02a3838

File tree

6 files changed

+35
-8
lines changed

6 files changed

+35
-8
lines changed

libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20XX/TARGET_TEENSY3_1/TOOLCHAIN_GCC_ARM/MK20DX256.ld

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,11 @@ SECTIONS
4242
{
4343
.isr_vector :
4444
{
45-
__vector_table = .;
46-
KEEP(*(.vector_table))
45+
. = 0;
46+
__isr_vector = .;
47+
KEEP(*(.isr_vector))
4748
*(.text.Reset_Handler)
48-
*(.text.System_Init)
49+
*(.text.SystemInit)
4950
. = ALIGN(4);
5051
} > VECTORS
5152

libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20XX/TARGET_TEENSY3_1/TOOLCHAIN_GCC_ARM/startup_MK20DX256.s

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,13 @@ __isr_vector:
192192
.globl Reset_Handler
193193
.type Reset_Handler, %function
194194
Reset_Handler:
195+
/*
196+
* Call SystemInit before loading the .data section to prevent the watchdog
197+
* from resetting the board.
198+
*/
199+
ldr r0, =SystemInit
200+
blx r0
201+
195202
/* Loop to copy data from read only memory to RAM. The ranges
196203
* of copy from/to are specified by following symbols evaluated in
197204
* linker script.
@@ -212,8 +219,6 @@ Reset_Handler:
212219

213220
.Lflash_to_ram_loop_end:
214221

215-
ldr r0, =SystemInit
216-
blx r0
217222
ldr r0, =_start
218223
bx r0
219224
.pool

libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20XX/TARGET_TEENSY3_1/system_MK20DX256.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ uint32_t SystemCoreClock = DEFAULT_SYSTEM_CLOCK;
100100
-- SystemInit()
101101
---------------------------------------------------------------------------- */
102102
void SystemInit (void) {
103+
/* SystemInit MUST NOT use any variables from the .data section, as this section is not loaded yet! */
104+
103105
#if (DISABLE_WDOG)
104106
/* Disable the WDOG module */
105107
/* WDOG_UNLOCK: WDOGUNLOCK=0xC520 */

libraries/rtos/rtx/TARGET_CORTEX_M/RTX_CM_lib.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,9 @@ osThreadDef_t os_thread_def_main = {(os_pthread)main, osPriorityNormal, 0, NULL}
304304
#elif defined(TARGET_MAX32610) || defined(TARGET_MAX32600)
305305
#define INITIAL_SP (0x20008000UL)
306306

307+
#elif defined(TARGET_TEENSY3_1)
308+
#define INITIAL_SP (0x20008000UL)
309+
307310
#else
308311
#error "no target defined"
309312

libraries/rtos/rtx/TARGET_CORTEX_M/RTX_Conf_CM.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
#ifndef OS_TASKCNT
5252
# if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) || defined(TARGET_LPC4088) || defined(TARGET_LPC4088_DM) || defined(TARGET_LPC4330) || defined(TARGET_LPC4337) || defined(TARGET_LPC1347) || defined(TARGET_K64F) || defined(TARGET_STM32F401RE)\
5353
|| defined(TARGET_KL46Z) || defined(TARGET_KL43Z) || defined(TARGET_STM32F407) || defined(TARGET_F407VG) || defined(TARGET_STM32F303VC) || defined(TARGET_LPC1549) || defined(TARGET_LPC11U68) \
54-
|| defined(TARGET_STM32F411RE) || defined(TARGET_STM32F405RG) || defined(TARGET_K22F) || defined(TARGET_STM32F429ZI) || defined(TARGET_STM32F401VC) || defined(TARGET_MAX32610) || defined(TARGET_MAX32600)
54+
|| defined(TARGET_STM32F411RE) || defined(TARGET_STM32F405RG) || defined(TARGET_K22F) || defined(TARGET_STM32F429ZI) || defined(TARGET_STM32F401VC) || defined(TARGET_MAX32610) || defined(TARGET_MAX32600) || defined(TARGET_TEENSY3_1)
5555
# define OS_TASKCNT 14
5656
# elif defined(TARGET_LPC11U24) || defined(TARGET_STM32F303RE) || defined(TARGET_LPC11U35_401) || defined(TARGET_LPC11U35_501) || defined(TARGET_LPCCAPPUCCINO) || defined(TARGET_LPC1114) \
5757
|| defined(TARGET_LPC812) || defined(TARGET_KL25Z) || defined(TARGET_KL05Z) || defined(TARGET_STM32F100RB) || defined(TARGET_STM32F051R8) \
@@ -67,7 +67,7 @@
6767
#ifndef OS_SCHEDULERSTKSIZE
6868
# if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) || defined(TARGET_LPC4088) || defined(TARGET_LPC4088_DM) || defined(TARGET_LPC4330) || defined(TARGET_LPC4337) || defined(TARGET_LPC1347) || defined(TARGET_K64F) || defined(TARGET_STM32F401RE)\
6969
|| defined(TARGET_KL46Z) || defined(TARGET_KL43Z) || defined(TARGET_STM32F407) || defined(TARGET_F407VG) || defined(TARGET_STM32F303VC) || defined(TARGET_LPC1549) || defined(TARGET_LPC11U68) \
70-
|| defined(TARGET_STM32F411RE) || defined(TARGET_STM32F405RG) || defined(TARGET_K22F) || defined(TARGET_STM32F429ZI) || defined(TARGET_STM32F401VC) || defined(TARGET_MAX32610) || defined(TARGET_MAX32600)
70+
|| defined(TARGET_STM32F411RE) || defined(TARGET_STM32F405RG) || defined(TARGET_K22F) || defined(TARGET_STM32F429ZI) || defined(TARGET_STM32F401VC) || defined(TARGET_MAX32610) || defined(TARGET_MAX32600) || defined(TARGET_TEENSY3_1)
7171
# define OS_SCHEDULERSTKSIZE 256
7272
# elif defined(TARGET_LPC11U24) || defined(TARGET_LPC11U35_401) || defined(TARGET_LPC11U35_501) || defined(TARGET_LPCCAPPUCCINO) || defined(TARGET_LPC1114) \
7373
|| defined(TARGET_LPC812) || defined(TARGET_KL25Z) || defined(TARGET_KL05Z) || defined(TARGET_STM32F100RB) || defined(TARGET_STM32F051R8) \
@@ -119,7 +119,7 @@
119119
# if defined(TARGET_LPC1768) || defined(TARGET_LPC2368)
120120
# define OS_CLOCK 96000000
121121

122-
# elif defined(TARGET_LPC1347) || defined(TARGET_STM32F303VC) || defined(TARGET_LPC1549) || defined(TARGET_STM32F334R8) || defined(TARGET_STM32F334C8) || defined(TARGET_STM32F303RE)
122+
# elif defined(TARGET_LPC1347) || defined(TARGET_STM32F303VC) || defined(TARGET_LPC1549) || defined(TARGET_STM32F334R8) || defined(TARGET_STM32F334C8) || defined(TARGET_STM32F303RE) || defined(TARGET_TEENSY3_1)
123123
# define OS_CLOCK 72000000
124124

125125
# elif defined(TARGET_LPC11U24) || defined(TARGET_LPC11U35_401) || defined(TARGET_LPC11U35_501) || defined(TARGET_LPCCAPPUCCINO) || defined(TARGET_LPC1114) || defined(TARGET_KL25Z) \

libraries/rtos/rtx/TARGET_CORTEX_M/TARGET_M4/TOOLCHAIN_GCC/HAL_CM4.s

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,8 +210,12 @@ SVC_Handler_Veneer:
210210

211211
CBZ R1,SVC_Next /* Runtask deleted? */
212212
TST LR,#0x10 /* is it extended frame? */
213+
#ifdef __FPU_PRESENT
213214
ITTE EQ
214215
VSTMDBEQ R12!,{S16-S31} /* yes, stack also VFP hi-regs */
216+
#else
217+
ITE EQ
218+
#endif
215219
MOVEQ R0,#0x01 /* os_tsk->stack_frame val */
216220
MOVNE R0,#0x00
217221
STRB R0,[R1,#TCB_STACKF] /* os_tsk.run->stack_frame = val */
@@ -229,8 +233,12 @@ SVC_Next:
229233
LDMIA R12!,{R4-R11} /* Restore New Context */
230234
LDRB R0,[R2,#TCB_STACKF] /* Stack Frame */
231235
CMP R0,#0 /* Basic/Extended Stack Frame */
236+
#ifdef __FPU_PRESENT
232237
ITTE NE
233238
VLDMIANE R12!,{S16-S31} /* restore VFP hi-registers */
239+
#else
240+
ITE NE
241+
#endif
234242
MVNNE LR,#~0xFFFFFFED /* set EXC_RETURN value */
235243
MVNEQ LR,#~0xFFFFFFFD
236244
MSR PSP,R12 /* Write PSP */
@@ -303,8 +311,12 @@ Sys_Switch:
303311

304312
MRS R12,PSP /* Read PSP */
305313
TST LR,#0x10 /* is it extended frame? */
314+
#ifdef __FPU_PRESENT
306315
ITTE EQ
307316
VSTMDBEQ R12!,{S16-S31} /* yes, stack also VFP hi-regs */
317+
#else
318+
ITE EQ
319+
#endif
308320
MOVEQ R0,#0x01 /* os_tsk->stack_frame val */
309321
MOVNE R0,#0x00
310322
STRB R0,[R1,#TCB_STACKF] /* os_tsk.run->stack_frame = val */
@@ -321,8 +333,12 @@ Sys_Switch:
321333
LDMIA R12!,{R4-R11} /* Restore New Context */
322334
LDRB R0,[R2,#TCB_STACKF] /* Stack Frame */
323335
CMP R0,#0 /* Basic/Extended Stack Frame */
336+
#ifdef __FPU_PRESENT
324337
ITTE NE
325338
VLDMIANE R12!,{S16-S31} /* restore VFP hi-registers */
339+
#else
340+
ITE NE
341+
#endif
326342
MVNNE LR,#~0xFFFFFFED /* set EXC_RETURN value */
327343
MVNEQ LR,#~0xFFFFFFFD
328344
MSR PSP,R12 /* Write PSP */

0 commit comments

Comments
 (0)