cancel
Showing results for 
Search instead for 
Did you mean: 

osDelay does not wait for specified ticks

cchan.3
Associate II

I have initialized the kernel first, and called HAL_Init() and SystemClock_Config() within the OS task - StartDefaultTask, the osDelay is not blocking the StartDefaultTask until the specified number of ticks.

configTICK_RATE_HZ is set to 1000 Hz (1 ms). 
when osDelay(10000) --> the task is blocked for 2002 ticks and the task execution resumed.
when osDelay(5000) --> the task is blocked for 1001 ticks and the task execution resumed.
cchan3_0-1692437957980.png

 

 
Clock configuration: 

void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

/** Configure the main internal regulator output voltage
*/
__HAL_RCC_PWR_CLK_ENABLE();
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
/** Initializes the RCC Oscillators according to the specified parameters
* in the RCC_OscInitTypeDef structure.
*/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
RCC_OscInitStruct.PLL.PLLM = 8;
RCC_OscInitStruct.PLL.PLLN = 80;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 4;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
/** Initializes the CPU, AHB and APB buses clocks
*/
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
{
Error_Handler();
}
}

Please tell us the rationale behind wait time being scaled when System Clock configuration and HAL are called after starting the OS Kernel.

3 REPLIES 3
Pavel A.
Evangelist III

Hi @cchan.3 Could you tell where have you found an example where HAL_Init() and SystemClock_Config() are called in a task, rather than before initialization of RTOS (by the way which RTOS you're using)? 

 

@Pavel A. ,

I didn't find it anywhere. I am just trying to understand what happens when it is called inside a task. 

Pavel A.
Evangelist III

@cchan.3  As you see, nothing good happens. There are examples with RTOS, please refer to them.