I got the following error while compiling a port of FREErtos.
INTERNAL ERROR: C:\ti\ccsv5\tools\compiler\arm_5.1.1\bin\armasm.exe experienced a segmentation fault
while processing section .text file ../FreeRtosPort/port2.asm line 169
Here is the offending file, although the error could be somewhere else. Any thoughts on cause / fixes?
.text
.align 4
.thumb
.ref pxCurrentTCB
.ref vTaskSwitchContext
.def xPortPendSVHandler
.def ulPortSetInterruptMask
.def vPortClearInterruptMask
.def vPortSVCHandler
.def vPortStartFirstTask
.def vPortEnableVFP
;-----------------------------------------------------------
xPortPendSVHandler:
mrs r0, psp
;Get the location of the current TCB.
ldr r3, pxCurrentTCB
ldr r2, [r3]
;Is the task using the FPU context? If so, push high vfp registers.
tst r14, #0x10
it eq
vstmdbeq r0!, {s16-s31}
;Save the core registers.
stmdb r0!, {r4-r11, r14}
;Save the new top of stack into the first member of the TCB.
str r0, [r2]
stmdb sp!, {r3}
mov r0, #configMAX_SYSCALL_INTERRUPT_PRIORITY
msr basepri, r0
bl vTaskSwitchContext
mov r0, #0
msr basepri, r0
ldmia sp!, {r3}
;The first item in pxCurrentTCB is the task top of stack.
ldr r1, [r3]
ldr r0, [r1]
;Pop the core registers.
ldmia r0!, {r4-r11, r14}
;Is the task using the FPU context? If so, pop the high vfp registers
;too.
tst r14, #0x10
it eq
vldmiaeq r0!, {s16-s31}
msr psp, r0
;XMC4000 specific errata
;#ifdef WORKAROUND_PMU_CM001
; #if WORKAROUND_PMU_CM001 == 1
; push { r14 }
; pop { pc }
; #endif
;#endif
bx r14
;-----------------------------------------------------------
ulPortSetInterruptMask:
mrs r0, basepri
mov r1, #configMAX_SYSCALL_INTERRUPT_PRIORITY
msr basepri, r1
bx r14
;-----------------------------------------------------------
vPortClearInterruptMask:
msr basepri, r0
bx r14
;-----------------------------------------------------------
vPortSVCHandler:
; Get the location of the current TCB.
ldr r3, =pxCurrentTCB
ldr r1, [r3]
ldr r0, [r1]
; Pop the core registers.
ldmia r0!, {r4-r11, r14}
msr psp, r0
mov r0, #0
msr basepri, r0
bx r14
;-----------------------------------------------------------
vPortStartFirstTask
; Use the NVIC offset register to locate the stack.
ldr r0, 0xE000ED08
ldr r0, [r0]
ldr r0, [r0]
; Set the msp back to the start of the stack.
msr msp, r0
; Call SVC to start the first task.
cpsie i
svc 0
;-----------------------------------------------------------
vPortEnableVFP:
; The FPU enable bits are in the CPACR.
ldr.w r0, 0xE000ED88
ldr r1, [r0]
; Enable CP10 and CP11 coprocessors, then save back.
orr r1, r1, #( 0xf << 20 )
str r1, [r0]
bx r14