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.

[参考译文] AM13E23019:AM13E23019、如何在 SRAM 中分配 ISR?

Guru**** 2889230 points

Other Parts Discussed in Thread: AM13E23019, DRV8323

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1644037/am13e23019-am13e23019-how-to-allocate-isr-in-sram

部件号: AM13E23019
主题: DRV8323 中讨论的其他器件

您好、

AM13E23019 SDK 有一个示例工程“1sh_sl_foc_drv8329a“、演示了如何在 SRAM 中分配函数。 此函数由 ISR 调用、但 ISR 分配在闪存存储器中。 在我使用 STM32G4 创建的应用程序(它也具有用于执行代码的​​SRAM 区域 (CCM-SRAM)) 中、有一个在 SRAM 中分配中断矢量的过程(AN4296 文档,如下链接)。 这是在例程“startup_stm32g474xx.a“中完成的、复位后、中断向量将从闪存复制到名为 CCMRAM 的 SRAM 区域。 优点是当中断发生时、所有代码都以 SRAM 格式运行、无需调用在 SRAM 中分配的函数、从而提高了性能。

如何能够实现与 AM13E23019 等效的功能?

https://www.st.com/resource/en/application_note/an4296-use-stm32f3stm32g4-ccm-sram-with-iar-embedded-workbench-keil-mdkarm-stmicroelectronics-stm32cubeide-and-other-gnubased-toolchains-stmicroelectronics.pdf

Ari

 

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

    尊敬的 Ari:

    本主题的专家目前是 OOO、请在 2 周内回复。

    谢谢、

    IRA

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

    尊敬的 Ari:

    您可以使用宏 RAMFUNC、类似于对某些闪存驱动程序函数完成的方式

    例如: RAMFUNC void DL_FRI_setZeroReadWaitStates (void)

    这会将函数放置在加载到闪存并复制到 RAM 的单独段中。

    此致、

    Veena

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

    Veena Kamath

      

    使用 RAMFUNC 宏或“__attribute__((section(“.TI.ramfunc“))“(如 linker.cmd 文件中所述)、对于我已经测试并知道它有效的正常函数、我不确定它是否直接适用于中断例程、因为对于使用 gcc 的 STM32 工程、需要将中断矢量复制到 SRAM 并通知 NVIC 中的地址。

    但我感到惊讶的是、当在中断例程中使用“_attribute__((section(“.TI.ramfunc“))“时、它从 SRAM 分配例程并在中断发生时正确调用该例程、不知何故 TI 编译器除了将例程复制到 SRAM 之外、还会修改 NVIC 中的中断矢量。
    我发现很奇怪的是、在示例“1sh_sl_foc_drv8329a“中、它没有使用 MOTOR_CTRL_RAMFUNC ADC0_IN1_IRQHandler (void) 直接在 SRAM 中分配中断、而是仅在 SRAM 中分配 ISR 调用的函数。

    Ari

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

    尊敬的 Ari:

    如果您使用.TI.ramfunc 并使用 TI 编译器、它会在进入 main 之前自动将形式闪存复制到 RAM(如果按照链接器 cmd 文件中所示使用 BINIT,则自动复制)。 IAR 编译器也是如此。 此外、对标记为 RAMFUNC 的函数地址的任何引用都将提供 RAM 中的地址。 因此、您可以看到使用 RAM 地址更新的矢量表。

    SDK 中尚未添加 GCC 编译器支持、将于 6 月的即将发布版本中添加。

    关于您对电机控制示例的查询、我已经邀请了电机控制专家进行了环聊。 他很快就会回应你,

    此致、

    Veena

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

    尊敬的 Ari:

         感谢您发现在单分流器示例中、中断处理程序未放置在 RAM 中。 在本示例和 3 个分流器示例 (3sh_sl_foc_drv8323) 中、不要错过、可正确地将 ISR 调用和置于 RAM 的函数内部。 我们建议将中断向量和任何时间关键型函数调用放在 RAM_C 部分中。