硬汉嵌入式论坛

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

[DMA2D] STM32H743 移植LVGL STM32_DMA2D报错

[复制链接]

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2025-7-11 20:59:57 | 显示全部楼层 |阅读模式
本帖最后由 44445545 于 2025-7-11 21:09 编辑

第一次移植LVGL-8.3.11版本,打开: #define LV_USE_GPU_DMA2D 1 编译后疯狂报错,但我看教程,STM32_DMA2D没有其他需要配置的地方,大神们救命,卡一天了



..\..\Middlewares\LVGL\GUI\lvgl\src\draw\stm32_dma2d\lv_gpu_stm32_dma2d.c(285): error:  #20: identifier "x" is undefined
      lv_point_t offset = {x: area2->x1 - area1->x1, y: area2->y1 - area1->y1};
..\..\Middlewares\LVGL\GUI\lvgl\src\draw\stm32_dma2d\lv_gpu_stm32_dma2d.c(285): error:  #67: expected a "}"
      lv_point_t offset = {x: area2->x1 - area1->x1, y: area2->y1 - area1->y1};
..\..\Middlewares\LVGL\GUI\lvgl\src\draw\stm32_dma2d\lv_gpu_stm32_dma2d.c(285): error:  #65: expected a ";"
      lv_point_t offset = {x: area2->x1 - area1->x1, y: area2->y1 - area1->y1};
..\..\Middlewares\LVGL\GUI\lvgl\src\draw\stm32_dma2d\lv_gpu_stm32_dma2d.c(285): warning:  #940-D: missing return statement at end of non-void function "lv_area_get_offset"
      lv_point_t offset = {x: area2->x1 - area1->x1, y: area2->y1 - area1->y1};
..\..\Middlewares\LVGL\GUI\lvgl\src\draw\stm32_dma2d\lv_gpu_stm32_dma2d.c(285): warning:  #177-D: variable "y"  was declared but never referenced
      lv_point_t offset = {x: area2->x1 - area1->x1, y: area2->y1 - area1->y1};
..\..\Middlewares\LVGL\GUI\lvgl\src\draw\stm32_dma2d\lv_gpu_stm32_dma2d.c(286): error:  #169: expected a declaration
      return offset;
..\..\Middlewares\LVGL\GUI\lvgl\src\draw\stm32_dma2d\lv_gpu_stm32_dma2d.c(287): error:  #169: expected a declaration
  }
..\..\Middlewares\LVGL\GUI\lvgl\src\draw\stm32_dma2d\lv_gpu_stm32_dma2d.c(313): warning:  #12-D: parsing restarts here after previous syntax error
              return UNSUPPORTED;
..\..\Middlewares\LVGL\GUI\lvgl\src\draw\stm32_dma2d\lv_gpu_stm32_dma2d.c(314): error:  #169: expected a declaration
      }
..\..\Middlewares\LVGL\GUI\lvgl\src\draw\stm32_dma2d\lv_gpu_stm32_dma2d.c(344): warning:  #12-D: parsing restarts here after previous syntax error
      lv_area_t draw_area;
..\..\Middlewares\LVGL\GUI\lvgl\src\draw\stm32_dma2d\lv_gpu_stm32_dma2d.c(345): error:  #169: expected a declaration
      if(!_lv_area_intersect(&draw_area, src_area, draw_ctx->clip_area)) return LV_RES_OK;
..\..\Middlewares\LVGL\GUI\lvgl\src\draw\stm32_dma2d\lv_gpu_stm32_dma2d.c(347): error:  #59: function call is not allowed in a constant expression
      lv_coord_t dest_stride = lv_area_get_width(draw_ctx->buf_area);
..\..\Middlewares\LVGL\GUI\lvgl\src\draw\stm32_dma2d\lv_gpu_stm32_dma2d.c(347): error:  #20: identifier "draw_ctx" is undefined
      lv_coord_t dest_stride = lv_area_get_width(draw_ctx->buf_area);
..\..\Middlewares\LVGL\GUI\lvgl\src\draw\stm32_dma2d\lv_gpu_stm32_dma2d.c(348): error:  #59: function call is not allowed in a constant expression
      lv_point_t src_offset = lv_area_get_offset(src_area, &draw_area); // source image offset in relation to draw_area
..\..\Middlewares\LVGL\GUI\lvgl\src\draw\stm32_dma2d\lv_gpu_stm32_dma2d.c(348): error:  #20: identifier "src_area" is undefined
      lv_point_t src_offset = lv_area_get_offset(src_area, &draw_area); // source image offset in relation to draw_area
