搜索
bottom↓
回复: 67

LPC1788的LCD控制器支持多层显示吗?

[复制链接]

出0入0汤圆

发表于 2014-9-9 17:18:56 | 显示全部楼层 |阅读模式
RT;最近在做一些GUI;但是在关闭窗口或者对话框的时候老是闪屏;想问一下,这个问题怎么解决?同事推荐用多层显示,实际操作了一下,参考emwin官方例程和配置,多层显示的效果没有出来。想问一下,LPC1788DE 控制器支持多层显示吗?

出0入0汤圆

发表于 2014-9-9 17:26:25 | 显示全部楼层
多层显示就是把SDRAM分成几个显示区,事先准备数据,用到时切换SDRAM地址!

出0入0汤圆

发表于 2014-9-9 17:36:38 | 显示全部楼层
支持。看怎么个闪法了,有些闪法是正常的。

出0入0汤圆

 楼主| 发表于 2014-9-9 17:47:19 | 显示全部楼层
xiaodao35 发表于 2014-9-9 17:26
多层显示就是把SDRAM分成几个显示区,事先准备数据,用到时切换SDRAM地址!

谢谢2楼回答,我在做的时候也进行了SDRAM的地址分区;但是没有出来多层显示的效果。按emwin的手册中做了2个地方的修改:1是:最大可用层数(GUI_NUM_LAYERS)的修改;2是在LCD_X_Config中做了第二层的修改:                    
#if (MuliLayer_Suppot)       
GUI_DEVICE_CreateAndLink(DISPLAY_DRIVER, GUICC_M8888I, 0, 1);
  LCD_SetPosEx     (1, 0, 0);
  LCD_SetSizeEx  (1, XSIZE_PHYS , YSIZE_PHYS);
  LCD_SetVRAMAddrEx(1, (void*)Second_Layer_Addr);
#endif
请问其他还有需要注意或者配置的地方吗?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-9-9 17:50:46 | 显示全部楼层
只支持多缓冲吧。
多层显示好像游戏机的芯片支持的比较多,前景,后景什么的,可以进行叠加。

出0入0汤圆

 楼主| 发表于 2014-9-9 17:51:06 | 显示全部楼层
modbus 发表于 2014-9-9 17:36
支持。看怎么个闪法了,有些闪法是正常的。

在无效完窗口之后《 WM_InvalidateWindow(WM_HBKWIN);》;每次重绘該窗口就有轻微的闪屏现象(已做存储设备处理,但是感觉没效果);

出0入0汤圆

 楼主| 发表于 2014-9-9 17:53:41 | 显示全部楼层
shandian 发表于 2014-9-9 17:50
只支持多缓冲吧。
多层显示好像游戏机的芯片支持的比较多,前景,后景什么的,可以进行叠加。 ...

嗯,LPC1788有两个buffer的LCD缓存,不知道多层显示硬件上面需不需要有支持,还是说相2楼那样软件上搞定就行了?

出0入0汤圆

发表于 2014-9-9 18:03:02 | 显示全部楼层
我用过LPC1788,但没用过现成的GUI。不知道你说的闪屏指的那种。
要注意在切换缓冲地址的时候,需要设置帧起始中断,在中断中进行切换。
另外我在使用中发现,对当前的显示缓冲区进行连续访问的时候,屏幕会发生闪烁,现象就和背光时明时暗一样。

出0入0汤圆

发表于 2014-9-9 18:31:57 来自手机 | 显示全部楼层
emwin有这方面的处理,读手册

出0入0汤圆

发表于 2014-9-9 19:00:00 | 显示全部楼层
加帧同步处理

出0入0汤圆

发表于 2014-9-9 19:27:25 | 显示全部楼层
本帖最后由 nongxiaoming 于 2014-9-9 19:28 编辑

加上双缓冲就不会有任何闪屏了,楼主。具体你可以看看rt-thread的LPC4088的做法,你觉得有必要还可以三缓冲,但经过我的实际测试,三缓冲反而效果不如双缓冲,理论上三缓冲也不能带来提升,只是防撕裂效果,特别是在这种MCU上面,三缓冲反而更加没有体现出啥提升。楼主说的图层含义比较大,本身GUI可以支持N个软件图层的,只要你内存够,这个和lcd控制器没关系。还有一种是硬件图层,有一些LCD控制器带有自己的硬件图层,这种图层也是要映射对应的framebuffer的,唯一和软件图层不一样的是,这些硬件图层一般会支持图层间的一些混合或叠加操作。如果你说的是软件图层,那LPC1788的控制器支不支持这个问题是没意义的,因为不关这个是事情。如果是说的硬件图层,那LPC1788是只支持单个的。

