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.

[参考译文] RTOS/CC2650STK:调用 BIOS 会禁用我的引导加载程序!

Guru**** 2421470 points
Other Parts Discussed in Thread: CC2650STK

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/823815/rtos-cc2650stk-calling-bios-disables-my-bootloader

器件型号:CC2650STK

工具/软件:TI-RTOS

您好!

我正在开发一个定制引导加载程序、该引导加载程序将通过无线方式接收应用程序并将其写入闪存。

引导加载程序和应用程序都将驻留在闪存中。

我的问题是、虽然我可以通过引导加载程序成功引导到应用程序中、但如果我在引导加载程序中进行以下函数调用、我无法成功引导到应用程序中:

/*启动内核。 *
BIOS_start(); 

作为参考、这是我用于从引导加载程序跳转到应用程序的函数:

void jumpToProgramEntry (uint32_t prgEntry){
#ifdef __IAR_systems_ICC__

prgEntry +=4;
uint32_t *项=(uint32_t *)&prgEntry;
_asm volatile (“LDR R2,[%0]\n\t”:“R”(条目));
asm (" LDR.W R2、[R2]");

//重置堆栈指针,
asm (" LDR SP、[R0、#0x0]");
asm (" BX R2 ");

#Elif defined (_TI_Compiler_version__)
HWREG (NVIC_vtable)= prgEntry;
Hwi_disable();
静态 uint32_t temp;
temp = prgEntry;
//重置堆栈指针,
温度+=4;
asm (" LDR SP、[R0、#0x0]");
((((void (*.)(void))(*.uint32_t*)temp))))))));

#endif
} 


因此,我想知道是否有任何解决方法,或者至少了解 BIOS_start()的作用,它不允许我成功跳转到我的应用程序。

谢谢、
Kevin
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗯、要回答我自己的问题:


    如果不使用 BIOS、以下操作将起作用:

    application.cfg:

    m3Hwi.resetVectorAddress = 0x00008000;

    m3Hwi.vectorTableAddress = 0x00008000;

    使用 BIOS 时、必须执行以下操作:

    application.cfg:

    m3Hwi.resetVectorAddress = 0x00008000;

    m3Hwi.vectorTableAddress = 0x20000000;

    其中、0x00008000是我的应用程序开始的位置(我在 CC2650STK.cmd 文件中为其分配了一段闪存存储器)。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Kevin:

    我很高兴您能够解决您的问题。 感谢您的分享!

    BR、

    Alexis