标题: C语言for循环的问题 [打印本页]

作者: 706718242    时间: 2021-4-1 16:51
标题: C语言for循环的问题
我使用for读取缓存区的rgb数据到lcd的缓存中无法显示,这个循环是为了提取特定区域的rgb像素。
第一种方法就是初始化为指定的地址避免过多的加运算,但是lcd显示有问题(没反应或无显示,花屏)。
         for(y=60; y<100 ; y++ ){
             for(x=100;  x <200 ; x++){
                 LCD_BUFFER[y][x] = pixelbuf[y][x] ;
                                                 }
                                              }

只有初始化为0才是正常的,但是下面需要加运算降低了效率。
         for(y=0;  y <100 ; y++ ){
             for(x=0;  x <200 ; x++){
                 LCD_BUFFER[y+60][x+100] = pixelbuf[y+60][x+100] ;
                                                 }
                                              }


作者: 名字不是重点    时间: 2021-4-2 00:30
很奇怪,但是你的LCD_BUFFER[y][x] 数组与pixelbuf[y][x] 数组的定义是多大?还有,你发送显示的内容是从哪开始的?
作者: 77599585    时间: 2021-4-2 09:03
没看懂  你想让数组索引取值60-100 还是60-160 ?
作者: 706718242    时间: 2021-4-2 09:06
名字不是重点 发表于 2021-4-2 00:30
很奇怪,但是你的LCD_BUFFER[y][x] 数组与pixelbuf[y][x] 数组的定义是多大?还有,你发送显示的内容是从哪 ...

LCD_BUFFER[y][x] 数组与pixelbuf[y][x] 都是240*320的,内容在pixelbuf[y][x]。
作者: 706718242    时间: 2021-4-2 09:06
77599585 发表于 2021-4-2 09:03
没看懂  你想让数组索引取值60-100 还是60-160 ?

我想让它从60开始计数
作者: 名字不是重点    时间: 2021-4-2 09:28
706718242 发表于 2021-4-2 09:06
LCD_BUFFER[y][x] 数组与pixelbuf[y][x] 都是240*320的,内容在pixelbuf[y][x]。

这个问题,你可能要跟踪一下,看LCD_BUFFER[y][x] = pixelbuf[y][x] 这里,LCD_BUFFER的指向与pixelbuf反映向是不是同步的?有可能是程序跑飞,或溢出数组范围了
作者: 706718242    时间: 2021-4-2 09:34
名字不是重点 发表于 2021-4-2 09:28
这个问题,你可能要跟踪一下,看LCD_BUFFER[y][x] = pixelbuf[y][x] 这里,LCD_BUFFER的指向与pixelbuf反 ...

各位大佬都没辙,只有这个办法了。
作者: 烈火    时间: 2021-4-2 09:36
LCD_BUFFER[y][x] 数组和pixelbuf[y][x] 都是240*320的,可能是数值超出数组范围。
作者: 706718242    时间: 2021-4-2 09:38
烈火 发表于 2021-4-2 09:36
LCD_BUFFER[y][x] 数组和pixelbuf[y][x] 都是240*320的,可能是数值超出数组范围。

for(y=60; y<100 ; y++ ){
             for(x=100;  x <200 ; x++){
                 LCD_BUFFER[y][x] = pixelbuf[y][x] ;
                                                 }
                                              }


从程序上看不出来,只能debug了。
作者: sync763    时间: 2021-4-2 12:58
你这两个for循环最终LCD_BUFFER[y][x] 赋值是不一样的,第一个是LCD_BUFFER[60][100]到LCD_BUFFER[100][200],  第二个是LCD_BUFFER[60][100]到LCD_BUFFER[160][300]。最终显示的可能不是你想要的画面。  
作者: 706718242    时间: 2021-4-2 16:35
sync763 发表于 2021-4-2 12:58
你这两个for循环最终LCD_BUFFER[y][x] 赋值是不一样的,第一个是LCD_BUFFER[60][100]到LCD_BUFFER[100][200 ...

我的缓冲大小是240*320的,但是没显示。我本意是让它从60开始计数。
作者: 706718242    时间: 2021-4-2 16:47
当我把100和200改为200,300时正常.太奇怪了!

for(y=60; y<100; y++ ){
             for(x=100;  x <200 ; x++){
                 LCD_BUFFER[y][x] = pixelbuf[y][x] ;
                                                 }
                                              }

作者: sync763    时间: 2021-4-3 09:22
706718242 发表于 2021-4-2 16:47
当我把100和200改为200,300时正常.太奇怪了!

for(y=60; y

for(y=60; y<160; y++ ){
             for(x=100;  x <300 ; x++){
                 LCD_BUFFER[y][x] = pixelbuf[y][x] ;
                                                 }
                                              }

这样就应该可以,这样就和第二个for循环赋值的数组数量是一样多的。
作者: xhaity    时间: 2021-4-3 10:02
第二个比第一个赋值多好多
作者: 706718242    时间: 2021-4-4 01:23
xhaity 发表于 2021-4-3 10:02
第二个比第一个赋值多好多

不太明白,第二个循环应该不会影响到第一个循环?
作者: 706718242    时间: 2021-4-5 05:26
谢谢大家,找到问题了!
问题不在循环里,是因为pixelbuf[y][x] 由硬件刷新的,可能是程序太快硬件没反应过来(因为把数字改大才正常),解决办法是把pixelbuf[y][x]转给另一个缓冲区然后在另一个缓冲区读。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1