2024-02-05 09:52 PM
I try to debug how to set AZURE RTOS for 1ms tick timer. I debug this function:
HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) in file "stm32u5xx_hal_timebase_tim.c":
HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)
{
RCC_ClkInitTypeDef clkconfig;
uint32_t uwTimclock = 0;
uint32_t uwPrescalerValue = 0;
uint32_t pFLatency;
HAL_StatusTypeDef status;
/* Enable TIM6 clock */
__HAL_RCC_TIM6_CLK_ENABLE();
/* Get clock configuration */
HAL_RCC_GetClockConfig(&clkconfig, &pFLatency);
/* Compute TIM6 clock */
uwTimclock = HAL_RCC_GetPCLK1Freq();
/* Compute the prescaler value to have TIM6 counter clock equal to 1MHz */
uwPrescalerValue = (uint32_t) ((uwTimclock / 1000000U) - 1U);
/* Initialize TIM6 */
htim6.Instance = TIM6;
/* Initialize TIMx peripheral as follow:
+ Period = [(TIM6CLK/1000) - 1]. to have a (1/1000) s time base.
+ Prescaler = (uwTimclock/1000000 - 1) to have a 1MHz counter clock.
+ ClockDivision = 0
+ Counter direction = Up
*/
htim6.Init.Period = (1000000U / 1000U) - 1U; //XXXX
htim6.Init.Prescaler = uwPrescalerValue; //__HAL_TIM_CALC_PSC(160000000, 1000); //XXXX
Strange is:
Just curious why I get a 4 and later a correct 159?
The 4 makes a bit sense: it comes from a table "APBPresTable" which has the 4 as an entry (but it is a prescaler value).
But it does not make sense to see the 4 as result in a variable, divide it by 1000000 and get 160 (minus 1).
What is going on here?
BTW: I see also immediately during stepping through the code that the variable is "opt out". Why?
How to understand with debugger? The code works fine, but with debugger and tracing what is done - it does not make sense to me.
2024-04-02 03:21 AM
Hello @tjaekel
I have conducted some tests and I get as variable value for uwTimclock 4000000. For uwPrescalerValue, I calculated 3 by dividing 4000000 by 1000000 and subtracting 1.
Could you please share the code that was used to reproduce the issue in order to allow a better analysis of the problem?
2024-04-02 03:29 AM
@tjaekel wrote:BTW: I see also immediately during stepping through the code that the variable is "opt out". Why?
What variable?
Do you mean, "optimised out" ?
Perhaps show a screenshot ...