Problem with vPortStartFirstTask on CM3 and K

snofrutech wrote on Thursday, December 23, 2010:


I have tried to get the freeRTOS running on a STM32F100R4, there is no excact demoes for this target, but I have tried to set it up manually, It Compiles fine, but efter calling the


in the port.c file everything seems to stop. The systemTick counter is running, but if I break the program, the debugger stops, and give me and error. I can single step down to the last command in the function, but when execute the

scv 0[code], the debugger stops. 
I have add some lines to the standadt startup file startup_stm32f10x_ld_vl.s
[code]        				IMPORT xPortPendSVHandler
        				IMPORT xPortSysTickHandler
        				IMPORT vPortSVCHandler
; Vector Table Mapped to Address 0 at Reset
                AREA    RESET, DATA, READONLY
                EXPORT  __Vectors
                EXPORT  __Vectors_End
                EXPORT  __Vectors_Size
__Vectors       DCD     __initial_sp                    ; Top of Stack
                DCD     Reset_Handler                   ; Reset Handler
                DCD     NMI_Handler                     ; NMI Handler
                DCD     HardFault_Handler               ; Hard Fault Handler
                DCD     MemManage_Handler               ; MPU Fault Handler
                DCD     BusFault_Handler                ; Bus Fault Handler
                DCD     UsageFault_Handler              ; Usage Fault Handler
                DCD     0                               ; Reserved
                DCD     0                               ; Reserved
                DCD     0                               ; Reserved
                DCD     0                               ; Reserved
                DCD     vPortSVCHandler                 ; SVCall Handler
                DCD     DebugMon_Handler                ; Debug Monitor Handler
                DCD     0                               ; Reserved
                DCD     xPortPendSVHandler              ; PendSV Handler
                DCD     xPortSysTickHandler             ; SysTick Handler[/code]
I'm using the CMSIS and stdPerph driver interface from ST, to set up the clock and the SystemTick. I hope anyone can help me to solve this problem !

snofrutech wrote on Thursday, December 23, 2010:

Here is my program

SystemInit ();      // CMSIS system init
SysTick_CLKSourceConfig( SysTick_CLKSource_HCLK );

xTaskCreate( vTaskCode, ( signed portCHAR * ) “LCD”, configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );

These are my global defines


rtel wrote on Thursday, December 23, 2010:

I presume you mean “svc 0”, not “SCV 0”.

Try putting a “cpsie i” instruction before the “svc 0” instruction - it might be that the start up code is leaving interrupts globally disabled in the CPSR.  The FreeRTOS code does not expect to touch the global interrupt status, only the BASEPRI register.

If you get a warning saying that some padding was added, just either ignore it, use the asm directive to ensure correct padding, or most simply add a “nop” instruction after the svc 0, so you get

cpsie i
svc 0

where previously there was just
svc 0


snofrutech wrote on Monday, January 03, 2011:

Hi Thanks for the repply, hower it did not solve the problem.

But I have it up running now. I missed a couple of lines to set the interrupts prioty

  /* Set the Vector Table base address at 0x08000000 */
	NVIC_SetVectorTable( NVIC_VectTab_FLASH, 0x0 );
	NVIC_PriorityGroupConfig( NVIC_PriorityGroup_4 );