全国做临期进口食品的网站,群晖做网站服务器会卡吗,网站出现的问题,wordpress potSTM32 CubeMX STM32 CubeMX #xff08;第四步Freertos内存管理和CPU使用率#xff09; STM32 CubeMX一、STM32 CubeMX设置时钟配置HAL时基选择TIM1#xff08;不要选择滴答定时器#xff1b;滴答定时器留给OS系统做时基#xff09;使用STM32 CubeMX 库#xff0c;配置Fr…STM32 CubeMX STM32 CubeMX 第四步Freertos内存管理和CPU使用率 STM32 CubeMX一、STM32 CubeMX设置时钟配置HAL时基选择TIM1不要选择滴答定时器滴答定时器留给OS系统做时基使用STM32 CubeMX 库配置Freertos使能定时器计时0.1中断使能宏定义 二、实验一CPU使用率配置代码任务代码实验现象 学习使用Freertos第四步 在 FreeRTOS 中中断管理和软件定时
·taskENTER_CRITICAL()·; 是一个函数在 FreeRTOS 中使用的用于进入临界区critical section。在临界区内中断会被禁用这样可以确保在多任务环境下共享资源的安全性。你可以在需要保护共享资源的代码段中使用· taskENTER_CRITICAL()·; 来禁用中断然后在临界区结束时使用 taskEXIT_CRITICAL(); 来重新启用中断。这样可以防止多个任务同时访问共享资源而导致的竞态条件。
一、STM32 CubeMX设置
时钟配置 HAL时基选择TIM1不要选择滴答定时器滴答定时器留给OS系统做时基 使用STM32 CubeMX 库配置Freertos
选择CMISS_V1接口就可以满足Freertos接口且代码量比CMISS_V2小CMISS_V2支持更多的RTOS接口所以代码量比CMISS_V1多
使能定时器计时0.1中断 使能宏定义 二、实验一CPU使用率
设置时基
配置代码
__weak void configureTimerForRunTimeStats(void)
{g_osRuntimeCounter0;
}__weak unsigned long getRunTimeCounterValue(void)
{
return g_osRuntimeCounter;
}任务代码
void StartDefaultTask1(void const * argument)
{/* USER CODE BEGIN StartDefaultTask1 *//* Infinite loop */for(;;){printf(Task01 \r\n); // printf输出字符串osDelay(1000);}/* USER CODE END StartDefaultTask1 */
}/* USER CODE BEGIN Header_StartTask02 */
/**
* brief Function implementing the Task02 thread.
* param argument: Not used
* retval None
*/
/* USER CODE END Header_StartTask02 */
void StartTask02(void const * argument)
{/* USER CODE BEGIN StartTask02 *//* Infinite loop */for(;;){printf(Task02 \r\n); // printf输出字符串osDelay(1000);}/* USER CODE END StartTask02 */
}/* USER CODE BEGIN Header_CpuStartTask03 */
/**
* brief Function implementing the CpuTask03 thread.
* param argument: Not used
* retval None
*/
/* USER CODE END Header_CpuStartTask03 */uint8_t CPU_RunInfo[400]; //保存任务运行时间信息
void CpuStartTask03(void const * argument)
{/* Infinite loop */for(;;){printf( B阻塞 R就绪 D删除 S暂停 X运行 \r\n);memset(CPU_RunInfo,0,400); //信息缓冲区清零osThreadList(CPU_RunInfo); //获取任务运行时间信息printf(---------------------------------------------\r\n);printf(Task Task_Status Priority Remaining_Stack Task_No\r\n);printf(%s, CPU_RunInfo);printf(---------------------------------------------\r\n);// memset(CPU_RunInfo,0,400); //信息缓冲区清零
//
// vTaskGetRunTimeStats((char *)CPU_RunInfo);
//
// printf(Task Running_Count Utilization\r\n);
// printf(%s, CPU_RunInfo);
// printf(---------------------------------------------\r\n\n);osDelay(1000);}}实验现象