Porting Problem with FreeRTOS v7.0.2 on IAR

namhyeong wrote on Thursday, December 01, 2011:

Hello.
I work to port FreeRTOS(v.7.0.2) to STM32F103 with Standard peripheral library ver 3.5.0.
I read your post. I think you can slove my problem, so I send you this mail.
Please, would you help me… See below.

<<environments>>
MCU : STM32F103VB
Compiler : IAR Ver 6.21
FreeRTOS V7.0.2
Std peripheral library version V3.5.0

<< Problems>>
My problems is below - 2 problems.

1. Compile Error on porting FreeRTOS.
File =>  portasm.s (Line. 57)
Message => Error:Failed to open #include <FreeRTOSConfig.h>

I don’t know why. I did several actions, but didn’t catch error.

2. The task is not work.
for 1st problems, I uncommented including sentense(eg. // #include <RTOSConfig.h>)
Then, I defined words needed in portasm.s

#ifndef configMAX_SYSCALL_INTERRUPT_PRIORITY
#define configMAX_SYSCALL_INTERRUPT_PRIORITY 191 /* equivalent to 0xb0, or priority 11. */
#endif

Then, it disappeared error message. and I made task to print out Simple MESSAGE.
I made Task1 that print out simple Message, but that’s not work.

See below.
* Main function ===========================================================
int main(void)
{
SYSTickInit();
AppGPIOInit();
AppUARTInit();
printf("%s", MESSAGE1);

/* Create Task */
xTaskCreate( Task1, “Task1”, /*TASK_SIZE*/ 240 , NULL, 1, /*&task1*/ NULL);
/* Start the scheduler. */
vTaskStartScheduler();

return 0;
}
* Task Function ===========================================================
void Task1( void *pvParameters ){
portTickType gpio_Time;

gpio_Time = xTaskGetTickCount();
printf("%s ", MESSAGE1);
while(1)
{
GPIOB->ODR ^= GPIO_Pin_6;
vTaskDelayUntil( &gpio_Time, 1000 );
}

}
* SysTick intialization Function =====================================================
void SYSTickInit(void)
{
/* Setup SysTick Timer for 1 msec interrupts */
if (SysTick_Config(SystemCoreClock/1000))
{
/* Capture error */
while (1);
}
}

CF)
Other UART, GPIO functions OK. I checked.

rtel wrote on Thursday, December 01, 2011:

I don’t think this can be classed as porting, it is just setting up a new project to use the existing IAR/Cortex-M3 port.  You should be able to take an existing IAR/Cortex-M3 project and just re-target it to your chip, then you would have the project set up correctly already.

1. Compile Error on porting FreeRTOS.
File =>  portasm.s (Line. 57)
Message => Error:Failed to open #include <FreeRTOSConfig.h>

Just like the compiler, you need to set the include path for your assembler so it can find the file.  In the project options, choose the assembler category, then the preprocessor tab, and add “$PROJ_DIR$” (without the quotes) to the “Additional Include Directories” - assuming FreeRTOSConfig.h is in the same directory as your IAR project file.

2. The task is not work.

* SysTick intialization Function  =====================================================
void SYSTickInit(void)
{
  /* Setup SysTick Timer for 1 msec interrupts  */
  if (SysTick_Config(SystemCoreClock/1000))
  { 
    /* Capture error */ 
    while (1);
  }  
}

Do you ever call this function?  If so, please don’t!.  The kernel needs exclusive access to the SysTick (including the interrupt) and configures the SysTick when when the scheduler is started.  I presume you have installed the correct SysTick interrupt handler for the kernel?  Again, if not, look at existing projects.

int main(void)
{
  SYSTickInit();
  AppGPIOInit();
  AppUARTInit();
  printf("%s", MESSAGE1);
 
  /* Create Task */
  xTaskCreate( Task1, "Task1", /*TASK_SIZE*/ 240 , NULL, 1, /*&task1*/ NULL);       
  /* Start the scheduler. */
  vTaskStartScheduler();
  
  return 0;
}

Does the printf() call after the call to AppUARTInit() work?

Regards.

namhyeong wrote on Thursday, December 01, 2011:

Hi. This compiled right after adding path. And… Second question I got a hint. Thank you for your advice.^^