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.

[参考译文] AM263P4:预发布 MCAL 11.01.00.07 中的 FLS_BOOT_APP 例程是否支持在装有操作系统的应用程序中使用?

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1606257/am263p4-is-the-fls_boot_app-routine-in-pre-release-mcal-11-01-00-07-supported-for-use-in-applications-with-an-os

器件型号: AM263P4

预发布 MCAL 11.01.00.07 中的 FLS_BOOT_APP 示例是否在使用 OS 的应用程序中使用 TRNG、AES、SHA 和其他功能进行了测试? 目前、我们观察到、TRNG 和 AES 等功能在没有操作系统的应用中正常运行。 OS 的存在是否会影响这些函数可能依赖的 SemaphoreP_Pend (HwiP_disable() 和 HwiP_restore) 调用?

此外、在调试期间、我们发现在进入 HwiP_disable 后、LR 寄存器指向非法地址、导致其跳转到未定义的中断服务例程。 这可能是由于中断冲突造成的、因为我们的操作系统也使用了大量中断。

image.png

image.png

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

    我还有问题:

    ① 关于红色框 1:为什么在 MCAL 提供的 SemaphoreP_pend 函数中禁用中断、而在基于 SDK 的版本中不禁用中断? 此代码段的用途是什么?

    ② 关于红色框 2:为什么 SemaphoreP_Pend 在等待释放信标 SemaphoreP 时启用/禁用中断? 根据原始示例、由于超时设置为 SystemP_WAIT_FOREVER、因此将反复启用/禁用中断、直到 SemaphoreP 被释放为止。 如果我将超时设置为 SystemP_NO_WAIT、它不会在未释放信标时连续处理中断。 然后、通过在轮询函数中执行 SemaphoreP_Pend(带有 SystemP_NO_WAIT)、并仅在发布 SemaphoreP 时才继续执行下一步、这种方法是否可行?

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

    您好、

    关于红色框 1:为什么在 MCAL 提供的 SemaphoreP_Pend 函数中禁用中断、但在基于 SDK 的版本中不禁用中断? 此代码段的用途是什么?

    这是 nortos 实现中信标的参考实现。 hwip_disable 和 restore 用于 ClockP 中断(即 RTI0)到达和递减计数。 与代码一起使用时、您必须将其替换为操作系统信标。

    ]为什么 SemaphoreP_pend 在等待释放信标 SemaphoreP 时启用/禁用中断? 根据原始示例、由于超时设置为 SystemP_WAIT_FOREVER、因此将反复启用/禁用中断、直到 SemaphoreP 被释放为止。 如果我将超时设置为 SystemP_NO_WAIT、它不会在未释放信标时连续处理中断。 然后、通过在轮询函数中执行 SemaphoreP_Pend(带有 SystemP_NO_WAIT)、并仅在发布 SemaphoreP 时才继续执行下一步 — 这种方法是否可行?

    是的、上面提供的实现方案是 nortos 版本的参考。 在 SDK 中、中有相同信标实现的 FreeRTOS 版本  ${MCU_PLUS_SDK}\source\kernel\freertos\dp\common\SemaphoreP_freertos.c

    同样、应该有可在实用程序中使用的 Autosar OS 版本信标实现方案。  

    谢谢。此致、

    Nikhil Dasan

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

    抱歉、我问了错误的问题。
    ① 我想问的是、为什么红框 1 中的代码在 SemaphoreP_pend 的 MCAL 版本中被注释掉、而它通常保留在 SDK 中。 此代码的用途是什么? 为什么在 MCAL 示例代码中将其注释掉?
    ② 在红色框 2 中、在读取信标 SemaphoreP 之前、必须使用 HwiP_disable (通过汇编)禁用所有中断、然后读取信标 SemaphoreP。 如果此时仍未释放信标、则  会执行中断恢复操作 HwiP_RESTORE (KEY)、然后使用 HwiP_DISABLE 再次 禁用中断。 它的目的是什么? 这是否因为担心中断可能会影响信标的读取/写入操作?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    ]我实际上要问的是、为什么红色框 1 中的代码在 SemaphoreP_pend 的 MCAL 版本中被注释掉、而该代码通常保留在 SDK 中。 此代码的用途是什么? 为什么在 MCAL 示例代码中将其注释掉? [/报价]

    已对此进行注释、因为这些 DPL 层的目的是启用 HSMClient 的功能、而预期是对下面的 DPL 层使用 Autosar 相关代码。 因此、此处跳过了 ClockP 模块。

    在红色框 2 中、在读取信标 SemaphoreP 之前、必须使用 HwiP_disable (通过汇编)禁用所有中断、然后读取信标 SemaphoreP。 如果此时仍未释放信标、则  会执行中断恢复操作 HwiP_RESTORE (KEY)、然后使用 HwiP_DISABLE 再次 禁用中断。 它的目的是什么? 这是否因为担心中断可能会影响信标的读取/写入操作? [/报价]

    我来内部检查一下。 我看到这只做了 nortos 版本、但在 FreeRTOS 版本中没有。

    您正在使用的 autosar 版本是否也实现了此功能?

    谢谢。此致、

    Nikhil Dasan

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

    我们的 AUTOSAR 版本没有专门调整 SemanticP 以实现 HSMClient 等功能

    让我总结一下您的回答、看看我是否理解正确:

    1、信标的实现在没有操作系统的环境和没有操作系统的环境(如 FreeRTOS)之间有所不同。 因此、选择使用 SemaphoreP_nortos.c 或 SemaphoreP_freertos.c 中的 API  取决于应用程序是否包括操作系统、对吗?

    2、TI 的预发布 MCAL 11.02.00.01 中与 SemaphoreP 相关的 API 仍适用于没有操作系统的环境(例如,MCAL AM263Px_11_02_00_01\mcal\examples\Utils\hsmclient_utils\DPL\SemaphoreP_nortos.c) 。 根据我的理解、这是否意味着在当前 MCAL 版本中、SemaphoreP (HSMClient) 等功能只能在没有操作系统的应用中使用?

    3、我的理解是、TI 假设我们可以通过 AUTOSAR 相关代码配置 DPL、因此无需在 SemaphoreP_Pend 中单独配置 ClockP 等 DPL 模块。 这是正确的吗? 如果我们当前没有通过 AUTOSAR 相关代码配置 ClockP 模块、我们是否需要启用它? 但是、根据实际测试、当前程序在没有操作系统的应用程序中正常运行。

    4、我的理解是、为了尽可能减少 ClockP 中断的影响、中断会被重复禁用和恢复。 这是否意味着在没有操作系统的环境中,SemaphoreP 的操作与 ClockP 模块有关?

    如果您能单独回答这些问题、我将不胜感激。 非常感谢。

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

    您好、

    [引用 userid=“655954" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1606257/am263p4-is-the-fls_boot_app-routine-in-pre-release-mcal-11-01-00-07-supported-for-use-in-applications-with-an-os/6227011 ]1、在没有操作系统的环境和没有操作系统的环境(例如 FreeRTOS)之间、信标的实现方式有所不同。 因此、选择使用 SemaphoreP_nortos.c 或 SemaphoreP_freertos.c 中的 API  取决于应用程序是否包括操作系统、对吗? [/报价]

    没错。 DPL 层由各自的操作系统供应商实现

    2、TI 的预发布 MCAL 11.02.00.01 中与 SemaphoreP 相关的 API 仍适用于没有操作系统的环境(例如,MCAL AM263Px_11_02_00_01\examples\Utils\hsmclient_utils\DPL\SemaphoreP_nortos.c) 。 根据我的理解、这是否意味着在当前 MCAL 版本中、SemaphoreP (HSMClient) 等功能只能在没有操作系统的应用中使用? [/报价]

    是的、情况就是这样、因为与操作系统相关的功能是上部 Autosar 堆栈的一部分、而不是 MCAL。  

    ]我的理解是、TI 假设我们可以通过 AUTOSAR 相关代码配置 DPL、因此无需在 SemaphoreP_pend 中单独配置 ClockP 等 DPL 模块。 这是正确的吗? 如果我们当前没有通过 AUTOSAR 相关代码配置 ClockP 模块、我们是否需要启用它? 但是、根据实际测试、当前程序在没有 OS
    的应用程序中正常运行

    整个 SemaphoreP 实施预计将来自操作系统供应商、因为调度、阻止、任务间同步等流程将来自操作系统实施。 如果操作系统层中有信标实现、则可以在此处使用它。

    我的理解是、为了尽可能地减小 ClockP 中断的影响、我们会重复禁用和恢复中断。 这是否意味着在没有操作系统的环境中,SemaphoreP 的操作与 ClockP 模块有关? [/报价]

    将中断禁用为临界部分、并避免干扰可能发布信标的 ISR。
    如果我们不在内部继续恢复/禁用、中断将保持禁用状态、ISR 将没有机会运行、这可能会发布信标。 因此始终会导致超时。
    该实现仅适用于 no-RTOS、因为基于 FreeRTOS 的实现使用 FreeRTOS API 、例如 xSemaphoreTakeRecursive、xSemaphoreTake 等  

    谢谢。此致、

    Nikhil Dasan

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

    非常感谢您的答复!!!

    让我总结一下您的回答、并确认我的理解是否正确:

    ① TI 为 EVT 提供的 MCAL(预发布 MCAL 11.02.00.01)仅适用于无操作系统应用。 此外、AUTOSAR 通常在其他位置配置 ClockP 和其他 DPL 组件等模块、因此  MCAL 中的 SemaphoreP_PEND 中已禁用 ClockP 相关初始化。

    ② 如果我需要在具有操作系统的应用程序中使用 HSM 客户端相关功能、则我不再能依赖为无操作系统环境构建的信标逻辑。 这意味着我无法使用 SemaphoreP_nortos.c 中的 API 相反、我需要替换 HsmClient_register (例如 SemaphoreP_ConstructBinary) 、 HsmClient_ISR (例如 SemaphoreP_POST) 和 Client_Send AndRecv (例如:  SemaphoreP_pend)、其中包含应用程序中使用的操作系统提供的相应信标 API。 说只需要替换这些特定的信标 API 是正确的吗? 除了信标之外、HSM 客户端模块的其余部分对于无操作系统和操作系统环境都保持不变、对吧?

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

    您好、

    是的、

    添加了设备移植层 (DPL)、也称为操作系统抽象层、以抽象处理特定于操作系统的 API。  
    其中的内容来自 AUTOSAR 的操作系统堆栈。

    谢谢。此致、

    Nikhil Dasan