硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1422|回复: 3
收起左侧

[LVGL] LVGL+HAL库求助,在stm32cube创建freertos之后,运行键盘例程,按一个字母之后就卡死了,debug显示卡在prvCheckTasksWaitingT...

[复制链接]

2

主题

2

回帖

8

积分

新手上路

积分
8
发表于 2024-8-15 23:44:49 | 显示全部楼层 |阅读模式
最近开始接触lvgl,用的是电阻屏和stm32f103zet6,在移植成功lvgl的情况下,再加入了freertos系统,跟着网上教程写好了基本代码,想着测试一下键盘输入,发现使用调度之后,屏幕点击一个按键之后就卡住了,debug显示卡在prvCheckTasksWaitingTermination()和prvIdleTask()之间来回运行,没有再返回心跳和键盘检测。跪求大佬们支招!
/**
******************************************************************************
* File Name          : freertos.c
* Description        : Code for freertos applications
******************************************************************************
* @attention
*
* Copyright (c) 2024 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* USER CODE END Header */

/* Includes ------------------------------------------------------------------*/
#include "FreeRTOS.h"
#include "task.h"
#include "main.h"
#include "cmsis_os.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include <stdio.h>
#include "lv_port_disp.h"
#include "lv_port_indev.h"
#include "../../lv_examples.h"
#include "Delay.h"
/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */

/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN Variables */

/* USER CODE END Variables */
/* Definitions for defaultTask */
osThreadId_t defaultTaskHandle;
const osThreadAttr_t defaultTask_attributes = {
    .name = "defaultTask",
    .stack_size = 256 * 4,
    .priority = (osPriority_t)osPriorityNormal,
};
osThreadId_t displayTaskHandle;
const osThreadAttr_t displayTask_attributes = {
    .name = "displayTask",
    .stack_size = 18 * 1024,
    .priority = (osPriority_t)osPriorityNormal,
};
osMutexId_t lvgl_MutexHandle;
const osMutexAttr_t lvgl_Mutex_attributes = {
    .name = "lvgl_Mutex"};

/* Private function prototypes -----------------------------------------------*/
/* USER CODE BEGIN FunctionPrototypes */
void displayTask(void *argument);

/* USER CODE END FunctionPrototypes */

void StartDefaultTask(void *argument);

void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */

/* Hook prototypes */
void vApplicationTickHook(void);

/* USER CODE BEGIN 3 */
void vApplicationTickHook(void)
{
  lv_tick_inc(1);
  printf("tick\r\n");
}

void displayTask(void *argument)
{
  lv_example_keyboard_1();

  for (;;)
  {
    printf("displayTask\r\n");
    osMutexAcquire(lvgl_MutexHandle, portMAX_DELAY);
    lv_task_handler();
    osMutexRelease(lvgl_MutexHandle);
    osDelay(3);
  }
}

/* USER CODE END 3 */

/**
* @brief  FreeRTOS initialization
* @param  None
* @retval None
*/
void MX_FREERTOS_Init(void)
{
  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* USER CODE BEGIN RTOS_MUTEX */
  /* add mutexes, ... */
  lvgl_MutexHandle = osMutexNew(&lvgl_Mutex_attributes);

  /* USER CODE END RTOS_MUTEX */

  /* USER CODE BEGIN RTOS_SEMAPHORES */
  /* add semaphores, ... */
  /* USER CODE END RTOS_SEMAPHORES */

  /* USER CODE BEGIN RTOS_TIMERS */
  /* start timers, add new ones, ... */
  /* USER CODE END RTOS_TIMERS */

  /* USER CODE BEGIN RTOS_QUEUES */
  /* add queues, ... */
  /* USER CODE END RTOS_QUEUES */

  /* Create the thread(s) */
  /* creation of defaultTask */
  defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes);

  /* USER CODE BEGIN RTOS_THREADS */
  /* add threads, ... */
  displayTaskHandle = osThreadNew(displayTask, NULL, &displayTask_attributes);

  /* USER CODE END RTOS_THREADS */

  /* USER CODE BEGIN RTOS_EVENTS */
  /* add events, ... */
  /* USER CODE END RTOS_EVENTS */
}

/* USER CODE BEGIN Header_StartDefaultTask */
/**
* @brief  Function implementing the defaultTask thread.
* @param  argument: Not used
* @retval None
*/
/* USER CODE END Header_StartDefaultTask */
void StartDefaultTask(void *argument)
{
  /* USER CODE BEGIN StartDefaultTask */
  /* Infinite loop */
  for (;;)
  {
    printf("Hello World\n");
    osDelay(3);
  }
  /* USER CODE END StartDefaultTask */
}

/* Private application code --------------------------------------------------*/
/* USER CODE BEGIN Application */

/* USER CODE END Application */



回复

使用道具 举报

59

主题

675

回帖

857

积分

金牌会员

积分
857
发表于 2024-8-16 08:27:15 | 显示全部楼层
看看是不是内存不够,个人建议,既然都用上GUI了,什么还用STM32F103系列呢,建议直接用H7学习或做项目都非常合适
回复

使用道具 举报

2

主题

2

回帖

8

积分

新手上路

积分
8
 楼主| 发表于 2024-8-16 10:14:46 | 显示全部楼层
ou513 发表于 2024-8-16 08:27
看看是不是内存不够,个人建议,既然都用上GUI了,什么还用STM32F103系列呢,建议直接用H7学习或做项目都非 ...

感谢提醒,目前手头只有这种开发板,只能精打细算地学了
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117530
QQ
发表于 2024-8-17 10:53:25 | 显示全部楼层
使用LVGL,内存小是个麻烦的问题,建议关闭LVGL的各种炫酷特性测试。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-13 07:15 , Processed in 0.044833 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表