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.

[参考译文] TMS570LC4357:关于 HALCoGen 的 example_SafetyLib.c

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/565357/tms570lc4357-about-example_safetylib-c-of-halcogen

主题中讨论的其他器件:HALCOGEN

大家好、TI 专家、

 

我们的客户正在设计基于 TMS570LC4357-EVM (TMDX570LC43HDK)的原型产品。

他们向我们发送了  一个有关 TMDX570LC43HDK 的 HALCoGen 示例代码的问题

  HALCoGen:04.05.02

  SafeTI 诊断库版本:2.2.0

  CCS:版本6.1.3.00033

  SAMPLE_CODE:\Hercules \HALCoGen\v04.05.02\examples\TMS570LC43x\example_SafetyLib.c

 

他们根据 HALCoGen 的 example_SafetyLib.c 中编写的指南创建了 CCS 工程。

这个 CCS 项目成功(REACH 至 main();)

 

之后、他们按照如下方式修改了文件"HL_ESM.c"、以启用"组1通道52(CPU 互连子系统的 ESM 错误-全局错误)"

 -设置 IESR4的 bit 20 :如下面所示重写0U -> 1U;

    esmREG->IESR4 =. |(uint32)((uint32) 1U <<20U)|..

 -设置 ILSR4的 bit 20 :如下所示重写0U -> 1U;

    esmREG->ILSR4 =.. |(uint32)((uint32) 1U <<20U)|..

 

在重新构建并加载程序和执行之后、该程序进入 while (1)循环

在"sl_SelfTest_STC (STC1_run、true、&stcSelfTestConfig)"行之后; "

(文件"example_SafetyLib.c"的第825行)

 

这种通过修改文件"HL_ESM.c"来启用 ESM 错误的正确方法吗?

 

请告诉我们在 example_SafetyLib.c 中启用 ESM 错误的建议方法

 

此致、

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

    当您处于 while (1)循环中时、您能否检查 ESM 寄存器以查看是否设置了任何错误标志? 可能发生的情况是、与启动相关的错误路径校验测试导致有意设置 ESM 错误标志(这是证明错误路径正常工作的一部分)、因此、SW 进入 while 循环、在该循环中可以放置处理程序。 另一种可能的情况是在启动期间发生了真正的错误、导致进入 while 循环。 让我知道设置了哪些 ESM 标志、我们可以从此处诊断根本原因。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好、Chuck、

    感谢您的快速回复。
    非常感谢您的帮助。

    当 ESM 错误标志处于 while (1)循环中时、我们的客户向我们发送了如下所示的 ESM 错误标志检查结果。
    ESMSR1 0x00000000
    ESMSR2 0x00000000
    ESMSR3 0x00000000
    ESMSR4 0x00100000 (GR1-52被置位)

    你是否有相同的经验?
    如果您能诊断根本原因并告诉我们在 Example_SafetyLib.c 中启用 ESM 错误的建议方法、我将不胜感激

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

    进一步研究这个问题、代码进入 while Look 的原因是 CPU 自检不会像它应该的那样启动。 基本上、函数调用 sl_SelfTest_STC 永远不应返回、因为 CPU 在 STC 自检结束时被复位。 当 CPU 被复位时、它通过复位引起重新进入并且在第二次给定复位条件状态时跳过 STC SelfTest。 (这是您提到的 sl_SelfTest_STC 调用之前的 if 语句)。

    因此,没有理由不启动科技委员会。 但是,这可能是因为调用 esmInit 的时间太早。 不应从 startup.c 文件内调用它。 在运行完所有初始启动诊断并初始化中断矢量表等之后、应调用 esmInit 这可以在调用 main 之前位于启动文件中、也可以是 main 中的第一项。

    关于修改 HL_ESM.c 文件以启用 ESM 组1通道52中断的"正确"方法、您实际上可以直接如您所述修改代码。 但是、这些段将与您的 Halcogen 项目不同步。 我建议您修改 Halcogen 内的配置、然后重新生成代码。 用户代码段中的任何代码将保持不变、与 halcogen 配置关联的代码将更新。 (与往常一样、请保留备份、以便在使用 Halcogen 或其他工具进行修改时不会丢失工作、因为它很容易覆盖某些内容。 建议将 Halcogen 生成的代码保留在单独的位置、并在配置更新令人满意时将文件复制到项目目录中。)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好、Chuck、

    感谢您的详细解释。
    非常感谢您的帮助。
    我会将答案发送给客户。

    此致