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.

[参考译文] TMS570LS2124:SafeTI DIAG Lib -示例

Guru**** 2538930 points
Other Parts Discussed in Thread: TMS570LS1227, TMS570LS1224, HALCOGEN, LAUNCHXL2-TMS57012

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/977042/tms570ls2124-safeti-diag-lib---example

器件型号:TMS570LS2124
主题中讨论的其他器件:TMS570LS1227TMS570LS1224HALCOGENLAUNCHXL2-TMS57012

您好!

我正在努力在 TMS570LS1224上实施安全功能。 我下载了 SafeTI 诊断库并浏览了示例: SL_TMS570LS1227_Noos。

我使用 TMS570LS1224 LaunchPad 板。

首先,我想重点介绍启动时间功能(sys_startup.c),因此,在 main()函数内,我用简单的 LED 闪烁函数替换了所有代码(HalCoGen 只需要做一个额外的更改(GIOB1->标记为输出)。 我已经运行了应用程序、一切都运行得很好。 LED 按预期闪烁、但仅在调试会话期间。 遗憾的是、在调试会话应用程序之外不工作(LED 不闪烁)。

原因可能是什么? 在这种情况下、您可以提供帮助吗?

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

    您好、Michat、

    GIO 引脚切换的频率如何? 如果切换速度太快、我们将无法看到 LED 闪烁。  

    您可以使用 HALCoGen rtiBlinky 示例切换代码中的 GIOB[1]引脚。  

    void rtiNotification (uint32通知)

       /*切换 GIOB 引脚1 */
       gioSetPort (gioPORTB、gioGetPort (gioPORTB)^ 0x00000002);

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

    QJ Wang、您好!
    我想这不是问题。
    我的虚拟 main 函数:

    void main()
    {
    while (1)
    {
    gioSetBit( gioPORTB, 1,1);
    volatile uint32_t i;
    对于(i = 0;i < 9999999;i++)
    {
    }
    gioSetBit( gioPORTb, 1,0);
    对于(i = 0;i < 9999999;i++)
    {
    }
    }
    

    当我逐行运行时、它在调试模式下工作(使用步进模式)
     当应用程序正在运行时、它还在调试模式下工作。 LED 闪烁(大约1秒开/ 1秒关)。

    正如我在开始时所说 的、它在调试会话之外不起作用(我尝试关闭电源并打开 LAUNCHXL2-TMS57012的电源。

    我正在使用示例 SL_TMS570LS1227_Noos 并尝试在 LAUNCHXL2-TMS57012 (TMS570LS1224)上使用它。

    编辑1:
    我现在注意到一个有趣的行为:
    当我按下 LAUNCHXL2-TMS57012上的 RESET 按钮或 PORRST 按钮时-应用程序工作正常。
    当我通过拔下 USB 插头并将 USB 插头插回来断开电路板电源时、应用程序无法正常工作。

    编辑2:
    我想,在本节中的某个位置有一个示例问题//用户代码 begin (75)*/(第1111 - 1234行)
    当我将其注释掉时、应用程序的工作方式与我预期的一样(即使在通过移除 USB 插头关闭 LaunchPad 板的电源时也是如此、然后将其重新插入。

    编辑3:
    可能 是_enable_interrupt_()或代码中与该函数相关的部分在某种程度上存在问题。
    当我移除 _enable_interrupt_()时-应用程序正常工作(即使我通过移除 USB 插头断开 LaunchPad 板的电源、将其重新插入)。
    我发现一 段时间前就报告过类似的 SafeTI 示例问题(e2e.ti.com/.../920991)。

    编辑4:
    我还注意到调试会话期间出现了奇怪的行为。 使用"步越"并不总是向前推进、而是有时向后推进。 在反汇编视图中也可以看到这种奇怪的行为。 这种行为的原因是什么?  

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

    我执行了一系列测试、从 sys_startup.c 文件中删除了诊断测试、发现了问题。
    第816行导致错误- sl_SelfTest_SRAM (SRAM_PAR_ADDR_CTRL_self_test、true 和 failInfoTCMRAM);
    在示例项目中没有针对这个测试的注释、但是在文档中有注释:'当执行 SRAM_PAR_ADDR_CTRL_self_test 时、用户必须确保有一个特殊的 ESM_handler 例程、而无需任何堆栈或者其它 RAM 访问、以避免意外的错误报告'


    当我删除此测试时、我的示例应用程序工作正常。
    当该测试存在时,需要禁用_enable_interrupt_()。

    仍然不知道如何修复 调试会话期间我在上一个帖子(Edit4)中显示的奇怪行为。