polarm wrote on Saturday, October 18, 2008:
Hi,
I am trying to get FreeRTOS running on a LPC2129 using the GCC port. I am using a custom board, running an LPC2129 with a 12Mhz oscillator.
I checked I am able to run simple programs, that drive LEDs and write on the serial port. I can also step in my code using the debugger.
I compile using the GCC port and heap1.c. I have defined the following macro to compile: GCC_ARM7.
Here is what is in FreeRTOSConfig.h
/*
FreeRTOS.org V5.0.4 - Copyright (C) 2003-2008 Richard Barry.
This file is part of the FreeRTOS.org distribution.
FreeRTOS.org is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
FreeRTOS.org is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with FreeRTOS.org; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
A special exception to the GPL can be applied should you wish to distribute
a combined work that includes FreeRTOS.org, without being obliged to provide
the source code for any proprietary components. See the licensing section
of http://www.FreeRTOS.org for full details of how and when the exception
can be applied.
***************************************************************************
***************************************************************************
* *
* SAVE TIME AND MONEY! We can port FreeRTOS.org to your own hardware, *
* and even write all or part of your application on your behalf. *
* See http://www.OpenRTOS.com for details of the services we provide to *
* expedite your project. *
* *
***************************************************************************
***************************************************************************
Please ensure to read the configuration and relevant port sections of the
online documentation.
http://www.FreeRTOS.org - Documentation, latest information, license and
contact details.
http://www.SafeRTOS.com - A version that is certified for use in safety
critical systems.
http://www.OpenRTOS.com - Commercial support, development, porting,
licensing and training services.
*/
#ifndef FREERTOS_CONFIG_H
#define FREERTOS_CONFIG_H
#include <lpc21xx.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 portLONG ) 60000000 ) /* =12.0MHz xtal multiplied by 5 using the PLL. */
#define configTICK_RATE_HZ ( ( portTickType ) 1000 )
#define configMAX_PRIORITIES ( ( unsigned portBASE_TYPE ) 5 )
#define configMINIMAL_STACK_SIZE ( ( unsigned portSHORT ) 1000 )
#define configTOTAL_HEAP_SIZE ( ( size_t ) 10*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
#endif /* FREERTOS_CONFIG_H */
This is the startup code I use:
static void SerialPortTask( void *pvParameters );
int main(void)
{
/*Initialize the Hardware, PCB, serial ports etc */
Lpc2129CanEvaluationInit();
/* Initialize the stdout capability (serial port) */
SysIoInit();
SysIoPrintf("\r\nmain invoked");
xTaskCreate( SerialPortTask, "Serial", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 2, NULL );
vTaskStartScheduler();
return 0;
} /* main */
static void SerialPortTask( void *pvParameters )
{
for(;
{
SysIoPrintf("\r\nThe serial task");
vTaskDelay( ( ( portTickType ) 1000 / portTICK_RATE_MS ) );
}
} /* SerialPortTask */
I ran the code step by step to see that eventually vTaskStartScheduler() reaches a point where it proceeds with a context switch, to start the first task. The program ends here I’m unable to debugger further, but I guess this is ok.
Eventually I never see any timer interrupt happening. The timer 0 interrupt is never asserted. Also, the SerialPortTask never gets called.
The same behavior happens when I leave the code free-running.
I tried enabling global interrupts from Lpc2129CanEvaluationInit() and just before calling vTaskStartScheduler() but this did not help.
Any idea why I cannot see any interrupt happening?
Thanks!