您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> [求助]BF532的奇怪问题。
本帖共有5054个阅读者
发表帖子 发表投票 回复主题
[求助]BF532的奇怪问题。
tzg74500(论坛游民)
tzg74500
头衔:社区公民
帮派:无帮无派
帖数:87
金钱:806
积分:110
注册时间:2011/7/31
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
[求助]BF532的奇怪问题。

我的程序里面有个函数

void DRAWFILE_Save(uint8 fname[])       //保存设计文件,fname--是文件名
{
uint32 j,l,m;
uint16 k;
j=0;
k=0;
l=0;
m=0;

FLASH_Sector_File_Erase();         //清除扇区

//保存文件名
DRAWFILE_Filename_Write(fname);
//保存缓冲区的三个指针
FLASH_Write_Byte(DRAWFILE_FRONT_SADDR,drawfile_front);   //低8位
FLASH_Write_Byte(DRAWFILE_FRONT_SADDR+1,drawfile_front>>8); //高8位
FLASH_Write_Byte(DRAWFILE_REAR_SADDR,drawfile_rear);    //低8位
FLASH_Write_Byte(DRAWFILE_REAR_SADDR+1,drawfile_rear>>8);      //高8位
FLASH_Write_Byte(DRAWFILE_TEMP_FRONT_SADDR,drawfile_temp_front);    //低8位
FLASH_Write_Byte(DRAWFILE_TEMP_FRONT_SADDR+1,drawfile_temp_front>>8);      //高8位

//保存文件缓冲部分

m=16;
for(j=0;j<drawfile_rear;j++)
{
  FLASH_Write_Byte((uint32)DRAWFILE_BUF_SADDR+j*m+0,drawfile[j].id);
  
  k=INT16_To_Uint16(drawfile[j].dat[0]);
  FLASH_Write_Byte((uint32)DRAWFILE_BUF_SADDR+j*m+1,k);
  FLASH_Write_Byte((uint32)DRAWFILE_BUF_SADDR+j*m+2,k>>8);
  
  k=INT16_To_Uint16(drawfile[j].dat[1]);
  FLASH_Write_Byte((uint32)DRAWFILE_BUF_SADDR+j*m+3,k);
  FLASH_Write_Byte((uint32)DRAWFILE_BUF_SADDR+j*m+4,k>>8);
  
  k=INT16_To_Uint16(drawfile[j].dat[2]);
  FLASH_Write_Byte((uint32)DRAWFILE_BUF_SADDR+j*m+5,k);
  FLASH_Write_Byte((uint32)DRAWFILE_BUF_SADDR+j*m+6,k>>8);
  
  k=INT16_To_Uint16(drawfile[j].dat[3]);
  FLASH_Write_Byte(DRAWFILE_BUF_SADDR+j*m+7,k);
  FLASH_Write_Byte(DRAWFILE_BUF_SADDR+j*m+8,k>>8);
  
  k=INT16_To_Uint16(drawfile[j].dat[4]);
  FLASH_Write_Byte((uint32)DRAWFILE_BUF_SADDR+j*m+9,k);
  FLASH_Write_Byte((uint32)DRAWFILE_BUF_SADDR+j*m+10,k>>8);
  
  k=INT16_To_Uint16(drawfile[j].dat[5]);
  FLASH_Write_Byte((uint32)DRAWFILE_BUF_SADDR+j*m+11,k);
  FLASH_Write_Byte((uint32)DRAWFILE_BUF_SADDR+j*m+12,k>>8);
  
  k=INT16_To_Uint16(drawfile[j].dat[6]);
  FLASH_Write_Byte((uint32)DRAWFILE_BUF_SADDR+j*m+13,k);
  FLASH_Write_Byte((uint32)DRAWFILE_BUF_SADDR+j*m+14,k>>8);
  
  FLASH_Write_Byte((uint32)DRAWFILE_BUF_SADDR+j*m+15,drawfile[j].slen);
}

//保存文件缓冲部分

for(j=0;j<FILE_NULL_FLG_LEN;j++)
{
  FLASH_Write_Byte((uint32)FILE_NULL_FLG_SADDR+j,((uint8)0x50)+(uint8)j);
}
}

这个函数主要是向SPI FLASH里面保存数据。

这个函数在程序中的任何地方没有被调用。

现在的问题是:

当加上函数中: //保存文件缓冲部分  之间的代码后,编译正常,但仿真运行出现下图错误。。。。


这家伙很懒,什么也没有留下!
等级:论坛游民 参考IP地址:*.*.*.*
2012/3/14 9:19:19
tzg74500(论坛游民)
tzg74500
头衔:社区公民
帮派:无帮无派
帖数:87
金钱:806
积分:110
注册时间:2011/7/31
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线


上传的图片
  20123149215454.jpg [ 36.26 KB 519×348 ] (缩略时请点击查看原图)

 

反汇编框出现不无名错误,程序运行部下去。。。。

