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] [November 2007 Threads] crosswork and sheduler Posted by ing_fox on November 20, 2007 hello,
When I create a task, the programme bug in "portRESTORE_CONTEXT()" . The stack is ok, but "portRESTORE_CONTEXT()" doesn't go to my fonction (adresse:0x37e) but at the adresse 0xa5a5a5.
With the debugger, no probleme until the macro "portRESTORE_CONTEXT()".
this is my source:
main() { //ini du port 2 pour les led vParTestInitialise();
//creation de la tache xTaskCreate( LED, "LED", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
//lancement du scheduler vTaskStartScheduler();
}
void vParTestInitialise( void ) { PINSEL10 = 0; FIO2DIR = 0x000000FF; FIO2MASK = 0x00000000; FIO2CLR = 0xFF; SCS |= (1<<0); //fast mode for port 0 and 1 }
void LED(void *pvParameters ) { FIO2CLR = 0xff; vTaskDelay( 10 ); FIO2SET = 0xFF; }
And this is my RTOSconfig:
#define configUSE_PREEMPTION1 #define configUSE_IDLE_HOOK 0 #define configUSE_TICK_HOOK 1 #define configCPU_CLOCK_HZ ( ( unsigned portLONG ) 57600000 )/* =12Mhz xtal multiplied by 5 using the PLL. */ #define configTICK_RATE_HZ ( ( portTickType ) 1000 ) #define configMAX_PRIORITIES( ( unsigned portBASE_TYPE ) 4 ) #define configMINIMAL_STACK_SIZE( ( unsigned portSHORT ) 104 ) #define configTOTAL_HEAP_SIZE( ( size_t ) ( 18 * 1024 ) ) #define configMAX_TASK_NAME_LEN( 10 ) #define configUSE_TRACE_FACILITY1 #define configUSE_16_BIT_TICKS0 #define configIDLE_SHOULD_YIELD1 #define configUSE_MUTEXES1 /* Co-routine definitions. */ #define configUSE_CO_ROUTINES 0 #define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
some idea? Thank.
RE: crosswork and sheduler Posted by Borut on November 20, 2007 Hello,
first idea is that you are missing a for(;;){} loop inside your LED task: try this
void LED(void *pvParameters ) { for(;;) { FIO2CLR = 0xff; vTaskDelay( 900 ); FIO2SET = 0xFF; vTaskDelay( 10 ); //this will give you a blinking led } }
RE: crosswork and sheduler Posted by Dmitriy on November 20, 2007 The task that you create (function LDE) must to have no end. For example it must have
while (1==1) {
do something }
For testing value 0xa5a5a5 is puting in the stack. That is why your task is returned to this adress.
RE: crosswork and sheduler Posted by ing_fox on November 20, 2007 thank
I have actually forget for(;;). (i have made many test a for the last i forget it) I have add for(;;) but have the same error..... i bug and go out....
//correction source void LED(void *pvParameters ) { for(;;) { FIO2CLR = 0xff; vTaskDelay( 10 ); FIO2SET = 0xFF; } }
somme other idea? or somebody have an exemple with a single function (led toggle) that work in FreeRTOS (for start with this apply and after change it)?
PS : i work in MCB2300 with lpc2378
thank
RE: crosswork and sheduler Posted by Borut on November 20, 2007 Hello,
i have a simple LED flash done which is done with Rowley (what IDE are you using?). Here is some of my code:
//this is in my FreeRTOSConfig
#define configUSE_PREEMPTION1 #define configUSE_IDLE_HOOK0 #define configUSE_TICK_HOOK0 #define configCPU_CLOCK_HZ( ( unsigned portLONG ) 60000000 )/* =12MHz * 5 with PLL. */ #define configTICK_RATE_HZ( ( portTickType ) 1000 ) #define configMAX_PRIORITIES( ( unsigned portBASE_TYPE ) 6 ) #define configMINIMAL_STACK_SIZE( ( unsigned portSHORT ) 128 ) #define configTOTAL_HEAP_SIZE( ( size_t ) ( 5 * 1024 ) ) #define configMAX_TASK_NAME_LEN( 16 ) #define configUSE_TRACE_FACILITY0 #define configUSE_16_BIT_TICKS0 #define configIDLE_SHOULD_YIELD1
/* 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_vTaskPrioritySet1 #define INCLUDE_uxTaskPriorityGet1 #define INCLUDE_vTaskDelete1 #define INCLUDE_vTaskCleanUpResources0 #define INCLUDE_vTaskSuspend1 #define INCLUDE_vTaskDelayUntil1 #define INCLUDE_vTaskDelay1
next i manually set the PLL:
static void vClockInit( void ) { // Fosc = 12MHz, CCLK = 60MHz // M = Fosc/CCLK = 5 (M = 5 - 1) // P = Fcco/(2*CCLK) = 2 (P = 2 - 1) PLLCFG = 0x23; //PLLCFG = 4 | (1 << 4); PLLCON = 0x01; // PLL enable PLLFEED_SEQUENCE; // wait for PLL lock to requested frequency while( (PLLSTAT & 0x400) == 0 );
PLLCON = 0x03; // connect PLL clock to processor clock PLLFEED_SEQUENCE;
APBDIV = 0x01; // peripheral clock is processor clock
MAMCR = 0x00; // MAM disable MAMTIM = 0x03; // MAM fetch cycles are 3 CCLKs in duration MAMCR = 0x02; // MAM enable }
also, my LED task has priority defined as: #define LedTASK_PRIORITY ( tskIDLE_PRIORITY + 1 )
Maybe this will help.
RE: crosswork and sheduler Posted by Dave on November 20, 2007 Are you starting the scheduler is Supervisor mode? Under CrossWorks you have to have SUPERVISOR_START defined. Use the demo app as a start so you get all the configuration required.
RE: crosswork and sheduler Posted by sashiono on November 21, 2007 //correction source void LED(void *pvParameters ) { for(;;) { FIO2CLR = 0xff; vTaskDelay( 10 ); FIO2SET = 0xFF; } }
you need to have another delay to see the blink
//corrected correction source void LED(void *pvParameters ) { for(;;) { FIO2CLR = 0xff; vTaskDelay( 10 ); FIO2SET = 0xFF; vTaskDelay( 10 ); } }
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.
|