您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> BF518移植ucgui中出现的Memdev使用问题
本帖共有4208个阅读者
发表帖子 发表投票 回复主题
BF518移植ucgui中出现的Memdev使用问题
zjz2707(论坛新手)
zjz2707
头衔:社区公民
帮派:无帮无派
帖数:11
金钱:197
积分:15
注册时间:2012/2/7
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
BF518移植ucgui中出现的Memdev使用问题

最近我在BF518平台上移植ucgui程序,TFT是800*480的7寸屏

移植后发现基本功能都能实现,就是Memdev功能不能顺利实现,如图中的右半区域显示的内容就出现问题,与左半区域显示有差异。

且使用对话框时,部分控件不能正常显示。

GUI_ALLOC_SIZE设置为1M,

以前移植ucgui到ARM平台上一直没出现这问题,

上传的图片
  2012271625641.bmp [ 750.06 KB 800×480 ] (缩略时请点击查看原图)

 



blackfin 的实践者
等级:论坛新手 参考IP地址:*.*.*.*
2012/2/7 16:09:42
尊贵身份标志
夜色飘摇(论坛版主)
夜色飘摇
头衔:社区公民
帮派:无帮无派
帖数:350
金钱:1773
积分:332
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
没做过,不会呀...

我要成为勇敢的海上战士!
等级:论坛版主 参考IP地址:*.*.*.*
2012/2/8 9:18:06
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

感觉像是代码使用的内存溢出引起的,建议你将显示区域的内存开到其他BANK试试。或是检查硬件上地址线是否有短接的地方。

另外也可以在MEMORY窗口中找到右边异常数据的地址,然后单步跟一下GUI产生数据时,是何时在该地址产生数据的。再进一步跟进找原因


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2012/2/8 10:01:49
zjz2707(论坛新手)
zjz2707
头衔:社区公民
帮派:无帮无派
帖数:11
金钱:197
积分:15
注册时间:2012/2/7
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

感谢Andy的回复

我用Sdram_Test程序测试了SDram的所有Bank,测试结果倒是没有问题的,不知道这种测试结果能否说明SDram的硬件连线没有问题。


blackfin 的实践者
等级:论坛新手 参考IP地址:*.*.*.*
2012/2/8 13:02:39
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

如果是SDRAM地址线短接的话,没有办法测试出来的,你可以这样做,找一个图像数据,然后将数据导入到你现在存图像的内存地址处,导入方法可以通过fill或者用fopen直接将bmp24的图像文件打开,然后通过VDSP的imgview工具将图像还原,看图像是否正常,如正常说明内存地址没有短接,多试几个地址,毕竟图像大小有限。


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2012/2/8 13:48:27
zjz2707(论坛新手)
zjz2707
头衔:社区公民
帮派:无帮无派
帖数:11
金钱:197
积分:15
注册时间:2012/2/7
5信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
好的,我这就试,谢谢!

blackfin 的实践者
等级:论坛新手 参考IP地址:*.*.*.*
2012/2/8 14:36:31
zjz2707(论坛新手)
zjz2707
头衔:社区公民
帮派:无帮无派
帖数:11
金钱:197
积分:15
注册时间:2012/2/7
6信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

我做了一个测试程序

section("sdram0_bank1")   unsigned char DisplayBuffer_BGR888[480][800*3];
  
section("sdram0_bank2")  unsigned char Inputdata[480*800*3+54];
void main(void)
{
FILE *fp;
int i=0;
int j=0;
DSPConfig();
fp = fopen("../1.bmp", "rb");
fread(Inputdata, 1, 480*800*3+54, fp);//bmp图像数据有54个字节的头信息,fread函数读出来为BGR顺序
fclose(fp);

for(i=0;i<480;i++)//缓冲数据读取到BGR888[]中
{
  for(j=0;j<800*3;j++)
  {
   DisplayBuffer_BGR888[i][j] = Inputdata[i*2400+j+54];  
  }
}

for(i=0;i<480;i++)//转换为BGR565写入DisplayBuffer
{
  for(j=0;j<800;j++)
  {
   DisplayBuffer[i+23][j] = DisplayBuffer_BGR888[i][j*3] & 0xF8;//B
   DisplayBuffer[i+23][j] |= (DisplayBuffer_BGR888[i][j*3+1] >> 5) & 0x07;//GH
   DisplayBuffer[i+23][j] = (DisplayBuffer[i+23][j] << 8) + ((DisplayBuffer_BGR888[i][j*3+1] << 3)& 0xe0);//GL
   DisplayBuffer[i+23][j] |= (DisplayBuffer_BGR888[i][j*3+2] >> 3) & 0xF8;//R
  }
}


PPI_TMR_DMA_Enable();                  
while(1);
return 0;
}

发现Inputdata[]数组中的数据传输总是正确的,不管放在哪个Bank中,

可是DisplayBuffer_BGR888[]中的数据总是全为0,不管放在哪个Bank中

DisplayBuffer[]是显示缓冲区。


blackfin 的实践者
等级:论坛新手 参考IP地址:*.*.*.*
2012/2/8 20:36:17
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
7信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

你将  DisplayBuffer_BGR888[i][j] = Inputdata[i*2400+j+54];    

改为:DisplayBuffer_BGR888[i][j] = &Inputdata[i*2400+j+54];    

看看,是否还是读不到数据,如果还读不到,就想办法用指针传递数据。


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2012/2/8 21:51:07
zjz2707(论坛新手)
zjz2707
头衔:社区公民
帮派:无帮无派
帖数:11
金钱:197
积分:15
注册时间:2012/2/7
8信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

谢谢,Andy!应该是我Sdram有问题。我正在找Sdram是哪虚焊了!


blackfin 的实践者
等级:论坛新手 参考IP地址:*.*.*.*
2012/2/9 13:53:15
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.159290 Call, 1 Queries, Processed in 0.032227 second(s),