显示内存占用和RAM剩余内存
一,FreeRTOS 基本设置
二,写代码
void StartDefaultTask(void const * argument)
{
/* USER CODE BEGIN StartDefaultTask */
/* Infinite loop */
for(;;)
{
if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_9) == 1)
{
osDelay(10);
if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_9) == 1)
{
osThreadSuspendAll();
printf("KEY_1 已经按下\r\n");
osThreadResumeAll();
//configTOTAL_HEAP_SIZE 的大小 ===> 3072
//xPortGetFreeHeapSize 用于返回堆栈中剩余空间(bytes)的大小
printf("剩余RAM为 ===> %d%% \r\n",xPortGetFreeHeapSize()*100/configTOTAL_HEAP_SIZE);
printf("内存占用为 ===> %d%% \r\n",100-xPortGetFreeHeapSize()*100/configTOTAL_HEAP_SIZE);
while(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_9) == 1)
{
osDelay(10);
}
}
}
}
/* USER CODE END StartDefaultTask */
三,结果
显示CPU利用率
一,FreeRTOS 基本设置
将STM32Cube_FW_F1_V1.8.4\Utilities中的CPU导入到自己项目中并添加
二,写代码
printf("CPU利用率为 ===> %d%% \r\n",osGetCPUUsage());
申请内存
二,写代码
void StartDefaultTask(void const * argument)
{
/* USER CODE BEGIN StartDefaultTask */
/* Infinite loop */
void * home;
for(;;)
{
if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_9) == 1)
{
osDelay(10);
if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_9) == 1)
{
osThreadSuspendAll();
printf("KEY_1 已经按下\r\n");
osThreadResumeAll();
home = pvPortMalloc(configTOTAL_HEAP_SIZE*5/100);
//configTOTAL_HEAP_SIZE 的大小 ===> 3072
printf("剩余RAM为 ===> %d%% \r\n",xPortGetFreeHeapSize()*100/configTOTAL_HEAP_SIZE);
printf("内存占用为 ===> %d%% \r\n",100-xPortGetFreeHeapSize()*100/configTOTAL_HEAP_SIZE);
// vPortFree(home);
//
// printf("剩余RAM为 ===> %d%% \r\n",xPortGetFreeHeapSize()*100/configTOTAL_HEAP_SIZE);
// printf("内存占用为 ===> %d%% \r\n",100-xPortGetFreeHeapSize()*100/configTOTAL_HEAP_SIZE);
while(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_9) == 1)
{
osDelay(10);
}
}
}
}
/* USER CODE END StartDefaultTask */
}
三,结果
内存申请了5%,就会多占用5%
总结
xPortGetFreeHeapSize() 得到剩余内存的大小
configTOTAL_HEAP_SIZE 内存总大小
pvPortMalloc() 申请内存
vPortFree() 释放内存