出0入0汤圆

发表于 2014-9-9 19:35:52 | 显示全部楼层
没有多层,也没有透明色,只是可以切换缓冲区,而且没有2D的DMA,所以很弱

出0入0汤圆

发表于 2014-9-9 19:36:48 | 显示全部楼层
nongxiaoming 发表于 2014-9-9 19:27
加上双缓冲就不会有任何闪屏了,楼主。具体你可以看看rt-thread的LPC4088的做法,你觉得有必要还可以三缓冲 ...

撕裂效果在这个片子上倒是可以避免的

出0入0汤圆

发表于 2014-9-9 20:31:11 | 显示全部楼层
liurangzhou 发表于 2014-9-9 19:36
撕裂效果在这个片子上倒是可以避免的

撕裂效果是在一些游戏上才会有,普通屏做显示的基本不会有这些现象。

出0入0汤圆

 楼主| 发表于 2014-9-9 20:50:29 | 显示全部楼层
nongxiaoming 发表于 2014-9-9 19:27
加上双缓冲就不会有任何闪屏了,楼主。具体你可以看看rt-thread的LPC4088的做法,你觉得有必要还可以三缓冲 ...

谢谢小明的详细解释;分清了硬件图层和软件图层的区别,难怪我用官方的一些例程开启特效动作总是跳进硬件中断;请教一下,我的界面是裸编的,没上操作系统,开头提到的双缓冲做法有没有一些相关的例程可以参考??(界面上现在差不多就剩这个技术难点没突破了);

出0入0汤圆

 楼主| 发表于 2014-9-9 20:53:42 | 显示全部楼层
liurangzhou 发表于 2014-9-9 19:35
没有多层,也没有透明色,只是可以切换缓冲区,而且没有2D的DMA,所以很弱 ...

请问如何切换缓冲区(或者做法)?还没有接触过这些点,请楼主指教。

出0入0汤圆

发表于 2014-9-9 23:10:16 | 显示全部楼层
hdmsfhfg 发表于 2014-9-9 20:53
请问如何切换缓冲区(或者做法)?还没有接触过这些点,请楼主指教。

LCD有个专门的DMA,改变基地址就可以

出0入0汤圆

发表于 2014-9-10 01:10:40 | 显示全部楼层
hdmsfhfg 发表于 2014-9-9 20:50
谢谢小明的详细解释;分清了硬件图层和软件图层的区别,难怪我用官方的一些例程开启特效动作总是跳进硬件 ...

裸机也可以做双缓冲的,这个没什么关系。双缓冲只是开两个buffer,当前LCD会使用一个,另外一个用于绘图,每次你绘图操作完成以后,再拷贝这个缓冲区的内容到LCD使用的缓冲区。因为这个是内存对内存的拷贝操作,速度很快的,所以更新的时候不会闪屏,也会出现你一点一点去刷lcd的buffer那种缓慢的效果。像你主菜单有很多的图标,而且你可能需要做些解码,还有一些文字的渲染,然后显示。如果你是单个缓冲区的,你肯定是直接在lcd的缓冲区上面去一边解码一边绘制渲染,这样整个画面绘制lcd就会闪,而且显示出来也是一块一块的去显示,因为你解码和渲染的时间也加在这上面了。而你用双缓冲的话,是你解码渲染完了,然后在快速的切换显示到屏上面,所以完全看不出中间有任何的闪动和缓慢。

出0入0汤圆

发表于 2014-9-10 01:16:35 | 显示全部楼层
liurangzhou 发表于 2014-9-9 19:35
没有多层,也没有透明色,只是可以切换缓冲区,而且没有2D的DMA,所以很弱 ...

不见得很弱的,估计是你没有搞好。你可以看看rt-thread官方的LPC4088评估板的demo,2D的DMA也不见得速度回快,速度的快慢其实在SDRAM的数据吞吐量上面,和LCD控制器关系不大,LCD控制器只管以50-60hz的频率去刷新lcd显示,当然,这个是针对这种没有硬件加速的MCU。

