OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 14725|回复: 44

uCGUI速度优化问题

[复制链接]

15

主题

98

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2013-11-11
在线时间
0 小时
发表于 2014-10-18 19:19:03 | 显示全部楼层 |阅读模式
5金钱
[mw_shl_code=c,true]UCOSIII+UCGUI+战舰+原子4.3电容屏[/mw_shl_code] [mw_shl_code=c,true]自己参考网上的方法做了画点,画线,填充矩形,16bpp的优化,但我的刷屏速度只有这样:[/mw_shl_code] [mw_shl_code=c,true]

[/mw_shl_code] [mw_shl_code=c,true]看到别人的刷屏都是900万像素每秒,甚至3000万,牛人帮我看看程序[/mw_shl_code] [mw_shl_code=c,true]画线:[/mw_shl_code] [mw_shl_code=c,true]/********************************************************************* * * LCD_L0_DrawHLine */ void LCD_L0_DrawHLine (int x0, int y, int x1) { u16 f; if (GUI_Context.DrawMode & LCD_DRAWMODE_XOR) { for (; x0 <= x1; x0++) { LCD_L0_XorPixel(x0, y); } } else { f = x1 - x0 + 1; LCD_SetCursor(x0, y);//设置光标 LCDX->LCD_REG=lcddev.wramcmd;//写入GRAM for (; f > 0;f --) { LCDX->LCD_RAM=LCD_COLORINDEX; //LCD_L0_SetPixelIndex(x0, y, LCD_COLORINDEX); } } }[/mw_shl_code]
[mw_shl_code=c,true]/********************************************************************* * * LCD_L0_DrawVLine */ void LCD_L0_DrawVLine (int x, int y0, int y1) { if (GUI_Context.DrawMode & LCD_DRAWMODE_XOR) { for (; y0 <= y1; y0++) { LCD_L0_XorPixel(x, y0); } } else { for (; y0 <= y1; y0++) { LCD_L0_SetPixelIndex(x, y0, LCD_COLORINDEX); } } } [/mw_shl_code]

填充矩形:
[mw_shl_code=c,true]/********************************************************************* * * LCD_L0_FillRect */ void LCD_L0_FillRect(int x0, int y0, int x1, int y1) { u16 i , j; u16 xlen; xlen = x1 - x0 + 1; for(i = y0; i <= y1; i++) { LCD_SetCursor(x0, i) ; LCDX->LCD_REG=lcddev.wramcmd; for(j = 0; j < xlen; j++) LCDX->LCD_RAM = LCD_COLORINDEX; } // for (; y0 <= y1; y0++) { // LCD_L0_DrawHLine(x0, y0, x1); // } }[/mw_shl_code]
16bpp:
(这里优化后刷控件速度快多了)
[mw_shl_code=c,true]/********************************************************************* * * Draw Bitmap 16 BPP */ #if (LCD_BITSPERPIXEL > 8) static void DrawBitLine16BPP(int x, int y, U16 const GUI_UNI_PTR * p, int xsize, const LCD_PIXELINDEX * pTrans) { LCD_PIXELINDEX pixel; if ((GUI_Context.DrawMode & LCD_DRAWMODE_TRANS) == 0) { if (pTrans) { LCD_SetCursor(x, y) ; LCDX->LCD_REG=lcddev.wramcmd; for (; xsize > 0; xsize--, x++, p++) { pixel = *p; LCDX->LCD_RAM = *(pTrans + pixel); // LCD_L0_SetPixelIndex(x, y, *(pTrans + pixel)); } } else { LCD_SetCursor(x, y) ; LCDX->LCD_REG=lcddev.wramcmd; for (;xsize > 0; xsize--, x++, p++) { LCDX->LCD_RAM = *p; // LCD_L0_SetPixelIndex(x, y, *p); } } } else { if (pTrans) { LCD_SetCursor(x, y) ; LCDX->LCD_REG=lcddev.wramcmd; for (; xsize > 0; xsize--, x++, p++) { pixel = *p; if (pixel) { LCDX->LCD_RAM = *(pTrans + pixel); // LCD_L0_SetPixelIndex(x, y, *(pTrans + pixel)); } } } else { LCD_SetCursor(x, y) ; LCDX->LCD_REG=lcddev.wramcmd; for (; xsize > 0; xsize--, x++, p++) { pixel = *p; if (pixel) { LCDX->LCD_RAM = pixel; // LCD_L0_SetPixelIndex(x, y, pixel); } } } } }[/mw_shl_code]
希望优化到看不见刷屏,现在还是能看见从上到下的刷屏

最佳答案

查看完整内容[请看2#楼]

首先你是什么型号的STM32?900万 甚至3000万那是拿RA8875的LCD控制器刷出来的,RA8875可以开挂的,具有硬件2D绘图。如果你使用的是ILI9341等LCD控制器,就别想有这么高的分数了,103基本刷出来的就是250W左右。还有网上有的还甚至是否用的NXP的单片机,带有LCD控制器,那个分数也很高的。STM32F429我见过最高刷到5500W的!内部使用LTDC。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2014-10-18 19:19:04 | 显示全部楼层
首先你是什么型号的STM32?900万 甚至3000万那是拿RA8875的LCD控制器刷出来的,RA8875可以开挂的,具有硬件2D绘图。如果你使用的是ILI9341等LCD控制器,就别想有这么高的分数了,103基本刷出来的就是250W左右。还有网上有的还甚至是否用的NXP的单片机,带有LCD控制器,那个分数也很高的。STM32F429我见过最高刷到5500W的!内部使用LTDC。
开往春天的手扶拖拉机
回复

使用道具 举报

15

主题

98

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2013-11-11
在线时间
0 小时
 楼主| 发表于 2014-10-18 19:19:04 | 显示全部楼层
回复【2楼】zuozhongkai:
---------------------------------
你好,我用的是原子哥的战舰开发板,STM32F103  72M主频
LCD是原子哥的4.3寸电容屏分辨率800*480  nt35510LCD控制器
我刚才优化了画垂直线,现在能跑223W,是不是已经到头了?
如果使用MemDev先放到内存上,然后copytoLCD会好很多?
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2014-10-18 22:17:44 | 显示全部楼层
不会的,high Speed是用来测试打点速度的,你用MemDev最终还是要在屏幕上打点的。而且使用MemDev只是为了防止屏幕闪烁,对于打点没有任何提升。
开往春天的手扶拖拉机
回复

使用道具 举报

15

主题

98

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2013-11-11
在线时间
0 小时
 楼主| 发表于 2014-10-19 09:57:08 | 显示全部楼层
回复【4楼】zuozhongkai:
---------------------------------
谢谢你的讲解,那么在不换硬件的前提下,我是不是已经没有优化的空间了?
如果换硬件的话换什么呢?只换成stm32f407效果好吗?还是要换LCD驱动器
回复

使用道具 举报

2

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2014-8-15
在线时间
4 小时
发表于 2014-10-19 10:39:18 | 显示全部楼层

407原子4.3寸屏的可以有1千2百
回复

使用道具 举报

15

主题

98

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2013-11-11
在线时间
0 小时
 楼主| 发表于 2014-10-19 10:41:34 | 显示全部楼层
回复【6楼】hxg353:
---------------------------------
换407就能这么快啊!!!看来又要打板子了。。。。
回复

使用道具 举报

15

主题

98

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2013-11-11
在线时间
0 小时
 楼主| 发表于 2014-10-19 10:43:02 | 显示全部楼层
回复【6楼】hxg353:
---------------------------------
只是407就可以吗?有没有特殊的速度优化之类的?我2楼贴过程序,帮我看看我的优化有哪里不合适
回复

使用道具 举报

2

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2014-8-15
在线时间
4 小时
发表于 2014-10-19 10:46:19 | 显示全部楼层
103 我弄过 只有两百多。我做YT时刷得很慢,就改用407了。
回复

使用道具 举报

15

主题

98

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2013-11-11
在线时间
0 小时
 楼主| 发表于 2014-10-19 10:51:15 | 显示全部楼层
回复【9楼】hxg353:
---------------------------------
看来200W是极限了,前两天刚画好了407的板子,液晶屏和原子哥的不兼容,后悔死了,还得做一次
回复

使用道具 举报

2

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2014-8-15
在线时间
4 小时
发表于 2014-10-19 10:52:29 | 显示全部楼层
回复【8楼】蘑菇:
---------------------------------
回复【8楼】蘑菇:
------------------------------
画点 画线 填充矩形 都是用原子的的程序 ? ?我是菜鸟16pp的优化不是自己写的 ?是由原子的填充矩形该来的
回复

使用道具 举报

15

主题

98

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2013-11-11
在线时间
0 小时
 楼主| 发表于 2014-10-19 10:58:20 | 显示全部楼层
回复【11楼】hxg353:
---------------------------------
原来论坛里有个叫Eric2013的GUI大牛,说“要充分利用LCD的坐标点自增”确实好用,你试试,还有“减少函数调用,可以减少入栈出栈”,说不定可以跑出更NB的速度
回复

使用道具 举报

2

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2014-8-15
在线时间
4 小时
发表于 2014-10-19 11:01:08 | 显示全部楼层
不知道原子哥的f4板子的能有多快。好期待!!
回复

使用道具 举报

2

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2014-8-15
在线时间
4 小时
发表于 2014-10-19 11:02:14 | 显示全部楼层
回复【12楼】蘑菇:
---------------------------------

好 有空试试 ??
回复

使用道具 举报

15

主题

98

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2013-11-11
在线时间
0 小时
 楼主| 发表于 2014-10-19 11:02:17 | 显示全部楼层
回复【13楼】hxg353:
---------------------------------
11月几号出来着?一出来我就买一块。很早以前问过原子哥,后来买了一块红龙,不好用
回复

使用道具 举报

2

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2014-8-15
在线时间
4 小时
发表于 2014-10-19 11:09:03 | 显示全部楼层
回复【15楼】蘑菇:
---------------------------------?
不知道价格怎样,如果太贵,作为学生就买不起了
回复

使用道具 举报

15

主题

98

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2013-11-11
在线时间
0 小时
 楼主| 发表于 2014-10-19 11:09:46 | 显示全部楼层
回复【16楼】hxg353:
---------------------------------
同样学生,砸锅卖铁
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2014-10-19 11:22:11 | 显示全部楼层
回复【16楼】hxg353:
---------------------------------
你刷1千两百多万的时候有没有带操作系统,如果没有操作系统的话定时器定的多长时间,还有就是读点有没有问题。
开往春天的手扶拖拉机
回复

使用道具 举报

2

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2014-8-15
在线时间
4 小时
发表于 2014-10-19 11:34:54 | 显示全部楼层
回复【18楼】zuozhongkai:
--------------------------------- 没带 ?读点函数没问题 ? ?第二个问题就不清楚了,是什么意思,我不怎么理解(菜鸟,望理解)
回复

使用道具 举报

15

主题

98

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2013-11-11
在线时间
0 小时
 楼主| 发表于 2014-10-19 11:36:28 | 显示全部楼层
回复【18楼】zuozhongkai:
---------------------------------
带操作系统是不是跑不了这么高?ucosiii
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2014-10-19 11:42:01 | 显示全部楼层
回复【19楼】hxg353:
---------------------------------
因为我曾经第一次刷屏到1千2百多万的时候,读点出问题了。修改好以后最多700多W,如果不带操作系统的话定时器要1ms
开往春天的手扶拖拉机
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2014-10-19 11:42:46 | 显示全部楼层
回复【20楼】蘑菇:
---------------------------------
这个不一定的啊,但是我带了UCOS以后分数就低了
开往春天的手扶拖拉机
回复

使用道具 举报

2

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2014-8-15
在线时间
4 小时
发表于 2014-10-19 11:46:52 | 显示全部楼层
gui的系统定时是1ms的 ?是滴答定时器中断更新的
回复

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2013-12-20
在线时间
0 小时
发表于 2014-10-19 16:18:24 | 显示全部楼层


原子哥的开发板 ucos+ucgui  优化后的速度
回复

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2013-12-20
在线时间
0 小时
发表于 2014-10-19 16:19:03 | 显示全部楼层
回复【24楼】xwx:
---------------------------------
STM32F103ZET6
回复

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2013-12-20
在线时间
0 小时
发表于 2014-10-19 16:19:59 | 显示全部楼层
要是用原子哥的开发板 叫你一个看不见刷屏的方法 :参考原子哥的综合例子  哈哈
回复

使用道具 举报

15

主题

98

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2013-11-11
在线时间
0 小时
 楼主| 发表于 2014-10-19 16:20:00 | 显示全部楼层
回复【25楼】xwx:
---------------------------------
怎么做到的啊?多大的屏?
回复

使用道具 举报

15

主题

98

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2013-11-11
在线时间
0 小时
 楼主| 发表于 2014-10-19 16:20:28 | 显示全部楼层
回复【26楼】xwx:
---------------------------------
DMA吗?
回复

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2013-12-20
在线时间
0 小时
发表于 2014-10-19 16:27:39 | 显示全部楼层
就开发板上带的屏 把读点写点都写到SRAM  再DMA到液晶屏就看不到刷屏了  但是我用DMA时边框是花的···后来没弄
回复

使用道具 举报

15

主题

98

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2013-11-11
在线时间
0 小时
 楼主| 发表于 2014-10-19 16:29:20 | 显示全部楼层
回复【29楼】xwx:
---------------------------------
现在UCOSIII+UCGUI+FATFS不知道为什么sram不够用了,编译不成功,哪有地方给显存啊
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165287
金钱
165287
注册时间
2010-12-1
在线时间
2107 小时
发表于 2014-10-19 23:00:22 | 显示全部楼层
回复【24楼】xwx:
---------------------------------
不可能这么快才对。
STM32F103 FSMC我测试最快的WR速度也就5Mhz左右。
这个,就决定了点填充不可能超过500W。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2014-10-20 09:41:40 | 显示全部楼层
追求高效可以理解。这个也追求跑分,真是佩服!
于20150522停用该账号:http://www.microstar.club
回复

使用道具 举报

17

主题

293

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2012-12-26
在线时间
1 小时
发表于 2014-10-21 09:55:52 | 显示全部楼层
回复【3楼】蘑菇:
---------------------------------
战舰开发板,使用3.5寸 6804 屏,72M主频,FSMC 控制 刷出来最高320W
回复

使用道具 举报

17

主题

293

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2012-12-26
在线时间
1 小时
发表于 2014-10-21 09:59:39 | 显示全部楼层
回复【30楼】蘑菇:
---------------------------------
你可以跟踪一下,把使用SRAMIN的几个占用空间比较大的变量,mymalloc到SRAMEX去,一定程度可以解决SRAM不够用的问题
回复

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2013-12-20
在线时间
0 小时
发表于 2014-10-21 20:26:03 | 显示全部楼层
回复【31楼】正点原子:
---------------------------------
其实我用的是一款山寨你板子的板子···叫 旗舰开发板···去年有 现在好像没了··
回复

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2013-12-20
在线时间
0 小时
发表于 2014-10-21 20:27:56 | 显示全部楼层
回复【31楼】正点原子:
---------------------------------
我这个程序读点是有问题的 用的是你程序里的快速读点,鼠标过去有影子
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165287
金钱
165287
注册时间
2010-12-1
在线时间
2107 小时
发表于 2014-10-21 23:14:56 | 显示全部楼层
回复【36楼】xwx:
---------------------------------
那就得找找问题在哪里。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

15

主题

114

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
242
金钱
242
注册时间
2014-7-1
在线时间
28 小时
发表于 2014-12-10 09:59:21 | 显示全部楼层
回复【26楼】xwx:
---------------------------------
哥,具体哪个例程,能不能上传呢?
回复

使用道具 举报

15

主题

114

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
242
金钱
242
注册时间
2014-7-1
在线时间
28 小时
发表于 2014-12-10 10:10:35 | 显示全部楼层
用了之后速度确实快了很多,感谢楼主!
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2015-12-15
在线时间
1 小时
发表于 2015-12-24 16:35:08 | 显示全部楼层
回复【2楼】zuozhongkai:
---------------------------------
版主,我用429的LTDC接口刷屏,外部SDRAM,移植的EMWIN,速度达到3200万,这个速度处于正常值还是依然可以优化呢
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2015-12-24 17:21:33 | 显示全部楼层
回复【40楼】monkeycjk11:
---------------------------------
429跑到这个值很正常的。
开往春天的手扶拖拉机
回复

使用道具 举报

11

主题

68

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
322
金钱
322
注册时间
2015-4-5
在线时间
35 小时
发表于 2015-12-29 21:08:21 | 显示全部楼层
zuozhongkai 发表于 2014-10-18 19:19
首先你是什么型号的STM32?900万&nbsp;甚至3000万那是拿RA8875的LCD控制器刷出来的,RA8875可以开挂的,具 ...

你好 我现在用的8875 你说的2d绘图是画图形吗功能吗?怎么才能提速呢?现在我移植了画点读点 画矩形和16bpp 还得怎么弄呢?刷屏有点慢。
回复

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2016-3-18
在线时间
9 小时
发表于 2016-3-18 14:58:39 | 显示全部楼层
我测试了429II+SDRAM+FMC+5寸液晶屏,速度差不多有2000w~
回复

使用道具 举报

20

主题

143

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2015-8-28
在线时间
108 小时
发表于 2017-1-10 10:51:20 | 显示全部楼层
先按楼主方法试试看,谢谢分享经验
回复

使用道具 举报

2

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
82
金钱
82
注册时间
2017-5-8
在线时间
22 小时
发表于 2017-5-8 17:32:24 | 显示全部楼层
打点的速度只和void LCD_L0_FillRect(int x0, int y0, int x1, int y1) 这个函数有关系,只要这个函数优化一下就行了。一般1M频率的速度对应100W的打点。量WR脚可以量出来频率,103用硬件方式的话大概可以有4-5M,模拟的话1M多点,这个原子哥有帖子回复过
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-2 00:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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