专家、
我的客户在致电 Fapi_setActiveFlashBank()时报告了一个问题
因此、我想找到 FlashStateMachine.c 源文件、以帮助它们进一步调试、从而找到根本原因。
但我没有找到它。
BR
Emma
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.
专家、
我的客户在致电 Fapi_setActiveFlashBank()时报告了一个问题
因此、我想找到 FlashStateMachine.c 源文件、以帮助它们进一步调试、从而找到根本原因。
但我没有找到它。
BR
Emma
Vamsi、
我们遇到的问题与中描述的问题完全相同。
代码 运行“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、但失败了。
您好、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:
我不确定我是否遵循上述有关 RAMFUNC 使用的讨论。
作为参考、 C28x 编译器手册 中标题为"函数属性"的子章节介绍了"ramfunc"函数属性、该属性可用于标记要在 RAM 中运行的函数。 这与 C28x 汇编工具手册的"将函数放置在 RAM"部分配对 使用、该部分解释了放置".TI.ramfunc"部分的工作原理。 此功能将确保只有标记为"ramfunc"的函数与".TI.ramfunc"段一起放置、然后用户必须使用链接器命令文件适当放置该段。 对于基于闪存的器件、您还必须指示"table (BINIT)"、这将确保创建引导时复制表、以确保该函数在运行之前在引导时复制到 RAM。
我在上面发布的链接器命令文件中看不到复制表。
您能否验证您是否遵循了上述步骤? 如果是这样、到底什么情况不符合您的预期?
谢谢
Alan、
我的问题是、我可以将闪存 API 中的不同 obj 放入不同的存储器吗? 我似乎可以通过该链接执行它。 但我不知道如何操作?
https://software-dl.ti.com/ccs/esd/documents/sdto_cgt_Linker-Command-File-Primer.html
BR
Emma
请阅读文章 链接器命令文件入门的第一部分。 重点了解术语输入部分和输出部分。 此帖子讨论了如何从库中的一个目标文件分配特定的输入段。 通常情况下、此输入段包含一个函数。 但情况并非总是如此。
在同一篇文章中、搜索标题为 "将输入段从库分配到不同的加载和运行地址"的器件。 此示例接近您的情况、但不完全匹配。 您希望使用特定文件中的.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 的特殊分配。
谢谢、此致、
乔治