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.
工具/软件:TI-RTOS
我正在尝试将闪存 API 库链接到我的应用、以访问闪存(F021_API_F2837xD_FPU32.lib)。
这 是命令文件的 SECTIONS 部分的摘录
Flash28_API:
{
-lF021_API_F2837xD_FPU32.lib<*。obj>(.text)
}
负载= FLASHD、
运行= D01SARAM、
load_start (_gFlash28ApiLoadStart)、
load_end (_gFlash28ApiLoadEnd)、
run_start (_gFlash28ApiRunStart)、
PAGE = 0
我收到以下警告"../TMS320F28377S_NO_APPL.cmd"、第116行:警告#10068-D:无匹配部分
第116行对应于指定加载库的行。
最终结果是库不会链接。
我曾在其他论坛上尝试过一些建议,但似乎没有一个可行。
许多人建议对-load 库行 none 使用不同的语法、这会有所不同
指定了链接顺序、因此先使用应用程序链接器命令文件、然后再使用其他文件。
使用 了不同的段 (ramfuncs)而不是 Flash_API)
我阅读了其他文章(几年前以及旧版本的工具和不同的 f28xxx 处理器)
CCS 中有一个错误、如果为 运行时库支持指定了自动、您可能会收到他的警告。
由于矢量表顶部加载的常量数据和 BIOS 自动生成链接器命令文件的问题、无法加载闪存 API
我已经在多个早期版本的 SYSBIOS 和多个处理器上执行了此操作。
在 F28377S 上、我尝试的操作是否不再可行?
注:
在开始之前、我为 F28377S FLASH_programming_CPU1_FLASH 构建了示例闪存应用
我能够构建并链接应用 程序、在地图中、我可以看到闪存库的加载位置。
以下是工具等的一些版本信息
SYSBIOS 版本6.42.3.35
CCS 版本6.1.1
f28377S 的控制套件器件支持版本为170 -请注意、此处指定的闪存 API 适用于 D
谢谢
Maury
Janet、
我一直在努力处理语法和 NO 段错误、这会很好。
我附加了一个 zip 文件、其中包含整个工程、因为它比尝试将其缩减更简单。
您可能唯一需要做的就是进入应用程序链接器命令文件、并注释掉 闪存和 RAM 部分中外部 RAM 的使用。
此外、在以下部分设置中添加注释以获取错误。
请注意、此时我知道我没有将此代码(Flash28_API)复制到要执行的 RAM 中、并且不确定我是否定义了足够的空间(闪存或 RAM) 但我不能错过它将尝试并链接它的点、这样我就可以确定我是否需要扩展这些内容。 我了解如何做到这一点。
/*
Flash28_API:
{
-lF021_API_F2837xD_FPU32.lib<*。obj>(.text)
}
负载= FLASHD、
运行= D01SARAM、
load_start (_gFlash28ApiLoadStart)、
load_end (_gFlash28ApiLoadEnd)、
run_start (_gFlash28ApiRunStart)、
PAGE = 0
*
如果您需要有关我在项目属性中尝试、完成或更改的内容的更多信息
谢谢
Maury
尊敬的 Maury:
我能够使用 TMS320F28377S_NO_APPL.cmd 链接器命令文件在您的工程中重现此警告。 我无法解决您项目中的问题、因此我尝试在更小、更简单的情况下重现问题。 我从 controlSUITE flash_programming_cpu01示例开始、链接器命令文件中 F021_API_F2837xD_FPU32.lib 库中的链接与您的操作非常相似:
组
{
ramfuncs
{-l F021_API_F2837xD_FPU32.lib}
}负载= FLASHD,
运行 = RAMLS03、
load_start (_RamfuncsLoadStart)、
load_size (_RamfuncsLoadSize)、
load_end (_RamfuncsLoadEnd)、
run_start (_RamfuncsRunStart)、
run_size (_RamfuncsRunSize)、
run_end (_RamfuncsRunEnd)、
PAGE = 0
此示例构建时没有任何问题。 然后、我采用了一个简单的 BIOS 程序、并将闪存编程示例合并到其中。 这也是毫无问题地构建的。 我仍然不知道您的程序有什么问题、需要更多的时间来研究。 我正在连接我的 BIOS 闪存项目、以便您可以与您的项目进行比较。
e2e.ti.com/.../8272.flash_5F00_TMS320F28377S.zip.txt
此致、
Janet
尊敬的 Maury:
我很高兴您发现了这个问题。 在转换为 C++并将 UnloadApp.cpp 文件添加到其中后、我刚刚构建了我的示例闪存项目。
我确实必须在包含头文件的周围添加#ifdef __cplulplus。 我还必须将 main.cpp 中的 pragma (从 hello.c 重命名)更改为:
#if 已定义(_cplusplus)
#pragma CODE_SECTION ("ramfuncs")
其他
#pragma CODE_SECTION (example_CallFlashAPI、"ramfuncs");
#endif
与其他 pragma 类似。
此致、
Janet
尊敬的 Maury:
查看 SysCtrlInit()的代码,我似乎不应该将该函数包含在#if 0块中。 我想在 main()中排除的是用于初始化中断矢量表的代码,因为所有这些都是由 BIOS 处理的。
注释出的 memcpy()行来自原始示例。 如果 F2837xS_SYSCTRL.c 是使用-D_FLASH 编译的、则看起来这在 InitSysCtrl()中是处理的。 InitSysCtrl()也在#ifdef _flash 块内调用 InitFlash_BANK0()。 因此需要调用 memcpy(),我想您可以选择在哪里执行它。
BIOS 引导代码定义了_c_int00。 您可以在中找到它 /packages/ti/targets/rts2800/boot_cg.asm. 您还可以在"SYS/BIOS 启动序列"一节中查看 SYS/BIOS 用户指南、以查看在进入 main()之前完成的所有操作。
此致、
Janet