找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2345|回复: 15
收起左侧

C语言for循环的问题

[复制链接]
ID:261837 发表于 2021-4-1 16:51 | 显示全部楼层 |阅读模式
我使用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] ;
                                                 }
                                              }

回复

使用道具 举报

ID:824490 发表于 2021-4-2 00:30 | 显示全部楼层
很奇怪,但是你的LCD_BUFFER[y][x] 数组与pixelbuf[y][x] 数组的定义是多大?还有,你发送显示的内容是从哪开始的?

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:871393 发表于 2021-4-2 09:03 | 显示全部楼层
没看懂  你想让数组索引取值60-100 还是60-160 ?
回复

使用道具 举报

ID:261837 发表于 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]。
回复

使用道具 举报

ID:261837 发表于 2021-4-2 09:06 | 显示全部楼层
77599585 发表于 2021-4-2 09:03
没看懂  你想让数组索引取值60-100 还是60-160 ?

我想让它从60开始计数
回复

使用道具 举报

ID:824490 发表于 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反映向是不是同步的?有可能是程序跑飞,或溢出数组范围了

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:261837 发表于 2021-4-2 09:34 | 显示全部楼层
名字不是重点 发表于 2021-4-2 09:28
这个问题,你可能要跟踪一下,看LCD_BUFFER[y][x] = pixelbuf[y][x] 这里,LCD_BUFFER的指向与pixelbuf反 ...

各位大佬都没辙,只有这个办法了。
回复

使用道具 举报

ID:744327 发表于 2021-4-2 09:36 | 显示全部楼层
LCD_BUFFER[y][x] 数组和pixelbuf[y][x] 都是240*320的,可能是数值超出数组范围。
回复

使用道具 举报

ID:261837 发表于 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了。
回复

使用道具 举报

ID:392485 发表于 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]。最终显示的可能不是你想要的画面。  

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:261837 发表于 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开始计数。
回复

使用道具 举报

ID:261837 发表于 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] ;
                                                 }
                                              }
回复

使用道具 举报

ID:392485 发表于 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循环赋值的数组数量是一样多的。
回复

使用道具 举报

ID:373388 发表于 2021-4-3 10:02 | 显示全部楼层
第二个比第一个赋值多好多
回复

使用道具 举报

ID:261837 发表于 2021-4-4 01:23 | 显示全部楼层
xhaity 发表于 2021-4-3 10:02
第二个比第一个赋值多好多

不太明白,第二个循环应该不会影响到第一个循环?
回复

使用道具 举报

ID:261837 发表于 2021-4-5 05:26 | 显示全部楼层
谢谢大家,找到问题了!
问题不在循环里,是因为pixelbuf[y][x] 由硬件刷新的,可能是程序太快硬件没反应过来(因为把数字改大才正常),解决办法是把pixelbuf[y][x]转给另一个缓冲区然后在另一个缓冲区读。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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