У меня есть функция с таким прототипом:
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++;
}
}