出130入20汤圆

发表于 2014-9-10 06:17:31 来自手机 | 显示全部楼层
小农正解。楼主做个双缓冲就ok了。

出0入0汤圆

 楼主| 发表于 2014-9-10 10:51:36 | 显示全部楼层
nongxiaoming 发表于 2014-9-10 01:10
裸机也可以做双缓冲的,这个没什么关系。双缓冲只是开两个buffer,当前LCD会使用一个,另外一个用于绘图 ...

再次感谢;这个原理是了解了,想问一下有具体的双缓冲开启方法吗?像可以参考的源代码之类的。希望小明能提供一二。邮箱:hdmsfhfg@qq.com

出0入0汤圆

 楼主| 发表于 2014-9-10 13:27:06 | 显示全部楼层
shandian 发表于 2014-9-9 18:03
我用过LPC1788,但没用过现成的GUI。不知道你说的闪屏指的那种。
要注意在切换缓冲地址的时候,需要设置帧 ...

想请教一下双缓冲的具体做法,有相关例程或源代码可以参考么

出0入0汤圆

发表于 2014-9-10 13:39:46 | 显示全部楼层
0.1.0.20.010

出0入0汤圆

发表于 2014-9-10 13:59:18 | 显示全部楼层
hdmsfhfg 发表于 2014-9-10 13:27
想请教一下双缓冲的具体做法,有相关例程或源代码可以参考么

  1. /*********************************************************************//**
  2. * @brief                  LCD_Buffer_Switch
  3. * @param                None
  4. * @return                 None
  5. ***********************************************************************/
  6. void LCD_Buffer_Switch(void)
  7. {
  8.         LPC_LCD->INTMSK |= 0x00000004;
  9. }

  10. /*********************************************************************//**
  11. * @brief                 LCD interrupt handler
  12. * @param                None
  13. * @return                 None
  14. ***********************************************************************/
  15. void LCD_IRQHandler(void)
  16. {
  17.     if (LPC_LCD->INTSTAT & 0x00000004)
  18.     {
  19.         LPC_LCD->INTCLR = 0x00000004;                                          // 清除中断标志
  20.         LPC_LCD->INTMSK &= ~0x00000004;                                        // 关闭基址更新中断
  21.         if (lcd_buf_no)                                                        // 更具目前使用的缓冲区,进行切换
  22.         {
  23.             lcd_buf_no = FALSE;
  24.             back_buf_base   = LCD_VRAM_BASE_ADDR1;                        // 后备缓冲区地址更新
  25.             current_buf_base= LCD_VRAM_BASE_ADDR0;                        // 当前缓冲区地址更新
  26.             LPC_LCD->UPBASE = LCD_VRAM_BASE_ADDR0 & ~7UL ;        // 切换
  27.             LPC_LCD->LPBASE = LCD_VRAM_BASE_ADDR0 & ~7UL ;
  28.         }
  29.         else
  30.         {
  31.             lcd_buf_no = TRUE;
  32.             back_buf_base   = LCD_VRAM_BASE_ADDR0;                        // 后备缓冲区地址更新
  33.             current_buf_base= LCD_VRAM_BASE_ADDR1;                        // 当前缓冲区地址更新
  34.             LPC_LCD->UPBASE = LCD_VRAM_BASE_ADDR1 & ~7UL ;        // 切换
  35.             LPC_LCD->LPBASE = LCD_VRAM_BASE_ADDR1 & ~7UL ;
  36.         }
  37.     }
  38. }
复制代码


在后备缓冲器写完数据后,调用LCD_Buffer_Switch()函数,该函数使能帧起始中断。在下一次帧起始的时候会产生中断,中断里切换缓存。

出0入0汤圆

 楼主| 发表于 2014-9-10 14:35:36 | 显示全部楼层
shandian 发表于 2014-9-10 13:59
在后备缓冲器写完数据后,调用LCD_Buffer_Switch()函数,该函数使能帧起始中断。在下一次帧起始的时候 ...

谢谢,楼主说的后备缓冲器指的是??如何得知后备缓冲器是否写完数据??

出0入0汤圆

