FreeRTOS Support Archive
The FreeRTOS support forum is used to obtain active support directly from Real
Time Engineers Ltd. In return for using our top quality software and services for
free, we request you play fair and do your bit to help others too! Sign up
to receive notifications of new support topics then help where you can.
This is a read only archive of threads posted to the FreeRTOS support forum.
The archive is updated every week, so will not always contain the very latest posts.
Use these archive pages to search previous posts. Use the Live FreeRTOS Forum
link to reply to a post, or start a new support thread.
[FreeRTOS Home] [Live FreeRTOS Forum] [FAQ] [Archive Top] [February 2012 Threads] STM32F2 hard faultPosted by Gustaf Lindström on February 13, 2012 Hi! I'm trying to get FreeRTOS running on a STM32F205 but have not succeeded so far. I'm using version 7.10 and the portable for the ARM_CM3. The code seems to run fine until vPortStartFirstTask. Stepping through the assembler instructions I get to "svc 0" after which a hard fault occurs. void vPortStartFirstTask( void ) { __asm volatile( " ldr r0, =0xE000ED08 \n" /* Use the NVIC offset register to locate the stack. */ " ldr r0, [r0] \n" " ldr r0, [r0] \n" " msr msp, r0\n" /* Set the msp back to the start of the stack. */ " cpsie i\n" /* Globally enable interrupts. */ " svc 0\n" /* System call to start first task. */ " nop\n" ); } Is the current portable as of version 7.10 considered working on STM32F2:s or is there anything I have to modify to get it running? Sincerely, Gustaf Lindström
RE: STM32F2 hard faultPosted by Gustaf Lindström on February 13, 2012 EDIT: 7.10 should have been 7.1.0 of course.
RE: STM32F2 hard faultPosted by Dave on February 13, 2012 The same FreeRTOS portable layer runs well on all cortex m3 parts from all manufactures.
Have you installed the interrupts in the vector table either directly or by #defining the FreeRTOS handler names to their CMSIS versions?
Have you configured the hardware to set all the hardware interrupt priority bits to be preemption bits and not subpriority bits?
That last point is particularly important on STM32 as most other manufacturers do that by default anyway.
RE: STM32F2 hard faultPosted by Gustaf Lindström on February 13, 2012 Thanks for your reply! I've modified stm32f2x_it.c as follows. void SVC_Handler(void) { vPortSVCHandler(); }
void PendSV_Handler(void) { xPortPendSVHandler(); }
void SysTick_Handler(void) { vTaskEnterCritical();
xPortSysTickHandler();
vTaskExitCritical(); } And regarding the interrupt priority bits I've done; NVIC_SetVectorTable( NVIC_VectTab_FLASH, 0x0 ); NVIC_PriorityGroupConfig( NVIC_PriorityGroup_4 );
RE: STM32F2 hard faultPosted by Dave on February 13, 2012 That might work for the SVC handler and the tick handler, but I think it won't work for the PendSV handler.
I suggest backing those changes out and instead adding the following lines to FreeRTOSConfig.h
#define vPortSVCHandler SVC_Handler #define xPortPendSVHandler PendSV_Handler #define xPortSysTickHandler SysTick_Handler
RE: STM32F2 hard faultPosted by Gustaf Lindström on February 13, 2012 Thanks! That seems to have resolved the problem. I'm getting past the part giving the hard fault and am able to get a simple task running.
Sincerely, Gustaf Lindström
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.
|