硬汉嵌入式论坛

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

[GUI] ThreadX GUIX的双缓冲地址问题

[复制链接]

45

主题

123

回帖

258

积分

高级会员

积分
258
发表于 7 天前 | 显示全部楼层 |阅读模式
1.驱动地址:_gx_display_driver_565rgb_setup(display, (VOID*)STM32_SCREEN_HANDLE, stm32h7_565rgb_buffer_toggle);

2.触摸地址:event.gx_event_display_handle = 0xC0000000;
            gx_system_event_send(&event);
3.画布地址:guiapp_display_table[0].canvas_memory = (GX_COLOR *)Canvas_Memory;
4.LTDC中断地址:void LTDC_IRQHandler(void)
{
    LTDC->ICR = (uint32_t)LTDC_IER_LIE;

    if(g_ucGuixFlag == 0)
    {
        g_ucGuixFlag = 1;

        /* 更新LTDC寄存器 */   
        __HAL_LTDC_LAYER(&hLTDC, 0)->CFBAR = 0xC0000000;     
        __HAL_LTDC_RELOAD_IMMEDIATE_CONFIG(&hLTDC);
    }
    else
    {
        g_ucGuixFlag = 0;

         /* 更新LTDC寄存器 */      
        __HAL_LTDC_LAYER(&hLTDC, 0)->CFBAR = 0xC0200000;     
        __HAL_LTDC_RELOAD_IMMEDIATE_CONFIG(&hLTDC);
    }

    tx_semaphore_put(&GuixSemaphore);
}
5.双缓冲地址:
void DoubleBufferPro(void)
{
    tx_semaphore_get(&GuixSemaphore, TX_WAIT_FOREVER);

    if(g_ucGuixFlag == 1)
    {
        DMA2D->OMAR = (uint32_t)0xC0200000;
    }
    else
    {
        DMA2D->OMAR = (uint32_t)0xC0000000;
    }

    DMA2D->CR = 0x00000000UL | (1 << 9);
    DMA2D->FGMAR = (uint32_t)0xC0400000;
    DMA2D->FGOR = 0;
    DMA2D->OOR = 0;

    /* 前景层和输出区域都采用RGB565颜色格式 */
    DMA2D->FGPFCCR = LTDC_PIXEL_FORMAT_RGB565;
    DMA2D->OPFCCR = LTDC_PIXEL_FORMAT_RGB565;
    DMA2D->NLR = (uint32_t)(g_LcdWidth << 16) | (uint16_t)g_LcdHeight;
    DMA2D->CR |= DMA2D_CR_START;

    while (DMA2D->CR & DMA2D_CR_START) { tx_thread_sleep(1);}   
}
触摸地址和驱动地址一致,有些滑动显示不正常。触摸地址是否跟着显示地址变化呢?





回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116197
QQ
发表于 6 天前 | 显示全部楼层
调节下行中断的位置试试,应该是存在你当前的刷新还没有执行完毕,就启动新得缓冲地址问题。

因为有时候无法让刷新在双缓冲切换前就准备就绪

回复

使用道具 举报

45

主题

123

回帖

258

积分

高级会员

积分
258
 楼主| 发表于 6 天前 | 显示全部楼层
eric2013 发表于 2025-6-4 08:33
调节下行中断的位置试试,应该是存在你当前的刷新还没有执行完毕,就启动新得缓冲地址问题。

因为有时候 ...

硬汉哥,调整中断位置和VFP都解决不了滑动显示重影的问题,有没有一个获取准备就绪的标志位呢?还有什么办法能解决呢?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116197
QQ
发表于 6 天前 | 显示全部楼层
yihang1004 发表于 2025-6-4 10:08
硬汉哥,调整中断位置和VFP都解决不了滑动显示重影的问题,有没有一个获取准备就绪的标志位呢?还有什么 ...

建议先用单缓冲机制好点。虽然偶尔有撕裂

不过双缓冲这个我还有点思路,就是你的操作完成了,下次行中断再切换,这样万无一失
回复

使用道具 举报

45

主题

123

回帖

258

积分

高级会员

积分
258
 楼主| 发表于 6 天前 | 显示全部楼层
eric2013 发表于 2025-6-4 10:45
建议先用单缓冲机制好点。虽然偶尔有撕裂

不过双缓冲这个我还有点思路,就是你的操作完成了,下次行中 ...

嗯,尝试找个函数读取一下操作完成标记,在切换中断。
回复

使用道具 举报

45

主题

123

回帖

258

积分

高级会员

积分
258
 楼主| 发表于 5 天前 | 显示全部楼层
eric2013 发表于 2025-6-4 10:45
建议先用单缓冲机制好点。虽然偶尔有撕裂

不过双缓冲这个我还有点思路,就是你的操作完成了,下次行中 ...

硬汉哥如有解决方法了,麻烦告知一下,谢谢!
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116197
QQ
发表于 4 天前 | 显示全部楼层
yihang1004 发表于 2025-6-5 19:09
硬汉哥如有解决方法了,麻烦告知一下,谢谢!

好的,后面我也试试
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-10 04:58 , Processed in 0.328300 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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