发表于 2014-9-10 15:16:24 | 显示全部楼层
hdmsfhfg 发表于 2014-9-10 14:35
谢谢,楼主说的后备缓冲器指的是??如何得知后备缓冲器是否写完数据?? ...

有两个缓冲区,注释里面当前缓冲区是指目前LCD正在显示的那个缓冲区,后备缓冲区指另一个缓冲区。
当要切换画面时,把新的画面的数据写到后备缓冲区去,然后进行切换,这样就不会造成写数据的时候对当前显示造成影响了。
写缓冲区是你通过函数实现的,不是自动完成的。写缓冲区函数有可能是显示位图的子函数,也有可能是别的绘图函数,具体要看你的程序。

出0入0汤圆

 楼主| 发表于 2014-9-10 15:48:53 | 显示全部楼层
shandian 发表于 2014-9-10 15:16
有两个缓冲区,注释里面当前缓冲区是指目前LCD正在显示的那个缓冲区,后备缓冲区指另一个缓冲区。
当要切 ...

楼主的意思我懂了,常规的是将数据直接赋值到LCD显示的地址上;而这种做法是在后台将数据考到新的地址上,之后在中断中将新的地址赋值到LCD需要显示的地址上。   我想问的是有没有结合emwin手册中介绍的多缓存的方法,直接可以用emwin中的函数来实现这些功能,而我们做的就是将能实现这个功能的代码填写到emwin的这些函数中去。

出0入0汤圆

发表于 2014-9-10 16:53:29 | 显示全部楼层
hdmsfhfg 发表于 2014-9-10 15:48
楼主的意思我懂了,常规的是将数据直接赋值到LCD显示的地址上;而这种做法是在后台将数据考到新的地址上 ...

NXP官网上有手册,专门介绍LPC1788在使用emWin的时候怎么打开双缓冲的,我记得还是中文的资料。

出0入0汤圆

发表于 2014-9-10 18:40:24 来自手机 | 显示全部楼层
我也想实现多层,但没有搞定,好像是要该驱动的地方,但没有改成功。

出0入0汤圆

 楼主| 发表于 2014-9-11 08:46:24 | 显示全部楼层
shandian 发表于 2014-9-10 16:53
NXP官网上有手册,专门介绍LPC1788在使用emWin的时候怎么打开双缓冲的,我记得还是中文的资料。 ...

谢谢,回头找一下

出5入10汤圆

发表于 2014-9-11 08:58:57 | 显示全部楼层
涨姿势了!

出0入0汤圆

发表于 2014-9-11 19:21:08 | 显示全部楼层
nongxiaoming 发表于 2014-9-10 01:16
不见得很弱的,估计是你没有搞好。你可以看看rt-thread官方的LPC4088评估板的demo,2D的DMA也不见得速度 ...

国为没有物理多层和透明色,说它弱还是不为过的,很多事情都不太好处理

出0入0汤圆

发表于 2014-9-11 20:56:48 | 显示全部楼层
liurangzhou 发表于 2014-9-11 19:21
国为没有物理多层和透明色,说它弱还是不为过的,很多事情都不太好处理 ...

不见得的,你真正做过对比就知道了。我们在LPC4088和STM32F429上面做过对比的,在透明混合上面F429用的LCD控制器支持的硬件混合,效果其实表现也就和LPC4088的软件混合相当,甚至速度上还不如LPC4088混合得快。还是SDRAM速度问题,不管是的硬件混合还是软件混合,其实都离不开sdram的数据读写,所以这个的快慢其实是最影响的。

出0入0汤圆

发表于 2014-9-11 21:11:43 | 显示全部楼层
LPC1788就是能刷个RGB信号,就是刷个图片还行,复杂的图形图像处理还不得把CPU累死,没有任何硬件加速,没有2D绘图,没有BITBLT,没有颜色扩充等,做复杂的图形图像对CPU的占用太大,用过S3C2416比比就知道了,并且S3C2416比LPC1788还便宜

出0入0汤圆

发表于 2014-9-12 09:49:14 | 显示全部楼层
liurangzhou 发表于 2014-9-11 19:21
国为没有物理多层和透明色,说它弱还是不为过的,很多事情都不太好处理 ...

多层和透明都可以软件做

出0入0汤圆

发表于 2014-9-12 11:10:33 | 显示全部楼层
硬件不支持,emwin是软件层面做了多层,

