工具与软件:
您好!
我有一个 OMAP-L138系统、此系统具有2个闪存芯片:一个在 SPI1上、其中包含一个程序以检查另外一个闪存(SPI0)是否有两个有效固件版本。
两个闪存的用途是始终能够从失败的固件更新中恢复。 SPI1闪存中的固件将检查 SPI0闪存是否有有效的固件版本、并解析两者最新版本的 AIS 脚本、并将该固件加载到解析的位置。 加载完成后、SPI1固件(我自己的引导加载程序)应跳转至选定运行的 SPI0固件的_c_int00地址。
我尝试了各种技巧来强制我的引导加载程序跳转到_c_int00地址、毫无希望。
我的尝试之一是以下相对简单的代码:
void (* func_ptr)(void)=(void (*)(void))_c_int00;
func_ptr();
c_int00的地址是正确的地址(在本例中为0x80000AB7)、但当我在调试模式下单步执行时该地址不起作用。
任何巧妙的想法 如何强制执行到一个地址。
此时 DSP 未激活、它只是正在运行的 ARM。
边注:如果我将地址更改为正常函数、就可以正常工作。 效果
INT I = 0;
void func1 (void)
{
I++;
}
INT main
{
unsigned long address=&func1;
void (* func_ptr)(void)=(void (*)(void))地址;
while (1)
{
func_ptr();
}
}
谢谢!
克劳斯