野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9548|回复: 14

ov7725存像素到数组问题

[复制链接]
发表于 2016-5-26 14:07:10 | 显示全部楼层 |阅读模式
for(i = 0; i < 240; i++)
        {
                for(j = 0; j < 320; j++)
                {
                       
                        READ_FIFO_PIXEL(Camera_Data);
                //img[j][i]=Camera_Data;
                ILI9341_Write_Data(Camera_Data);

如上面的程序,        //img[j][i]=Camera_Data;注释掉,显示图像没有任何问题,加了这个二维数组,程序编译正常,但下载进去,屏幕白屏,就和初始化了一样,请问是什么问题

回复

使用道具 举报

发表于 2016-5-26 14:24:00 | 显示全部楼层
ILI9341_Write_Data(Camera_Data);  
//img[j][i]=Camera_Data;

把这两句调换之后试一试,还有j跟i是不是反过来了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-26 14:28:49 | 显示全部楼层
本帖最后由 爱萝莉1 于 2016-5-26 14:30 编辑
fire 发表于 2016-5-26 14:24
ILI9341_Write_Data(Camera_Data);  
//img[j]=Camera_Data;

火哥,我按照您的调换了位置,并且换了i,j的位置还是没办法显示,都是注释掉这句话就正常了。。。
void ImagDisp(void)
{
        uint16_t i, j;
        uint16_t Camera_Data;
        uint16_t img[240][320];
        
        /* éè&#214;&#195;òo&#190;§é¨&#195;è·&#189;&#207;ò&#206;a ×ó&#207;&#194;&#189;&#199;->óòé&#207;&#189;&#199; */
        ILI9341_GramScan( 2 );
        
        for(i = 0; i < 240; i++)
        {
                for(j = 0; j < 320; j++)
                {
                        READ_FIFO_PIXEL(Camera_Data);                        /* ′óFIFO&#182;á3&#246;ò&#187;&#184;&#246;rgb565&#207;&#241;&#203;&#216;μ&#189;Camera_Data±&#228;á&#191; */
                        ILI9341_Write_Data(Camera_Data);
                        //img[j]=Camera_Data;
                }
        }
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-26 14:33:06 | 显示全部楼层
fire 发表于 2016-5-26 14:24
ILI9341_Write_Data(Camera_Data);  
//img[j]=Camera_Data;

复制的程序显示有问题,是这样的
捕获.PNG
回复 支持 反对

使用道具 举报

发表于 2016-5-26 17:53:59 | 显示全部楼层
局部变量分配在堆栈里,STM32F103ZET6的启动文件中设置堆栈大小为1K,局部变量img[240][320]大小为76800Byte,远远超出了堆栈大小,造成了堆栈溢出,使CPU访问了非法区域,造成了硬件fault,进入HardFault_Handler函数,这个函数是个死循环,于是就卡死了
回复 支持 反对

使用道具 举报

发表于 2016-5-26 17:58:27 | 显示全部楼层
刚刚说错了,img[240][320]大小为76800*2byte
全局变量分配在数据段,它的大小为SRAM的大小减去栈的大小减去堆的大小,也就是64K-1K-0.5K=62.5K,仍旧小于你所需的76800*2Byte,所以不可能在SRAM中储存一张320*240的图片,
回复 支持 反对

使用道具 举报

发表于 2016-5-26 18:03:46 | 显示全部楼层
你可以通过IAP技术把图片存在FLASH里,就像PC往硬盘里写数据一样,FLASH在程序运行期间也是可以写的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-26 21:10:48 | 显示全部楼层
本帖最后由 爱萝莉1 于 2016-5-26 21:18 编辑
大林子0 发表于 2016-5-26 18:03
你可以通过IAP技术把图片存在FLASH里,就像PC往硬盘里写数据一样,FLASH在程序运行期间也是可以写的

我试过一个像素一个像素的传输数据,但是刷新速度慢,而且我每次调用FLASH读写的函数,比如上图中显示屏幕旁边的那条,但每次调用之后,都会导致屏幕初始化的显示的样子,没法显示,也就是说程序卡死在循环里了。 所以想问下,我这往flash写数据的格式有没有什么不对的吗
我定义的数组是全局定义的uint8_t img[3840]; 我只取的YUV格式里的y所以只有8位,但flash调用的函数好像总是不正确,又没办法从历程中找到一些原型,实话直接看函数定义又不太能看明白,所以希望您指教下@fire
捕获.PNG
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-28 10:34:19 | 显示全部楼层
fire 发表于 2016-5-26 14:24
ILI9341_Write_Data(Camera_Data);  
//img[j]=Camera_Data;

火哥,能不能指导一下,用咱们的板子的外部FLASH存一个数组该怎么写啊。学生党毕业设计实在会的太少了 卡了好久了
回复 支持 反对

使用道具 举报

发表于 2016-5-28 11:28:27 | 显示全部楼层
大林子0 发表于 2016-5-26 18:03
你可以通过IAP技术把图片存在FLASH里,就像PC往硬盘里写数据一样,FLASH在程序运行期间也是可以写的

我刚刚才注意到他定义的这个数组超出了栈的大小,没想到你回答了
回复 支持 反对

使用道具 举报

发表于 2016-5-28 11:28:49 | 显示全部楼层
爱萝莉1 发表于 2016-5-26 21:10
我试过一个像素一个像素的传输数据,但是刷新速度慢,而且我每次调用FLASH读写的函数,比如上图中显示屏 ...

其实你这样做的目的是啥
回复 支持 反对

使用道具 举报

发表于 2016-5-28 11:30:26 | 显示全部楼层
爱萝莉1 发表于 2016-5-26 21:10
我试过一个像素一个像素的传输数据,但是刷新速度慢,而且我每次调用FLASH读写的函数,比如上图中显示屏 ...

写FLASH之前,一定要先擦除要写入数据的部分的地址,不然是写不了的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-28 11:42:55 | 显示全部楼层
fire 发表于 2016-5-28 11:28
其实你这样做的目的是啥

刚刚那个朋友也回帖说 没办法存在数组,只能存到flash.我是想存在两帧图像进行帧间差分。希望火哥能指教啊,毕业在即,蛋疼无比啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-28 11:46:12 | 显示全部楼层
fire 发表于 2016-5-28 11:30
写FLASH之前,一定要先擦除要写入数据的部分的地址,不然是写不了的

也不知道有没有其他办法可以获得前一帧图像呢,或者可不不可以简化下存储的数据量,火哥指教
回复 支持 反对

使用道具 举报

发表于 2016-5-28 14:36:44 | 显示全部楼层
爱萝莉1 发表于 2016-5-28 11:42
刚刚那个朋友也回帖说 没办法存在数组,只能存到flash.我是想存在两帧图像进行帧间差分。希望火哥能指教 ...

写FLASH之前,一定要先擦除要写入数据的部分的地址,不然是写不了的
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-6-18 13:37 , Processed in 0.034358 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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