出0入0汤圆

发表于 2014-9-12 12:48:10 | 显示全部楼层
czg1411 发表于 2014-9-12 09:49
多层和透明都可以软件做

我自己就是这么用的,只是太累,文字上用用还可以,图片就别想了

出0入0汤圆

发表于 2014-9-12 22:34:14 | 显示全部楼层
nongxiaoming 发表于 2014-9-9 19:27
加上双缓冲就不会有任何闪屏了,楼主。具体你可以看看rt-thread的LPC4088的做法,你觉得有必要还可以三缓冲 ...

三缓冲效果还不如双缓冲?那只说明你三缓冲程序没写对而已。。。。你是在vblank的时候切换buffer的么?
双缓冲一样可以没撕裂 只是因为双缓冲保持帧同步损失性能而已

出0入0汤圆

发表于 2014-9-12 22:36:37 | 显示全部楼层
nongxiaoming 发表于 2014-9-11 20:56
不见得的,你真正做过对比就知道了。我们在LPC4088和STM32F429上面做过对比的,在透明混合上面F429用的LC ...

429混合根本不耗费cpu 你可以硬件混一份同时cpu混另一份。。。。


效果么,算法一样,效果不同才奇怪。。。。

出0入0汤圆

发表于 2014-9-12 23:15:25 | 显示全部楼层
jisaowang2 发表于 2014-9-12 22:36
429混合根本不耗费cpu 你可以硬件混一份同时cpu混另一份。。。。

其实你忽略了429协处理器混合也占用sdram带宽这个现实,你是cpu可以混合另一份,但那样导致的效果将是两个都变慢。就跟你cpu同时交叉去混合两份差不多。sdram的速度是瓶颈。cpu和sdram连接的总线就是那么一条,你两个同时都要经过这个,你说你两个同时进行速度会是两倍吗?显然不是这样的。

出0入0汤圆

发表于 2014-9-12 23:16:02 | 显示全部楼层
jisaowang2 发表于 2014-9-12 22:34
三缓冲效果还不如双缓冲?那只说明你三缓冲程序没写对而已。。。。你是在vblank的时候切换buffer的么?
...

看好三缓冲的理论再说话。

出0入0汤圆

发表于 2014-9-12 23:18:31 来自手机 | 显示全部楼层
mark        

出0入0汤圆

发表于 2014-9-13 00:02:33 | 显示全部楼层
nongxiaoming 发表于 2014-9-11 20:56
不见得的,你真正做过对比就知道了。我们在LPC4088和STM32F429上面做过对比的,在透明混合上面F429用的LC ...

硬件处理和软件处理主要还在对CPU的占用上,比如程序中都开了5us的定时中断,中断执行时间是4us,然后你再比比两者的处理时间。如果硬件处理用处不大,那像S3C2416那么快的速度也不用再加上硬件图形加速功能了

出0入0汤圆

发表于 2014-9-13 07:04:37 | 显示全部楼层
nongxiaoming 发表于 2014-9-12 23:15
其实你忽略了429协处理器混合也占用sdram带宽这个现实,你是cpu可以混合另一份,但那样导致的效果将是两 ...

那还是你程序问题 dma把小片混合数据搬到内部sram cpu和dma2d分别在不同内存工作 合理安排轻松两倍速度

让所有的线路负荷平均化,消除瓶颈才是努力方向

出0入0汤圆

发表于 2014-9-13 07:07:07 | 显示全部楼层
nongxiaoming 发表于 2014-9-12 23:16
看好三缓冲的理论再说话。

呵呵 你不是在vblank切缓存?那三缓存确实没有用。你根本没理解三缓存原理是啥。。。。。不然怎么可能三缓存比不上双缓存?原理上就不可能

出0入0汤圆

发表于 2014-9-16 00:20:10 | 显示全部楼层
jisaowang2 发表于 2014-9-13 07:04
那还是你程序问题 dma把小片混合数据搬到内部sram cpu和dma2d分别在不同内存工作 合理安排轻松两倍速度

...

你是那种认为你家双核电脑20M宽带在线看电影会比你邻居家的单核20M宽带快两倍的人,我不想多说了,你说你家装的两个硬盘或者两根内存都行,网络带宽一下可以x2了。

出0入0汤圆

