gpt4 book ai didi

c - 在函数 2D DMA 中传递地址

转载 作者:行者123 更新时间:2023-11-30 16:11:51 27 4
gpt4 key购买 nike

我有一个具有该原型(prototype)的函数:

HAL_StatusTypeDef HAL_DMA2D_Start(DMA2D_HandleTypeDef *hdma2d, uint32_t pdata, uint32_t DstAddress, uint32_t Width,  uint32_t Height)

它应该在帧缓冲区上绘制一个像素

HAL_DMA2D_Start(&hdma2d, c,
&OLED_BUFFER[0] +
(PIXELWINDOW.pos.x + PIXELWINDOW.pos.y * 320) * 2,
1, 1);

该行的问题

 &OLED_BUFFER[0] +
(PIXELWINDOW.pos.x + PIXELWINDOW.pos.y * 320) * 2

我收到警告

warning: passing argument 3 of 'HAL_DMA2D_Start' makes integer from pointer without a cast

OLED_BUFFER 是 uint16_t 类型的数组,每个像素帧缓冲区 2 个字节

完整功能如下:

void PIXELDATA(uint16_t c) {
DMA2D_HandleTypeDef hdma2d;
hdma2d.Instance = DMA2D;
hdma2d.Init.Mode = DMA2D_R2M;
hdma2d.Init.ColorMode = DMA2D_OUTPUT_RGB565;
hdma2d.Init.OutputOffset = 320 - 1;
HAL_DMA2D_Init(&hdma2d);
if (PIXELWINDOW.pos.x <= PIXELWINDOW.end.x &&

PIXELWINDOW.pos.y <= PIXELWINDOW.end.y) {
HAL_DMA2D_Start(&hdma2d, c,
(uint16_t)&OLED_BUFFER +
(PIXELWINDOW.pos.x + PIXELWINDOW.pos.y * 320) * 2,
1, 1);
HAL_DMA2D_PollForTransfer(&hdma2d, 10);

}
PIXELWINDOW.pos.x++;

if (PIXELWINDOW.pos.x > PIXELWINDOW.end.x) {
PIXELWINDOW.pos.x = PIXELWINDOW.start.x;

PIXELWINDOW.pos.y++;
}
}

最佳答案

函数HAL_DMA2D_Start的第三个参数不是指针,而是一个整数,更准确地说是一个uint32_t。因此,您必须将 &OLED_BUFFER[0] + ... 转换为 32 位无符号整数。

请注意,在 32 位 STM32 上,指针和 uint32_t 都是 32 位变量,但在其他处理器上并非总是如此。

在我看来,函数 HAL_DMA2D_Start 将指针或 uintptr_t 作为参数会更清晰。

关于c - 在函数 2D DMA 中传递地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58481168/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com