1、2812将程序加载到内部RAM运行有关的,请大家指导:
在CMD文件中:
{
...
ramfuncs : LOAD = ZONE6,
RUN = RAMH0,
LOAD_START(_RamfuncsLoadStart),
LOAD_END(_RamfuncsLoadEnd),
RUN_START(_RamfuncsRunStart),
PAGE = 0
...
}
首先定义的这个ramfuncs这个段,所定义_RamfuncsLoadStart、_RamfuncsLoadEnd、_RamfuncsRunStart真实的起始地址是在什么时候被分配的?起始、结束位置都等于什么?
因为我不清楚主程序中的memcpy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);函数,是将那块拷贝多长到那里。
2、我发现在TMS320F2812中,对外部空间DWROD型访问支持的不太好,这可能会涉及到以指针方式调用外用空间的函数,或者读取外部空间DWORD型的数据。
例如:现在我定义了一个函数指针 void (*pFunc)(void);通过该指针对外部(我是在调用ZONE 6中的函数)函数进行调用;
/*注意,以下几个Test函数一定要在外部空间,我的是在ZONE 6空间*/
Uint16 gui;
void Test1(void)
{
gui = 1;
return;
}
void Test2(void)
{
gui = 2;
return;
}
void Test3(void)
{
gui = 3;
return;
}
void Test4(void)
{
gui = 4;
return;
}
void Test5(void)
{
gui = 5;
return;
}
void main(void)
{
gui = 0x0000;
while(1)
{
pFunc = Test1;
(*pFunc)();
pFunc = Test2;
(*pFunc)();
pFunc = Test3;
(*pFunc)();
pFunc = Test4;
(*pFunc)();
pFunc = Test5;
(*pFunc)();
}
}
然后,在各函数中分别加断点,我就发现函数的执行顺序与调用的顺序不一致。。请指导,这是什么原因引起的?
3、我如果对ZONE6空间进行WORD型读写操作,都没有问题,但如果进行DWORD读操作,时如果遇到奇地址,会进行偶对齐?这又是什么原因引起的?如果我的一个DWORD型数据(如,一个函数名)正好在奇地址,那么处理器进行偶对齐后,我在读时就会出错呀。。这又是什么原因引起的?
以上几个问题是我在将代码加载到外扩RAM(ZONE 6)运行时,所遇到的几个问题,还请大家多多指导! |