发表于 2014-9-16 00:27:20 | 显示全部楼层
jisaowang2 发表于 2014-9-13 07:07
呵呵 你不是在vblank切缓存?那三缓存确实没有用。你根本没理解三缓存原理是啥。。。。。不然怎么可能三 ...

自己拿着板子测试一下不开帧同步双缓冲,开帧同步双缓冲,开帧同步三缓冲这三种情况,看一下哪一种表现最佳,结合你的实际测试,选你觉得最好的那个。说啥都没意思。而且实际应用是这个不是放视频,不是打游戏,很多时候并不是单方面的刷屏,还要考虑很多时候还有读回缓冲区数据,所以只是单独的测试区去刷屏完全没意义。用一个真是的使用案例测试就明白了。

出0入0汤圆

发表于 2014-9-16 13:19:14 | 显示全部楼层
nongxiaoming 发表于 2014-9-16 00:20
你是那种认为你家双核电脑20M宽带在线看电影会比你邻居家的单核20M宽带快两倍的人,我不想多说了,你说你 ...

引用Roy的话“You don't know anything about computers, admit it!”
对你应该说 You don't know anything about “bus matrix”, admit it!

出0入0汤圆

发表于 2014-9-16 14:00:52 | 显示全部楼层
caixiuwen 发表于 2014-9-16 13:19
引用Roy的话“You don't know anything about computers, admit it!”
对你应该说 You don't know anythi ...

真不想跟你们扯了,没啥意思,你们最懂了。还“bus matrix”,好高级啊,我没听说过呢?bus matrix是解决不同外设访问的,这里说的是都操作的SDRAM,这是一个总线,也就是多个BUS Master 对一个Slave,这时候就只能是仲裁,哪个优先级高哪个访问,优先级低的等待。LCD刷新对这个肯定是高优先级的,不然读写SDRAM时会影响LCD刷新,所以连LCD对SDRAM访问的矩阵优先级都没法动。不懂就不要装懂了,扯些没关系的东西真心没啥意义。

出0入0汤圆

发表于 2014-9-16 16:22:37 | 显示全部楼层
nongxiaoming 发表于 2014-9-16 00:27
自己拿着板子测试一下不开帧同步双缓冲,开帧同步双缓冲,开帧同步三缓冲这三种情况,看一下哪一种表现最 ...

显然是三缓冲性能最好,这个原理性的,根本不需要比阿
要是实际情况和理论不同,那只说明你程序写的有问题而已。计算机,图形学又不是玄学

出0入0汤圆

发表于 2014-9-16 16:28:51 | 显示全部楼层
nongxiaoming 发表于 2014-9-16 14:00
真不想跟你们扯了,没啥意思,你们最懂了。还“bus matrix”,好高级啊,我没听说过呢?bus matrix是解决 ...

你连续读写sdram和你软件做alpha间歇读写sdram是一回事?

出0入0汤圆

发表于 2014-9-16 16:37:46 | 显示全部楼层
nongxiaoming 发表于 2014-9-16 00:20
你是那种认为你家双核电脑20M宽带在线看电影会比你邻居家的单核20M宽带快两倍的人,我不想多说了,你说你 ...

那我也打个比方,在PS3上照你这么写的程序,被xbox360打脸,照我这样写,反打xbox360的脸。纯粹是思路问题
后台把数据搬一部分到带宽更大的内部sram,处理后再打包搬回sdram,比你零敲碎打地不断在vbuff里处理混合的效率差还是很可观的,特别是你有2个处理器(cpu和DMA2D)的时候

出0入0汤圆

发表于 2014-9-16 16:39:57 | 显示全部楼层
nongxiaoming 发表于 2014-9-16 00:20
你是那种认为你家双核电脑20M宽带在线看电影会比你邻居家的单核20M宽带快两倍的人,我不想多说了,你说你 ...

别人用双核+20M带宽,在某管子在线看4K视频,妥妥的。我用单核的也想在线看4K,可惜很卡,20M带宽都用不满,唉。。。

出0入0汤圆

发表于 2014-9-16 18:01:28 | 显示全部楼层
jisaowang2 发表于 2014-9-16 16:22
显然是三缓冲性能最好,这个原理性的,根本不需要比阿
要是实际情况和理论不同,那只说明你程序写的有问 ...