去掉 函数中的“//保存文件缓冲部分”之间部分,程序则完全正常。。。。。。。。。没有任何问题。


这家伙很懒,什么也没有留下!
等级:论坛游民 参考IP地址:*.*.*.*
2012/3/14 9:23:46
tzg74500(论坛游民)
tzg74500
头衔:社区公民
帮派:无帮无派
帖数:87
金钱:806
积分:110
注册时间:2011/7/31
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
这个问题出现的挺乖,怪就怪在,这个函数在工程里面根本就没调用,所以我怀疑是不是和仿真器有关???当然,这个我也只是猜测。

这家伙很懒,什么也没有留下!
等级:论坛游民 参考IP地址:*.*.*.*
2012/3/14 9:25:48
尊贵身份标志
夜色飘摇(论坛版主)
夜色飘摇
头衔:社区公民
帮派:无帮无派
帖数:350
金钱:1773
积分:332
注册时间:2011/6/8
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

1. 你可以单步一下,看看程序运行到哪之后,会跳到1楼图中的那个位置.

2. 感觉像是L1内存益出造成的,请问drawfile[drawfile_rear].dat[]这个占的内存有多大,程序中将这个缓存的空间申  请在哪个位置


我要成为勇敢的海上战士!
等级:论坛版主 参考IP地址:*.*.*.*
2012/3/14 10:00:16
tzg74500(论坛游民)
tzg74500
头衔:社区公民
帮派:无帮无派
帖数:87
金钱:806
积分:110
注册时间:2011/7/31
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
能看到L1被占用了多少空间吗??

这家伙很懒,什么也没有留下!
等级:论坛游民 参考IP地址:*.*.*.*
2012/3/14 10:27:00
tzg74500(论坛游民)
tzg74500
头衔:社区公民
帮派:无帮无派
帖数:87
金钱:806
积分:110
注册时间:2011/7/31
5信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

另外,非常容易出现这个提示:

Warning: External memory is disabled for this region of memory.

这个提示有时有,有时没有。


这家伙很懒,什么也没有留下!
等级:论坛游民 参考IP地址:*.*.*.*
2012/3/14 10:28:38
tzg74500(论坛游民)
tzg74500
头衔:社区公民
帮派:无帮无派
帖数:87
金钱:806
积分:110
注册时间:2011/7/31
6信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线


上传的图片
  201231410303345.jpg [ 31.85 KB 459×393 ] (缩略时请点击查看原图)

 

扑捉到了出错的地方了

程序一进入这个函数,运行到红色断点前就出错了。。。。


这家伙很懒,什么也没有留下!
等级:论坛游民 参考IP地址:*.*.*.*
2012/3/14 10:31:55
尊贵身份标志
夜色飘摇(论坛版主)
夜色飘摇
头衔:社区公民
帮派:无帮无派
帖数:350
金钱:1773
积分:332
注册时间:2011/6/8
7信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

BF532的L1的数据空间只有32KB,如果当你的内存申请大于32KB的时候必须使用外部SDRAM, 要不然就回出现你这样的现象.

建议:

         1.对大一点的数组,把换存开在外部的SDRAM中,比如:

          unsigned char *temp;

          temp= malloc(SIZE); //SIZE是要申请缓存的大小

          然后在使用完的时候再把这个缓存释放掉.

       生成ldf文件的时候,需要做些修改.如下图, L3大小设定按照你的实际情况去填写


上传的图片
  20123141194155.jpg [ 51.74 KB 639×440 ] (缩略时请点击查看原图)

 


我要成为勇敢的海上战士!
等级:论坛版主 参考IP地址:*.*.*.*
2012/3/14 11:11:05
tzg74500(论坛游民)
tzg74500
头衔:社区公民
帮派:无帮无派
帖数:87
金钱:806
积分:110
注册时间:2011/7/31
8信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

估计不是L1内存溢出为题,如果是这个,我将drawfile这个数组减小就行,但已经测试过,不可以。。。。。。

drawfile是个结构数组,共有9000个字节,?????现在的现象是加上函数中间的一部分,它就出错误,如果不加就正常。。。


这家伙很懒,什么也没有留下!
等级:论坛游民 参考IP地址:*.*.*.*
2012/3/14 12:24:29
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
9信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

Warning: External memory is disabled for this region of memory

有两种情况会出现该提示:

1.内存溢出,比如内存为32MB,编译器自动分配时,将内存分配到32MB以外的空间。这个通常是由LDF内存大小配置参数错误所导致。

2. 内存异常,导致编译器自动分配的SDRAM空间无法正常访问。

你检查一下你的SDRAM,上面提示的警告,是编译器已经用到了SDRAM的空间,但该空间不可用。你最好对SDRAM做个遍历,检测一下SDRAM是否正常。


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2012/3/14 12:41:44
16
1
1/2
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.159442 Call, 1 Queries, Processed in 0.031250 second(s),