..\..\Middlewares\LVGL\GUI\lvgl\src\draw\stm32_dma2d\lv_gpu_stm32_dma2d.c(348): error:  #20: identifier "draw_area" is undefined
      lv_point_t src_offset = lv_area_get_offset(src_area, &draw_area); // source image offset in relation to draw_area
..\..\Middlewares\LVGL\GUI\lvgl\src\draw\stm32_dma2d\lv_gpu_stm32_dma2d.c(349): error:  #79: expected a type specifier
      lv_area_move(&draw_area, -draw_ctx->buf_area->x1, -draw_ctx->buf_area->y1);
..\..\Middlewares\LVGL\GUI\lvgl\src\draw\stm32_dma2d\lv_gpu_stm32_dma2d.c(349): error:  #79: expected a type specifier
      lv_area_move(&draw_area, -draw_ctx->buf_area->x1, -draw_ctx->buf_area->y1);
..\..\Middlewares\LVGL\GUI\lvgl\src\draw\stm32_dma2d\lv_gpu_stm32_dma2d.c(349): error:  #79: expected a type specifier
      lv_area_move(&draw_area, -draw_ctx->buf_area->x1, -draw_ctx->buf_area->y1);
..\..\Middlewares\LVGL\GUI\lvgl\src\draw\stm32_dma2d\lv_gpu_stm32_dma2d.c(349): error:  #260-D: explicit type is missing ("int" assumed)
      lv_area_move(&draw_area, -draw_ctx->buf_area->x1, -draw_ctx->buf_area->y1);
..\..\Middlewares\LVGL\GUI\lvgl\src\draw\stm32_dma2d\lv_gpu_stm32_dma2d.c(349): error:  #147: declaration is incompatible with "void lv_area_move(lv_area_t *, lv_coord_t, lv_coord_t)"  (declared at line 169 of "..\..\Middlewares\LVGL\GUI\lvgl\src\draw\stm32_dma2d\../../hal/../misc/lv_area.h")
      lv_area_move(&draw_area, -draw_ctx->buf_area->x1, -draw_ctx->buf_area->y1);
