程序之前再RAM中调试的,后来要搬到FLAHS中来。
使用了F28035_CLA_C.CMD,发现在InitAdc()函数总是的跳至ILLEGAL_ISR。
因为在InitAdc中使用了 DELAY_US(ADC_usDELAY);
查资料说要从FLASH中拷贝到RAM中来才能运行。
于是做了以下修改。
首先在DSP2803x_Examples.h文件中开始部分加入以下一条语句
#pragma CODE_SECTION(DSP28x_usDelay, "ramfuncs");
然后再main里面再加以下语句
memcpy((uint16_t *)&RamfuncsLoadStart,(uint16_t *)&RamfuncsRunStart, (unsigned long)&RamfuncsLoadSize);
InitFlash();
可是还是不行。不知道是哪里错了。
烦请帮忙解决一下。最好就是一条语句一条语句加在什么地方教一下。
因为是第一次使用这个芯片。
Young Hu:
您好!
请参考ADC相关的例程。ADC_SOC等等的。
搬迁是没有问题的,但是在这些例程中并没有搬迁的操作。。是在函数中声明了这个DSP28x_usDelay()函数
程序之前再RAM中调试的,后来要搬到FLAHS中来。
使用了F28035_CLA_C.CMD,发现在InitAdc()函数总是的跳至ILLEGAL_ISR。
因为在InitAdc中使用了 DELAY_US(ADC_usDELAY);
查资料说要从FLASH中拷贝到RAM中来才能运行。
于是做了以下修改。
首先在DSP2803x_Examples.h文件中开始部分加入以下一条语句
#pragma CODE_SECTION(DSP28x_usDelay, "ramfuncs");
然后再main里面再加以下语句
memcpy((uint16_t *)&RamfuncsLoadStart,(uint16_t *)&RamfuncsRunStart, (unsigned long)&RamfuncsLoadSize);
InitFlash();
可是还是不行。不知道是哪里错了。
烦请帮忙解决一下。最好就是一条语句一条语句加在什么地方教一下。
因为是第一次使用这个芯片。
he code:
回复 Eric Ma:
果然是这个问题。 换成memcpy((uint16_t *)&RamfuncsRunStart,(uint16_t *)&RamfuncsLoadStart, (unsigned long)&RamfuncsLoadSize); 看来这个是V126 flash实验的BUG。 另外V126还有一个BUG,就是在文件里面没有MemCopy这个文件。 还是说不需要这个文件也能运行啊?。 因为在做FLASH实验的时候没有将MEMCOPY关联进来,程序好像依然能正常运行。
程序之前再RAM中调试的,后来要搬到FLAHS中来。
使用了F28035_CLA_C.CMD,发现在InitAdc()函数总是的跳至ILLEGAL_ISR。
因为在InitAdc中使用了 DELAY_US(ADC_usDELAY);
查资料说要从FLASH中拷贝到RAM中来才能运行。
于是做了以下修改。
首先在DSP2803x_Examples.h文件中开始部分加入以下一条语句
#pragma CODE_SECTION(DSP28x_usDelay, "ramfuncs");
然后再main里面再加以下语句
memcpy((uint16_t *)&RamfuncsLoadStart,(uint16_t *)&RamfuncsRunStart, (unsigned long)&RamfuncsLoadSize);
InitFlash();
可是还是不行。不知道是哪里错了。
烦请帮忙解决一下。最好就是一条语句一条语句加在什么地方教一下。
因为是第一次使用这个芯片。
he code:
回复 Eric Ma:
memcpy(&Cla1funcsRunStart, &Cla1funcsLoadStart, (Uint32)&Cla1funcsLoadSize); memcpy(&Cla1mathTablesRunStart, &Cla1mathTablesLoadStart, (Uint32)&Cla1mathTablesLoadSize);
那其他例程中,这两句会不会也有问题啊?麻烦核对一下。
不过好像CLA调试下来好像没出意外。
程序之前再RAM中调试的,后来要搬到FLAHS中来。
使用了F28035_CLA_C.CMD,发现在InitAdc()函数总是的跳至ILLEGAL_ISR。
因为在InitAdc中使用了 DELAY_US(ADC_usDELAY);
查资料说要从FLASH中拷贝到RAM中来才能运行。
于是做了以下修改。
首先在DSP2803x_Examples.h文件中开始部分加入以下一条语句
#pragma CODE_SECTION(DSP28x_usDelay, "ramfuncs");
然后再main里面再加以下语句
memcpy((uint16_t *)&RamfuncsLoadStart,(uint16_t *)&RamfuncsRunStart, (unsigned long)&RamfuncsLoadSize);
InitFlash();
可是还是不行。不知道是哪里错了。
烦请帮忙解决一下。最好就是一条语句一条语句加在什么地方教一下。
因为是第一次使用这个芯片。
Eric Ma:
回复 he code:
he code,
这的确实例程的一个bug,v127会修复这个问题。
其实memcpy和memcopy是两个不同的函数。memcpy是编译器内嵌函数,编译器自动会编译这个函数,不需要这个源代码。
而memcopy函数是ti自己写的,可以在最开始的版本的common文件夹找到这个源文件,后来新的版本就替换掉了,直接用内嵌函数memcpy。
#include "DSP2803x_Device.h"
void MemCopy(Uint16 *SourceAddr, Uint16* SourceEndAddr, Uint16* DestAddr)
{
while(SourceAddr < SourceEndAddr)
{ *DestAddr++ = *SourceAddr++; }
return;
}
Eric
程序之前再RAM中调试的,后来要搬到FLAHS中来。
使用了F28035_CLA_C.CMD,发现在InitAdc()函数总是的跳至ILLEGAL_ISR。
因为在InitAdc中使用了 DELAY_US(ADC_usDELAY);
查资料说要从FLASH中拷贝到RAM中来才能运行。
于是做了以下修改。
首先在DSP2803x_Examples.h文件中开始部分加入以下一条语句
#pragma CODE_SECTION(DSP28x_usDelay, "ramfuncs");
然后再main里面再加以下语句
memcpy((uint16_t *)&RamfuncsLoadStart,(uint16_t *)&RamfuncsRunStart, (unsigned long)&RamfuncsLoadSize);
InitFlash();
可是还是不行。不知道是哪里错了。
烦请帮忙解决一下。最好就是一条语句一条语句加在什么地方教一下。
因为是第一次使用这个芯片。
Yi Tian1:
回复 Eric Ma:
请问新版本使用MemCopy函数时需要包含哪个文件?
程序之前再RAM中调试的,后来要搬到FLAHS中来。
使用了F28035_CLA_C.CMD,发现在InitAdc()函数总是的跳至ILLEGAL_ISR。
因为在InitAdc中使用了 DELAY_US(ADC_usDELAY);
查资料说要从FLASH中拷贝到RAM中来才能运行。
于是做了以下修改。
首先在DSP2803x_Examples.h文件中开始部分加入以下一条语句
#pragma CODE_SECTION(DSP28x_usDelay, "ramfuncs");
然后再main里面再加以下语句
memcpy((uint16_t *)&RamfuncsLoadStart,(uint16_t *)&RamfuncsRunStart, (unsigned long)&RamfuncsLoadSize);
InitFlash();
可是还是不行。不知道是哪里错了。
烦请帮忙解决一下。最好就是一条语句一条语句加在什么地方教一下。
因为是第一次使用这个芯片。
Eric Ma:
回复 Yi Tian1:
新版本的是memcpy,不用包含什么文件,这是编译器内嵌函数。
Eric
程序之前再RAM中调试的,后来要搬到FLAHS中来。
使用了F28035_CLA_C.CMD,发现在InitAdc()函数总是的跳至ILLEGAL_ISR。
因为在InitAdc中使用了 DELAY_US(ADC_usDELAY);
查资料说要从FLASH中拷贝到RAM中来才能运行。
于是做了以下修改。
首先在DSP2803x_Examples.h文件中开始部分加入以下一条语句
#pragma CODE_SECTION(DSP28x_usDelay, "ramfuncs");
然后再main里面再加以下语句
memcpy((uint16_t *)&RamfuncsLoadStart,(uint16_t *)&RamfuncsRunStart, (unsigned long)&RamfuncsLoadSize);
InitFlash();
可是还是不行。不知道是哪里错了。
烦请帮忙解决一下。最好就是一条语句一条语句加在什么地方教一下。
因为是第一次使用这个芯片。
Yi Tian1:
回复 Eric Ma:
Eric 您好:
1.
我用memcpy函数时,若用下列语句声明:
extern Uint16 RamfuncsLoadStart;extern Uint16 RamfuncsRunStart;extern Uint16 RamfuncsLoadSize;
则会编译出错,
若改为
extern Uint16 RamfuncsLoadStart;extern Uint16 RamfuncsRunStart;Uint16 RamfuncsLoadSize;
则可成功编译,请问原因是什么?RamfuncsLoadSize最初是在哪个文件中定义的?它的值是由什么决定的?
2.
请问程序在Flash中运行时,哪些函数必须要搬到RAM中?
我知道的包括InitFlash(),dealy_us()和工程中用到的中断服务函数。
一份参考资料中说“对于对时间要求严格的过程,需要拷贝到RAM 中运行,以达到最高速度”,是不是可以理解为除了InitFlash(),dealy_us()和中断服务函数,其他都可以在Flash中运行?
谢谢!
程序之前再RAM中调试的,后来要搬到FLAHS中来。
使用了F28035_CLA_C.CMD,发现在InitAdc()函数总是的跳至ILLEGAL_ISR。
因为在InitAdc中使用了 DELAY_US(ADC_usDELAY);
查资料说要从FLASH中拷贝到RAM中来才能运行。
于是做了以下修改。
首先在DSP2803x_Examples.h文件中开始部分加入以下一条语句
#pragma CODE_SECTION(DSP28x_usDelay, "ramfuncs");
然后再main里面再加以下语句
memcpy((uint16_t *)&RamfuncsLoadStart,(uint16_t *)&RamfuncsRunStart, (unsigned long)&RamfuncsLoadSize);
InitFlash();
可是还是不行。不知道是哪里错了。
烦请帮忙解决一下。最好就是一条语句一条语句加在什么地方教一下。
因为是第一次使用这个芯片。
Yi Tian1:
回复 Eric Ma:
Eric,
您讲的很详细,谢谢!
TI中文支持网