你说的性能是什么呢?那只能说是表现效果吧,性能不是从这里体现的,要和你的处理器挂钩的。性能足够的时候开三缓冲确实是表现最好,这个大家都知道。唯一你不知道的是,在性能低的设备上开三缓冲效果会怎么样,这里应该准确的说开帧同步。其实开帧同步是双缓冲和不开帧同步的三缓冲都是错误的设计,前面你所说的双缓冲也一样可以没有撕裂效果,你是指的开帧同步吧,但没人会这么奇葩的设计,因为开帧同步那肯定上三缓冲,就跟没有人奇葩的三缓冲不开帧同步一样,那就完全一直会有一个buf用不上。所以我说的双缓冲是指的不开帧同步的双缓冲,说的三缓冲是开帧同步的三缓冲。处理器很慢的上三缓冲效果不如双缓冲,你连这点都没搞明白。你完全没有理解三缓冲的利与弊,没有结合实际的情况,只是盲目的去追求是不可取的。当你的电脑显卡玩某个游戏卡卡的时,关闭帧同步,设置成双缓冲,效果会比开三缓冲好,至少大部分时候是不卡的,偶尔会跳帧而已。

出0入0汤圆

发表于 2014-9-16 18:03:29 | 显示全部楼层
caixiuwen 发表于 2014-9-16 16:39
别人用双核+20M带宽,在某管子在线看4K视频,妥妥的。我用单核的也想在线看4K,可惜很卡,20M带宽都用不 ...

你还更幼稚了,还觉得单核没办法用满20M的带宽?

出0入0汤圆

发表于 2014-9-16 18:30:28 | 显示全部楼层
jisaowang2 发表于 2014-9-16 16:37
那我也打个比方,在PS3上照你这么写的程序,被xbox360打脸,照我这样写,反打xbox360的 ...

你是觉得我软件混合是从buffer1读出一个像素点数据,然后再从buffer2读出一个像素点数据混合,然后得到一个混合后的像素点数据再存到lcd的buffer去?这种也就你想得出来吧。我都说瓶颈主要在这个sdram速度上了,那肯定是尽可能的摆脱这个,而且dram交叉改变地址读单个数据效率会是最渣的,所以混合速度要提高,肯定是要一部分一部分搬到sram去混合好,再搬出来。我前面说的你搬到sram去再dma你也摆脱不了搬的时候那个等待,而且你这样也会耗你cpu,所以2倍速度那是不可能的。不信你可以试试混合一屏,上半部分用DMA2D混合,下半部分用CPU软件混合,看看速度能有2倍吗?这速度肯定是有提高的,只是很少,这么奇葩的软件混合+硬件混合,我想也没人去这么用。你说DMA2D混合,然后cpu释放出来去做其他别的事情,这个完全没有异议。但cpu再来混合,能达到2倍这个……还有我说的cpu混合要比DMA2D混合快是有测试过的,理论上讲也是这样的,算法相同的情况下,DMA2D要混合得跟cpu一样快,那它的处理能力要不低于cpu。

出0入0汤圆

发表于 2014-9-16 19:07:22 来自手机 | 显示全部楼层
本帖最后由 jisaowang2 于 2014-9-16 19:20 编辑
nongxiaoming 发表于 2014-9-16 18:30
你是觉得我软件混合是从buffer1读出一个像素点数据,然后再从buffer2读出一个像素点数据混合,然后得到一 ...


看你挺明白的啊 搬入sram混加上dma2d cpu确实能提高性能你自己都承认了 实际提高多少看系统看程序 因素当然多

你界面的图元安排在sram和sdram的话 最后混合的性能达到1.5倍是很可能的,这个提升和你界面媒体丰富程度很有关系,alpha混合任务轻的界面自然差别不大,但是要实现高动态,复杂图形的界面,在这个级别上的mcu来说,一个专用混合硬件是很有帮助的

这些很多时候带来了最终产品附加值的提高,消费者看看图形就买了.当然你无法理解的

出0入0汤圆

发表于 2014-9-16 19:09:59 来自手机 | 显示全部楼层
nongxiaoming 发表于 2014-9-16 18:01
你说的性能是什么呢?那只能说是表现效果吧,性能不是从这里体现的,要和你的处理器挂钩的。性能足够的时 ...