..\..\Middlewares\LVGL\GUI\lvgl\src\draw\stm32_dma2d\lv_gpu_stm32_dma2d.c(350): error:  #757: "draw_ctx"  is not a type name
      _lv_draw_stm32_dma2d_blend_map(draw_ctx->buf, dest_stride, &draw_area, img->data, img->header.w,
..\..\Middlewares\LVGL\GUI\lvgl\src\draw\stm32_dma2d\lv_gpu_stm32_dma2d.c(350): error:  #18: expected a ")"
      _lv_draw_stm32_dma2d_blend_map(draw_ctx->buf, dest_stride, &draw_area, img->data, img->header.w,
..\..\Middlewares\LVGL\GUI\lvgl\src\draw\stm32_dma2d\lv_gpu_stm32_dma2d.c(350): error:  #260-D: explicit type is missing ("int" assumed)
      _lv_draw_stm32_dma2d_blend_map(draw_ctx->buf, dest_stride, &draw_area, img->data, img->header.w,
..\..\Middlewares\LVGL\GUI\lvgl\src\draw\stm32_dma2d\lv_gpu_stm32_dma2d.c(350): error:  #147: declaration is incompatible with "void _lv_draw_stm32_dma2d_blend_map(const lv_color_t *, lv_coord_t, const lv_area_t *, const void *, lv_coord_t, const lv_point_t *, lv_opa_t, dma2d_color_format_t, _Bool)"  (declared at line 62)
      _lv_draw_stm32_dma2d_blend_map(draw_ctx->buf, dest_stride, &draw_area, img->data, img->header.w,
..\..\Middlewares\LVGL\GUI\lvgl\src\draw\stm32_dma2d\lv_gpu_stm32_dma2d.c(352): error:  #169: expected a declaration
      return LV_RES_OK;
..\..\Middlewares\LVGL\GUI\lvgl\src\draw\stm32_dma2d\lv_gpu_stm32_dma2d.c(353): error:  #169: expected a declaration
  }
..\..\Middlewares\LVGL\GUI\lvgl\src\draw\stm32_dma2d\lv_gpu_stm32_dma2d.c(386): warning:  #12-D: parsing restarts here after previous syntax error
          DMA2D->OCOLR = color.full;
..\..\Middlewares\LVGL\GUI\lvgl\src\draw\stm32_dma2d\lv_gpu_stm32_dma2d.c(388): error:  #169: expected a declaration
      }
..\..\Middlewares\LVGL\GUI\lvgl\src\draw\stm32_dma2d\lv_gpu_stm32_dma2d.c(410): warning:  #12-D: parsing restarts here after previous syntax error
          DMA2D->BGCOLR = 0;  // used in A4 and A8 modes only
..\..\Middlewares\LVGL\GUI\lvgl\src\draw\stm32_dma2d\lv_gpu_stm32_dma2d.c(411): error:  #79: expected a type specifier
          __lv_gpu_stm32_dma2d_clean_cache(DMA2D->BGMAR, DMA2D->BGOR, draw_width, draw_height, sizeof(lv_color_t));
..\..\Middlewares\LVGL\GUI\lvgl\src\draw\stm32_dma2d\lv_gpu_stm32_dma2d.c(411): error:  #79: expected a type specifier
          __lv_gpu_stm32_dma2d_clean_cache(DMA2D->BGMAR, DMA2D->BGOR, draw_width, draw_height, sizeof(lv_color_t));
..\..\Middlewares\LVGL\GUI\lvgl\src\draw\stm32_dma2d\lv_gpu_stm32_dma2d.c(411): error:  #20: identifier "draw_width" is undefined
          __lv_gpu_stm32_dma2d_clean_cache(DMA2D->BGMAR, DMA2D->BGOR, draw_width, draw_height, sizeof(lv_color_t));
..\..\Middlewares\LVGL\GUI\lvgl\src\draw\stm32_dma2d\lv_gpu_stm32_dma2d.c(411): error:  #20: identifier "draw_height" is undefined
          __lv_gpu_stm32_dma2d_clean_cache(DMA2D->BGMAR, DMA2D->BGOR, draw_width, draw_height, sizeof(lv_color_t));
..\..\Middlewares\LVGL\GUI\lvgl\src\draw\stm32_dma2d\lv_gpu_stm32_dma2d.c(411): error:  #79: expected a type specifier
          __lv_gpu_stm32_dma2d_clean_cache(DMA2D->BGMAR, DMA2D->BGOR, draw_width, draw_height, sizeof(lv_color_t));
..\..\Middlewares\LVGL\GUI\lvgl\src\draw\stm32_dma2d\lv_gpu_stm32_dma2d.c(411): error:  #260-D: explicit type is missing ("int" assumed)
          __lv_gpu_stm32_dma2d_clean_cache(DMA2D->BGMAR, DMA2D->BGOR, draw_width, draw_height, sizeof(lv_color_t));



微信截图_20250711210127.png
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 2025-7-12 09:12:18 | 显示全部楼层
参考下我这个试试

基于V5,V6和V7的LVGL模板,驱动支持单缓冲,双缓冲和配合硬件消隐的双缓冲,以及电容和电阻触摸全支持(2023-07-19)
https://forum.anfulai.cn/forum.p ... 0161&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2025-7-12 09:36:54 | 显示全部楼层
eric2013 发表于 2025-7-12 09:12
参考下我这个试试

基于V5,V6和V7的LVGL模板,驱动支持单缓冲,双缓冲和配合硬件消隐的双缓冲,以及电容 ...

大神的这篇我很早就拜读了,我现在不打开LVGL STM32_DMA2D编译一切正常,官方的demo也都能正常显示,一打开LVGL STM32_DMA2D编译疯狂报错,可能是我的环境有问题吗
回复

使用道具 举报

0

主题

290

回帖

290

积分

高级会员

积分
290
发表于 2025-7-13 14:36:40 | 显示全部楼层
44445545 发表于 2025-7-12 09:36
大神的这篇我很早就拜读了,我现在不打开LVGL STM32_DMA2D编译一切正常,官方的demo也都能正常显示,一打 ...

可以的话,升级到最新的LVGL,自带了ST的DMA2D驱动
回复

使用道具 举报

4

主题

126

回帖

138

积分

初级会员

积分
138
发表于 2025-7-13 22:45:52 | 显示全部楼层
使用这个编译 #define LV_GPU_DMA2D_CMSIS_INCLUDE "stm32h7xx_hal.h"
回复

使用道具 举报

6

主题

152

回帖

170

积分

初级会员

积分
170
发表于 2025-7-14 08:38:17 | 显示全部楼层
用最新的8.4,我记得8.3有个版本的DMA2D不能用
回复

使用道具 举报

7

主题

53

回帖

74

积分

初级会员

积分
74
发表于 2025-7-21 23:48:26 | 显示全部楼层
同样的问题,楼主是否解决了,我用的8.4
回复

使用道具 举报

7

主题

53

回帖

74

积分

初级会员

积分
74
发表于 2025-7-22 00:12:20 | 显示全部楼层
打开KEIL里的GNU扩展编译就不会报错了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-11 23:52 , Processed in 0.045921 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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