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] [April 2017 Threads]
I am working with the EFM32 GG starter kit. I'm testing the blink LED demo that comes with Simplicity Studio. In FreeRTOSConfig.h there is this line:
~~~
define configCPUCLOCKHZ (( unsigned long ) 14000000)
~~~
When I change the value to 24000000 the length of vTaskDelay increases as well. Is there another #define that needs to be changed in conjunction?
configTICKRATEHZ is 1000, and the number of ticks being passed to vTaskDelay is correctly calculated.
The task definition and creation:
~~~
static void LedBlink(void pParameters)
{
TaskParamst * pData = (TaskParamst) pParameters;
const portTickType delay = pData->delay;
for (;;)
{
BSP_LedToggle(pData->ledNo);
vTaskDelay(delay);
}
}
~~~
~~~
/* Parameters value for taks*/
static TaskParamst parametersToTask1 = { pdMSTOTICKS(1000), 0 };
static TaskParamst parametersToTask2 = { pdMSTOTICKS(1000), 1 };
/Create two task for blinking leds/
xTaskCreate( LedBlink, (const char *) "LedBlink1", STACKSIZEFORTASK, ¶metersToTask1, TASKPRIORITY, NULL);
xTaskCreate( LedBlink, (const char *) "LedBlink2", STACKSIZEFORTASK, ¶metersToTask2, TASKPRIORITY, NULL);
~~~
Is this using Systick to generate the tick interrupt? Or is it using a
low power clock along with some low power modes?
This is the function that sets up the tick interrupt.
~~~
attribute(( weak )) void vPortSetupTimerInterrupt( void )
{
/* Calculate the constants required to configure the tick interrupt. /
#if configUSETICKLESSIDLE == 1
{
ulTimerCountsForOneTick = ( configSYSTICKCLOCKHZ / configTICKRATEHZ );
xMaximumPossibleSuppressedTicks = portMAX24BITNUMBER / ulTimerCountsForOneTick;
ulStoppedTimerCompensation = portMISSEDCOUNTSFACTOR / ( configCPUCLOCKHZ / configSYSTICKCLOCK_HZ );
}
#endif / configUSETICKLESSIDLE */
/* Configure SysTick to interrupt at the requested rate. */
portNVIC_SYSTICK_LOAD_REG = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL;
portNVIC_SYSTICK_CTRL_REG = ( portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT | portNVIC_SYSTICK_ENABLE_BIT );
}
~~~
configSYSTICKCLOCKHZ = 14000000, configTICKRATEHZ = 1000
ulTimerCountsForOneTick = 14000
As you say:
ulTimerCountsForOneTick = 14000
is it right that configUSETICKLESSIDLE is set to 1? If so, could you
try setting it to 0 and see if you observe the same behaviour, or if
that fixes the issue. That will narrow down where we need to look.
The debugger runs into that code, so configUSETICKLESSIDLE is sure set to 1. I already tried setting it to 0, but I did it again just now to double check. The behavior is the same.
Someone pointed out that changing this value does not actually change my clock. Sorry for the misunderstanding. Thread closed.
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.