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.

[参考译文] TMS320F280039:如何获取 FlashStateMachine.c 源文件

Guru**** 2398695 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1196148/tms320f280039-how-to-get-the-flashstatemachine-c-source-file

器件型号:TMS320F280039

专家、

我的客户在致电 Fapi_setActiveFlashBank()时报告了一个问题

因此、我想找到 FlashStateMachine.c 源文件、以帮助它们进一步调试、从而找到根本原因。

但我没有找到它。

BR

Emma

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

    尊敬的 Emma:

    遗憾的是、我们不会为客户将源代码发布到闪存 API。 请描述该问题 、以便我们可以尝试帮助进行调试。

    谢谢、
    Ibukun

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

    尊敬的 Emma:

     调用 Fapi_setActiveFlashBank()时,它们遇到了什么错误?

    请提供更多详细信息。

    谢谢、此致、
    Vamsi

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

    Vamsi、

    我们遇到的问题与中描述的问题完全相同。

    https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1171738/tms320f280049c-when-writing-the-program-i-ll-run-into-interruption-if-i-run-the-fapi_setactiveflashbank-algorithm/4463072?tisearch=e2e-sitesearch&keymatch=Fapi_setActiveFlashBank#4463072

    代码 运行“Fapi_setActiveFlashBank”算法,然后进入“ILLEGAL_ISR”。 然后添加一些应用程序代码。

    与 我们在 RAM 中运行的示例代码相比、Fapi_setActiveFlashBank 在闪存中运行。

    客户已经耗尽了 RAM、通过添加此代码将整个 Flash_API 库放入 RAM 后、他们无法构建代码。

    GROUP
       {
           .TI.ramfunc
           { -l FAPI_F28003x_EABI_v1.58.01.lib}
    
       }  LOAD = FLASH_BANK0_SEC1,
          RUN = RAMLS03,
          LOAD_START(RamfuncsLoadStart),
          LOAD_SIZE(RamfuncsLoadSize),
          LOAD_END(RamfuncsLoadEnd),
          RUN_START(RamfuncsRunStart),
          RUN_SIZE(RamfuncsRunSize),
          RUN_END(RamfuncsRunEnd),
          ALIGN(8)
    

    那么、我的问题是、这个函数 Fapi_setActiveFlashBank 是否 必须在 RAM 中运行? 因为在应用程序中添加代码之前、它们可以正常运行。

    如果是、

    是否有任何方法可以在 RAM 中放置更少的闪存 API 函数。 我们尝试了 CODE_SECTION、但失败了。

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

    尊敬的 Emma:

    您可以在外部论坛上发布此帖子吗?  不确定为什么这必须在内部论坛上。

    正如您在我们团队的轮岗天数中所知、闪存 API 不应从闪存操作所针对的同一闪存组执行。  它必须从 RAM 或不同的闪存组中执行。   

    谢谢、此致、
    Vamsi

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

    您好、Vamsi、

    感谢您的回复。  

    [引用 userid="16728" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000-microcontrollers---internal/f/c2000-microcontrollers---internal-forum/1196148/tms320f280039-how-to-get-the-flashstatemachine-c-source-file/4511006 #4511006"]Flash API 不应从目标闪存操作的同一闪存组执行。  它必须从 RAM 或不同的闪存组中执行。   [/报价]

    Fapi_setActiveFlashBank 似乎必须在 RAM 中运行、因为它会激活所有闪存组。 这也是我想要获取源代码的原因。

    困难是我不知道如何为.lib 中的某些闪存 API 函数分配单独的地址。(正常的 code_section 将会失败)如果我们使用这种方法、您能告诉我吗?

    因为整个闪存 API 需要大约5K RAM。 它太大。 即使在 F280049中、我的一些客户也会使用基于 ROM 的闪存 API 来节省 RAM。

    但 F280039中没有此选项。

    此外、客户对函数内容很好奇、如果我们将 Fapi_FlashBank1作为函数输入参数、该怎么做。

    他们还希望我们解释为什么他们能够正常地在闪存中运行所有必需的闪存 API 函数。

    BR

    Emma

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

    Emma、

    正如会议中所讨论的、我将此帖子分配给了我们的编译器团队。  请与他们讨论。

    谢谢、此致、
    Vamsi

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

    尊敬的 Emma:

    我不确定我是否遵循上述有关 RAMFUNC 使用的讨论。  

    作为参考、 C28x 编译器手册 中标题为"函数属性"的子章节介绍了"ramfunc"函数属性、该属性可用于标记要在 RAM 中运行的函数。  这与 C28x 汇编工具手册的"将函数放置在 RAM"部分配对 使用、该部分解释了放置".TI.ramfunc"部分的工作原理。  此功能将确保只有标记为"ramfunc"的函数与".TI.ramfunc"段一起放置、然后用户必须使用链接器命令文件适当放置该段。 对于基于闪存的器件、您还必须指示"table (BINIT)"、这将确保创建引导时复制表、以确保该函数在运行之前在引导时复制到 RAM。

    我在上面发布的链接器命令文件中看不到复制表。

    您能否验证您是否遵循了上述步骤?  如果是这样、到底什么情况不符合您的预期?

    谢谢

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

    Alan、

    如果我有足够的 RAM、我可以将函数放入 RAM 中。  

    问题是缺少 RAM、我想知道如何 将给定库的特定函数映射到 RAM、同时将库的其他函数映射到闪存。   

    BR

    Emma

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

    Alan、

    我的问题是、我可以将闪存 API 中的不同 obj 放入不同的存储器吗? 我似乎可以通过该链接执行它。 但我不知道如何操作?

    https://software-dl.ti.com/ccs/esd/documents/sdto_cgt_Linker-Command-File-Primer.html

    BR

    Emma

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="278152" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1196148/tms320f280039-how-to-get-the-flashstatemachine-c-source-file/4512900 #4512900"]我想知道如何 将给定库的特定函数映射到 RAM[/引用]

    请阅读文章 链接器命令文件入门的第一部分。  重点了解术语输入部分输出部分。  此帖子讨论了如何从库中的一个目标文件分配特定的输入段。  通常情况下、此输入段包含一个函数。  但情况并非总是如此。

    在同一篇文章中、搜索标题为 "将输入段从库分配到不同的加载和运行地址"的器件。  此示例接近您的情况、但不完全匹配。  您希望使用特定文件中的.text 段、而不是.const

    [引用 userid="278152" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1196148/tms320f280039-how-to-get-the-flashstatemachine-c-source-file/4512900 #4512900"]而库的其他函数映射到闪存

    确保在将库常规分配给闪存之前出现 RAM 的特殊分配。

    谢谢、此致、

    乔治