电子工程专辑互动社区>电子问答广场>令人蛋疼的DSP问题

问题: 令人蛋疼的DSP问题 关注

1.jpg
现在是全局定义。
错误的原因就是三个定义的位置,datacount是将0到1000个数字写入到SDRAM的一个变量,databuffer数组是用来接受从SDRAM中读取的数据的,剩下的两个,一个是SDRAM的首地址,一个是尾地址。
一、现在是正确的情况,运行之后,error=0,标志位i=1;
2.jpg
二、当把定义位置1、2调换以后
3.jpg

运行之后就不能正确的读取SDRAM中的数据了error=3(说明有三次读取的数据有错误),i=2
?
4.jpg
三、因为这三个的定义我只是在主函数中使用,所以我便将这三个定义转移到了main函数中,作为局部定义使用,同样也会出现和二一样的错误。
求解啊!!!

下面是我的程序:

# include "csl.h"
# include "csl_pll.h"
# include "csl_emif.h"
# include "csl_chip.h"
# include "stdio.h"
# include "csl_gpio.h"


unsigned int datacount=0;
int databuffer[1000]={0};
int *souraddr,*deminaddr;




PLL_Config PLL_SETTING={
??????? 0,
??????? 1,
??????? 6,
??????? 0
};


EMIF_Config EMIF_SETTING={
????????????????? 0x221,
????????????????? 0xFFFF,


????????????????? 0x3FFF,
????????????????? 0xFFFF,
????????????????? 0x00FF,


????????????????? 0x3FFF,
????????????????? 0xFFFF,
????????????????? 0x00FF,


????????????????? 0x1FFF,
????????????????? 0xFFFF,
????????????????? 0x00FF,


????????????????? 0x1FFF,
????????????????? 0xFFFF,
????????????????? 0x00FF,


????????????????? 0x2911,
????????????????? 0x0410,
????????????????? 0x07FF,
????????????????? 0x0131
};


void main ()
{


??????? unsigned int error=0;
??????? int i=0;


??????? CSL_init ();
??????? CHIP_RSET (XBSR,0X0A01);
??????? PLL_config (&PLL_SETTING);
??????? EMIF_config (&EMIF_SETTING);


??????? souraddr=(int*)0x40000;
??????? deminaddr=(int *)0x41000;
??????? while (souraddr ??????? {
??????????????? *souraddr++=datacount;
??????????????? datacount++;
??????? }


??????? souraddr=(int *)0x40000;
??????? datacount=0;
??????? while (souraddr ??????? {
??????????????? databuffer[datacount++]=*souraddr++;
??????????????? if (databuffer[datacount-1]!=(datacount-1))
??????????????? {
??????????????????????? error++;
??????????????? }
??????? }
??????? if (error==0)
??????? {
??????????????? GPIO_RSET(IODIR,0XFF);
??????????????? GPIO_RSET(IODATA,0X80);
??????????????? i=1;
??????? }
??????? else
??????? {
??????????????? GPIO_RSET(IODIR,0XFF);
??????????????? GPIO_RSET(IODATA,0X00);
??????????????? i=2;
??????? }
??????? while (1);
}
?

标签: 求助

  • 0
  • 0

电掌柜 等级:黄金长老积分:4703分经验值:184.0

2014-05-13添加答案

获赏答案
10

悬赏分

  • 1
  • 0

回复主题:令人蛋疼的DSP问题

看了一下,应该是代码的设计功能问题,问题在于以souraddr++的地址是否有效,作为循环条件,说明代码设计肯定有问题。
?????? souraddr=(int*)0x40000;
??????? deminaddr=(int *)0x41000;
??????? while (souraddr ??????? {
??????????????? *souraddr++=datacount;
??????????????? datacount++;

上面的代码会执行远远超过你需要的次数,因为souraddr++到0才会退出循环,因此执行的结果肯定不是你期望的东西,正确的条件应该以datacount < xxx,才能正常工作。
后面的一个循环有类似的问题。
至于error的错误情况,先把代码处理好了,重新测试再检查吧


小麻 等级:青铜少侠积分:1174分经验值:1732.0

2014-05-13添加答案

回答(4)

  • 1
  • 0

回复主题:令人蛋疼的DSP问题

看了一下,应该是代码的设计功能问题,问题在于以souraddr++的地址是否有效,作为循环条件,说明代码设计肯定有问题。
?????? souraddr=(int*)0x40000;
??????? deminaddr=(int *)0x41000;
??????? while (souraddr ??????? {
??????????????? *souraddr++=datacount;
??????????????? datacount++;

上面的代码会执行远远超过你需要的次数,因为souraddr++到0才会退出循环,因此执行的结果肯定不是你期望的东西,正确的条件应该以datacount < xxx,才能正常工作。
后面的一个循环有类似的问题。
至于error的错误情况,先把代码处理好了,重新测试再检查吧


小麻 等级:青铜少侠积分:1174分经验值:1732.0

2014-05-13添加答案

  • 0
  • 0

回复主题:令人蛋疼的DSP问题

不知道楼主贴漏代码还是怎样,不过用 while (souraddr)这种条件来循环,souraddr可是指针,里面保存的是指向的地址(例如0x20000000),而不是指向该地址的值。*souraddr才是取指操作。先把指针搞清楚吧,这样的代码肯定会带来很多意想不到的结果


IT小春子 等级:初入江湖积分:179分经验值:6.0

2014-05-14添加答案

  • 0
  • 0

回复主题:令人蛋疼的DSP问题

多吃点亏呵呵呵就明白了


chenpi 等级:白银少侠积分:1331分经验值:522.0

2014-05-14添加答案

  • 0
  • 0

回复主题:令人蛋疼的DSP问题

呵呵,准确地说,不是DSP问题,而是C的指针应用问题。


zeng-gj 等级:青铜大侠积分:2348分经验值:1090.0

2014-05-14添加答案


快速回复
用户名:?
美国的游客?????? (您将以游客身份发表,请登陆 | 注册 ) ?
标题: * 你还可以输入80
评论: * 你还可以输入10000
验证码: ?*?
维护专业、整洁的论坛环境需要您的参与,请及时举报违规帖子,如果举报属实,我们将给予相应的积分奖励。
谢谢您的热心参与!
返回EE爱问
本论坛仅陈述专家或个人观点,并不代表电子工程专辑网站立场。
推荐达人更多??

已邀请达人

关注了该问题的人

返回论坛页首
有问题请反馈