资源下载:基于CMake和FreeRTOS实现中断管理和CPU使用率统计

写作背景

  作者在实战中发现,许多初学者在学习过程中容易忽略的FreeRTOS相关知识,往往在实际的项目开发中十分重要。这就和上学时候一样,主修课程在考试中很重要,但是考查课程在工作中更加重要。另外,有些教程文章没有专门围绕STM32进行理论论述,导致很多概念彼此混淆,搞得人一头雾水。这篇博文,作者基于STM32F103ZET6微控制器,针对在FreeRTOS学习中比较容易忽视的中断管理和CPU使用率统计知识进行论述。

中断管理和CPU使用率的概念

  • 中断管理

  相信开发过STM32固件的读者对中断的概念已经非常清楚。虽然FreeRTOS的中断实现基于STM32的硬件中断机制,但在实际使用时,却有许多规定需要注意。首先,FreeRTOS为了尽可能的减少中断延迟对系统运行效率的影响,对STM32的中断抢占优先级进行了阈值限制。规定只有中断优先级数值 ≤ 阈值的硬件中断服务函数才能调用FreeRTOS的中断安全API(带FromISR后缀)。数值>阈值的硬件中断服务函数则不能调用FreeRTOS的中断安全API,此时的硬件中断完全独立运行。

  • gpio.c
/* EXTI interrupt init*/
HAL_NVIC_SetPriority(EXTI15_10_IRQn, 2, 0);
HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
  • stm32f1xx_it.c
/* USER CODE BEGIN 1 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{

BaseType_t pxHigherPriorityTaskWoken;
uint32_t ulReturn;
ulReturn = taskENTER_CRITICAL_FROM_ISR();
if (KEY_PA15_Pin == GPIO_Pin) {

xQueueSendFromISR(Key_Queue,
&send_data,
&pxHigherPriorityTaskWoken);
portYIELD_FROM_ISR(pxHigherPriorityTaskWoken);
}
taskEXIT_CRITICAL_FROM_ISR( ulReturn );
}
/* USER CODE END 1 */

  因为STM32的NVIC