来膜拜下 这个世界上存在不帧同步的三缓冲?那只存在于你写的三缓冲里 谢谢!全世界其他人写的三缓冲都是帧同步在vblank里切换vbuff的

出0入0汤圆

发表于 2014-9-16 19:17:26 来自手机 | 显示全部楼层
nongxiaoming 发表于 2014-9-16 18:01
你说的性能是什么呢?那只能说是表现效果吧,性能不是从这里体现的,要和你的处理器挂钩的。性能足够的时 ...

就算在最慢的cpu上三缓冲性能也好于双缓冲。这个是基本原理决定的.除了耗费内存以外,性能表现根本不存在双缓冲好于三缓冲的可能性.因为最佳情况下的双缓冲和三缓冲其实是一样的切换过程. 三缓冲本来就是为了解决帧同步和vbuff等待的冲突的.
你电脑游戏帧同步卡 那是因为用的还是双缓冲.开了帧同步的双缓冲自然可能带来帧数腰斩.

出0入0汤圆

发表于 2014-9-16 20:33:29 | 显示全部楼层
jisaowang2 发表于 2014-9-16 19:17
就算在最慢的cpu上三缓冲性能也好于双缓冲。这个是基本原理决定的.除了耗费内存以外,性能表现根本不存在 ...

我说的开三缓冲玩游戏说的自然是开帧同步的,我前面已经声明了不开帧同步的三缓冲和开帧同步的双缓冲都是错误的设计,你没看清楚吗?还是你看花眼了?你不信可以试试嘛,或者找些玩游戏的打听打听也行。最慢的cpu三缓冲也好于双缓冲这句话也只有你说的吧,没实践过就说这话你不觉得可笑吗?

出0入0汤圆

发表于 2014-9-16 21:37:08 | 显示全部楼层
nongxiaoming 发表于 2014-9-16 20:33
我说的开三缓冲玩游戏说的自然是开帧同步的,我前面已经声明了不开帧同步的三缓冲和开帧同步的双缓冲都是 ...

搞了半天你以为游戏里的垂直同步等于三缓冲?

哈哈

出0入0汤圆

发表于 2014-9-16 21:40:10 | 显示全部楼层
另外,根本不存在“不开帧同步的三缓冲”,这就跟带sb的女人一样的存在
你打游戏发现开了垂直同步卡,因为其实人家用的还是双缓冲,也就是你口中的错误设计,带帧同步的双缓冲,所以帧数瞬间可以腰斩,自然卡了 很多引擎因为历史原因,都是双缓冲的阿

出0入0汤圆

发表于 2014-9-16 21:42:48 | 显示全部楼层
jisaowang2 发表于 2014-9-16 19:07
看你挺明白的啊 搬入sram混加上dma2d cpu确实能提高性能你自己都承认了 实际提高多少看系统看程序 因素当 ...

能提高那是肯定的,只是能不能到1.5倍这个难说,需要实际测量才明白,而双倍速度,是理论上都不可能的。

出0入0汤圆

发表于 2014-9-16 21:47:54 | 显示全部楼层
jisaowang2 发表于 2014-9-16 21:37
搞了半天你以为游戏里的垂直同步等于三缓冲?

哈哈

我说的是开帧同步的三缓冲,我说在纠正你说的我说的三缓冲是不开帧同步的才加以说明是开了帧同步的,你是理解上有问题吗?为啥我说啥你都会歪到一边去呢?现在的N卡A卡都是支持图形配置的,鼠标点两下就可以选择开不开帧同步,用双缓冲还是三缓冲,这些显卡厂家比你想的要周到多。

出0入0汤圆

发表于 2014-9-16 21:49:17 | 显示全部楼层
jisaowang2 发表于 2014-9-16 21:40
另外,根本不存在“不开帧同步的三缓冲”,这就跟带sb的女人一样的存在
你打游戏发现开了垂直同步卡 ...

你是觉得现在的显卡还不支持三缓冲吗?你想多了,还历史原因呢~

出0入0汤圆

发表于 2014-9-16 21:51:07 | 显示全部楼层
学习了/...

出0入0汤圆

发表于 2014-10-30 17:14:07 | 显示全部楼层
我的显示还没实现呢?羡慕你们啊

出0入0汤圆

发表于 2015-1-3 23:06:25 | 显示全部楼层

学习了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-29 22:12

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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