主题中讨论的其他器件:HALCOGEN
大家好、
当使用 diagLib 时、当在 sys_startup.c 中调用 sl_SelfTest_PBIST 来自检所有 TCMRAM 时、自检完成后会覆盖所有栈数据、因此当函数返回时、使用 POP 指令进行出栈操作将进入中止异常。 客户希望知道这是否为预期行为。 如果没有、如何解决?
您能帮助检查这个问题吗? 谢谢。
此致、
切里
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.
大家好、
当使用 diagLib 时、当在 sys_startup.c 中调用 sl_SelfTest_PBIST 来自检所有 TCMRAM 时、自检完成后会覆盖所有栈数据、因此当函数返回时、使用 POP 指令进行出栈操作将进入中止异常。 客户希望知道这是否为预期行为。 如果没有、如何解决?
您能帮助检查这个问题吗? 谢谢。
此致、
切里
您好、Cherry:
这是预期行为。
PBIST 通常在器件启动时运行、这是一个破坏性测试、并且测试期间会覆盖所测试的 SRAM 模块的所有内容。 SRAM 分为多个组、您可以将数据和指令放在一个 SRAM 组中、并测试其他 SRAM 组。
当您在 MCU SRAM 上执行 PBIST 时、堆栈区域中的内容也将丢失。 这就是为什么在 HALCoGen 生成的 c_int00 ()中执行 SRAM pbist 测试的原因。
如果您在启动期间在 SRAM 中执行 PBIST、则无需将 SRAM 内容保存到其他位置、因为它不包含任何有用的数据(刚初始化的数据)。
如果您对 SRAM 执行定期 pbist 测试、则需要在开始测试之前保存 SRAM 内容。
有关更多详细信息、请参阅以下主题:
(+) TMS570LC4357:TMS570LC4357中的内部 RAM 存储器测试-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛
--
谢谢。此致、
Jagadish。
Jagadish、您好!
感谢您的支持,请让我澄清,在 c_int00 ()中执行 SRAM pbist 时会出现此问题。 使用 TI 诊断库中包含的 sys_startup.c 文件、而不是使用 halcogen 生成的文件。
由于以下代码、当调用 sl_SelfTest_PBIST 时、会自然而然地生成入栈和出栈操作、这与 halcogen 自动生成的代码不一致。
void afterSTC(void) { SL_CCMR4F_FailInfo failInfoCCMR4F; /* CCMR4 Self Test fail info */ volatile boolean retVal; /* For function return values */ SL_PBIST_FailInfo failInfoPBISTSRAM; /* PBIST Failure information for TCM RAM */ SL_SelfTest_Result failInfoFlash; /* Flash Self test failure information */ SL_SelfTest_Result failInfoTCMRAM; /* TCM RAM Failure information */ SL_PBIST_FailInfo failInfoPBISTOthers;/* PBIST Failure information for non-TCM memories */ SL_EFuse_Config stConfigEFuse; /* EFuse self test configuration */ ...... ...... retVal = SL_SelfTest_PBIST( PBIST_EXECUTE, /* Execute PBIST test */ (PBIST_RAMGROUP_06_ESRAM1 | PBIST_RAMGROUP_21_ESRAM5), /* On all TCM RAMs */ PBISTALGO_MARCH13N_RED_1PORT); while (TRUE != SL_SelfTest_WaitCompletion_PBIST()) { } ...... ...... }
调试时、当 SL_SelfTest_PBIST 函数返回时、出栈故障进入中止状态、但当 RELEASE 全速运行时、它确实正常进入 main。 为什么会这样?
谢谢。此致、
切里