Hello Friends, I want to port FREERTOS for my STM32F100RB(ARM CM3) discovery board. I don’t know why it’s not working when I scheduled something using scheduler it won’t work I have ported it using the manual methods I have added the bare minimum 5 file like task.c, port.c(selected from the RVDS ARM CM3),list.c, queue.c and heap_4.c.Also added the include in paths with separate “freertosconfig.h”.i know for every porting 2 files are very important port.c(which I selected from ARM cortex RVDS CM3) and the “Freertosconfig.h”.i am attaching my Keil project picture (right now I don’t have right to attach complete project because I am new user).please help …point to note here that when I compile i get 0 error and 0 warning but still its not working…!
Preemption is already enabled here at(#define configUSE_PREEMPTION 1). I am attaching Freertosconfig.h:
#ifndef FREERTOS_CONFIG_H
#define FREERTOS_CONFIG_H
/*-----------------------------------------------------------
* Application specific definitions.
*
* These definitions should be adjusted for your particular hardware and
* application requirements.
*
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.
*
* See http://www.freertos.org/a00110.html
*----------------------------------------------------------*/
#define configUSE_PREEMPTION 1
#define configUSE_IDLE_HOOK 0
#define configUSE_TICK_HOOK 0
#define configCPU_CLOCK_HZ ( ( unsigned long ) 8000000 )
#define configTICK_RATE_HZ ( ( TickType_t ) 1000 )
#define configMAX_PRIORITIES ( 5 )
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 128 )
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 6 * 1024 ) )
#define configMAX_TASK_NAME_LEN ( 16 )
#define configUSE_TRACE_FACILITY 0
#define configUSE_16_BIT_TICKS 0
#define configIDLE_SHOULD_YIELD 1
/* Co-routine definitions. */
#define configUSE_CO_ROUTINES 0
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
/* Set the following definitions to 1 to include the API function, or zero
to exclude the API function. */
#define INCLUDE_vTaskPrioritySet 1
#define INCLUDE_uxTaskPriorityGet 1
#define INCLUDE_vTaskDelete 1
#define INCLUDE_vTaskCleanUpResources 0
#define INCLUDE_vTaskSuspend 1
#define INCLUDE_vTaskDelayUntil 1
#define INCLUDE_vTaskDelay 1
/* This is the raw value as per the Cortex-M3 NVIC. Values can be 255
(lowest) to 0 (1?) (highest). */
#define configKERNEL_INTERRUPT_PRIORITY 255
/* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!!
See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */
#define configMAX_SYSCALL_INTERRUPT_PRIORITY 191 /* equivalent to 0xb0, or priority 11. */
/* This is the value being used as per the ST library which permits 16
priority values, 0 to 15. This must correspond to the
configKERNEL_INTERRUPT_PRIORITY setting. Here 15 corresponds to the lowest
NVIC value of 255. */
#define configLIBRARY_KERNEL_INTERRUPT_PRIORITY 15
#endif /* FREERTOS_CONFIG_H */
also the code is given below:
/*******Scheduler includes*******/
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
/*******app related header******/
#include "stm32f10x.h" // Device header
void delay(void);
void task1(void *);
void task2(void *);
void gpio_init(void);
int main()
{
gpio_init();
xTaskCreate(task1,"task_1",300,NULL,1,NULL);
xTaskCreate(task2,"task_2",300,NULL,2,NULL);
vTaskStartScheduler();
return 0;
}
void gpio_init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
GPIO_InitTypeDef gpio_c;
gpio_c.GPIO_Pin=GPIO_Pin_9 | GPIO_Pin_8;
gpio_c.GPIO_Speed=GPIO_Speed_50MHz;
gpio_c.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(GPIOC,&gpio_c);
}
void task1(void *parameter)
{
while(1)
{
GPIO_SetBits(GPIOC,GPIO_Pin_8);
vTaskDelay(1000);
GPIO_ResetBits(GPIOC,GPIO_Pin_8);
vTaskDelay(1000);
}
//vTaskDelete(NULL);
}
void task2(void *parameter)
{
while(1)
{
GPIO_SetBits(GPIOC,GPIO_Pin_9);
vTaskDelay(1000);
GPIO_ResetBits(GPIOC,GPIO_Pin_9);
vTaskDelay(1000);
}
//vTaskDelete(NULL);
}
void delay(void)
{
volatile int i = 10000000; /* About 1/4 second delay */
while (i-- > 0);
//asm("nop");
}
I have tested the above code without RTOS means just basic blink its perfectly fine but with freertos its not working .