This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

INTERNAL ERROR: Segmentation fault



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