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.

[参考译文] CC1312R:应用崩溃

Guru**** 2540720 points
Other Parts Discussed in Thread: CC1312R

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1064786/cc1312r-application-crashes

器件型号:CC1312R

你(们)好

我将在定制板上使用 CCS11和 SDK5.30为 CC1312R 制作引导加载程序。

引导加载程序现在能够使用应用程序对闪存进行编程、然后跳转到其开始位置、但随后会崩溃。

当我单步使用调试器时、我看到:

00012450:B508推{R3、r14}
00012452:F000F873 BL #0x1253c
00012456:F7FEFC95 BL #0x10d84
0001245a:F7FFBE0B b.w #0x12074 <<-此调用崩溃

以下代码用于:

resetISR():
00012450:B508推{R3、r14}
00012452:F000F873 BL NOROM_CPUCPsid
00012456:F7FEFC95 BL NOROM_SetupTrimDevice
0001245a:F7FFBE0B b.w _c_int00 <<-这是崩溃的调用、C 初始化
0001245e:F7FFFDA8 BL FAULTISR
00012462:BD08 POP{R3、PC}

最后是:

000122a6:  E7FE         B      intDefaultHandler

对应于.map 文件的是:

000122a6 00000002 nortos_cc13x2.a:startup_cc13x2_cc26x2_ccs.oem4f (.text:intDefaultHandler)

我的 JUMP 将 MSP、VTOR 和 PC 设置为:

void App_jump (void)

__Set_MSP (*((UINT32_t*) app_address )));

*((unsigned long *) 0xE000ED08/* VTOR *)=(unsigned long) app_address;

(*((App_VectorTable_Reset_t)(*(uint32_t*)(app_address +4))))();

有人能 不能给我一些想法    、为什么应用程序在_c_int00中崩溃、以 intDefaultHandler 结尾?

应用程序在其起始地址位于闪存的0x0时运行正常。 当应用程序在引导加载程序下运行时、需要使用0x10000的起始地址重新编译。 此外、闪存的大小也减小到 0x00046000。 前64K 用于引导加载程序、后8K 包含器件配置、因此 Flash 页面保持不变。

#define FLASH_base 0x00010000
#define FLASH_SIZE 0x00046000 //引导加载程序限制为64K。 总闪存为352K、0x58000。 最后8K 由器件配置使用。 *

最后对.ccfg 部分进行了注释、以便应用程序使用器件配置字节而不是自己的字节。 无论如何、它们都是相同的。

/*.ccfg:> FLASH (高电平)*/

我找到了该文件:

C:\ti\simplelink_cc13xx_cc26xx_sdk_5_30_01_01\kernel\nortos\startup\startup_cc13x2_cc26x2_ccs.c

这似乎是 CC1312R 的启动。 如何确保这是正确的文件? 如何将文件包含到工程中以便进行调试?

但我仍然找不到 _c_int00的代码。 这是在哪里?

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


    你(们)好

    我找到了问题、但我没有找到解决方案。
    应用程序没有任何问题。
    此问题必须与已完成的某些双初始化有关。
    首先、引导加载程序和应用程序初始化似乎使应用程序无法运行。
    这就是为什么我要在跳转到应用程序之前进行复位的原因。 在过去的引导加载程序中、我遇到了一些类似的问题...

    在我的测试场景中、我已经在闪存中对应用进行了编程、所以我唯一需要做的就是跳转到应用、看看它是否起作用。 为此,我只需调用 App_jump ()。

    这样,我一直在程序流中向下移动 App_jump (),以查看它停止工作的位置。


    就像这样工作:

    静态 bool SIM7600_WaitForReady (空)

    (笑声)
    while (1)


    void App_jump (void);
    APP_JUMP ();<--正常工作

    STATUS = UART2_readTimeout (UART、INPUT、1、bytesRead、SIMP7600_READ_TIMEOUT);


    就像这样、它不会。

    静态 bool SIM7600_WaitForReady (空)

    (笑声)
    while (1)

    STATUS = UART2_readTimeout (UART、INPUT、1、bytesRead、SIMP7600_READ_TIMEOUT);

    void App_jump (void);
    app_jump ();<--不起作用


    因此、我的结论是、UART2_readTimeout 中会发生一些阻止应用正常运行的情况。
    奇怪的是、应用程序不会仅使用一个 Buzzer 引脚!

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

    为什么软件工程中的所有错误都以"当然..."结尾 ?

    中断被启用,所以一旦调用 _disable_interrupts (); 被引入,一切都开始工作。