This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

2812仿真运行和烧写运行有什么不同?



我在做一个项目,使用到了XINTF进行外扩,在连着仿真器运行时都没问题,但是一旦烧写到片子内后,就出现问题,实现不了基本的功能,这是怎么回事?2812的仿真运行和烧写后运行存在哪些区别啊?谢谢

  • yutian,

    芯片有没有加密?

    有没有从Flash中copy一些代码在RAM中运行,Memcpy函数有没有及时调用,即在访问这些函数前就已经复制完成了。

    你可以在main函数中使用GPIO翻转的测试代码,然后用仿真器观察GPIO口,比如把GPIO0翻转放在main的第一条语句,如果有翻转,表示能够找到main入口,再使用相同方法,定位一下程序是不是在哪里跑飞。

    Eric

  • 芯片没有加密,有几个子程序搬移到RAM中运行。我是在main函数开始,先 InitSysCtrl();然后就是memcpy()函数和  InitFlash();下面才开始别的函数,这样做有问题吗?

  • yutian,

    flash 的CMD文件是不是TI例程中的,工程中有code start文件没有?把你的memcpy函数贴上来。

    另外可以根据我建议的GPIO硬件测试法,看程序在哪里跑飞。

    Eric

  • CMD文件好像不是TI例程中的,但是之前别的项目也用过,没有问题。工程中添加了DSP281x_CodeStartBranch.asm文件,使用的memcpy函数是系统自带的那个默认的函数,之前的项目也是这样用的,也是可以的。GPIO硬件测试法还没做呢,正准备做,谢谢

  • 我刚才试了,连着仿真器在FLAH中运行,程序也没问题。GPIO测试也做了,有点问题,在程序中将对应的GPIO口拉低,但是烧写进去后,观察到的却不是一个完全的低电平,中间有一小段的高电平,可能是这个影响的吗?

  • yutian,

    memcpy函数是否跟下面是一一致的?

     memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (Uint32)&RamfuncsLoadSize);

    Eric

  • yutian,

    不要直接拉低电平吧,你直接在main的第一条语句那里 翻转GPIO100次,看能够进入main。如果你Flash仿真没有问题,那你直接reset CPU,不要restart,然后选择run to main,能够找到main入口。

    再次确认一下memcpy。

    Eric

  • 不好意思,前几天出去玩了,这是我用的memcpy函数,和你那个不一样,但是应该远离一样吧?

    memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, &RamfuncsLoadEnd - &RamfuncsLoadStart);