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.
您好!
我 一直在研究一个希望使用数字控制器库(DCL)的项目。 我已经按照用户指南 SPRUI31的指示 进行了操作、工程会编译、但调用 DCL 函数时、程序会崩溃。
我一直使用 C2000Ware 中的 PSFB 项目作为参考、以帮助我了解正在发生的情况、在查看反汇编时、我注意到一些有趣的事情。 在参考工程中、反汇编与 DCL 的.asm 文件匹配。 但是、在我的项目中、每一行之间都存在一条 ITRAP0指令。 下面是两种情况的屏幕截图。 是否有什么想法会导致差异?
我在具有相同 XDS200的 F280049上的同一硬件中运行这两个项目。 我使用的是相同版本的 CCS (10.1.1.00004)编译器(TI v20.2.1.LTS)。
如果有任何帮助或建议可以指明正确的方向、我们将不胜感激。
此致、
Luccas
显示的地址表示 DCL 函数正在 RAM 中运行。
《C2000数字控制库版本3.3用户指南》包含:
[引述]在 FPU32或 C28x 内核上运行的 DCL 函数可以分配给链接器命令文件中的特定存储器块。 通常将控制器功能置于零等待状态内部 RAM 中、因为这允许控制器功能以器件的最高速度运行。 请注意、所有 CLA 函数都必须从内部零等待状态 RAM 运行。
所有 DCL 库函数都放置在用户定义的代码段.dclfuncs 中。 下面显示了一个示例、展示了如何将此部分映射到内部 L4 RAM 存储器块中。dclfuncs:>RAML4,page = 0
另请参阅项目示例(第5章)中的链接器命令文件 F28069_DCL.cmd。 在独立应用中、代码必须存储在非易失性存储器(例如内部闪存)中、并在运行时复制到 RAM 中。 有关如何执行此操作的信息,请参阅应用手册“从 I 运行应用程序”
[/报价] [引用 userid="224716" URL"~/support/microcontrollers/c2000/f/c2000-microcontrollers-forum/985659/tms320f280049-dcl-triggering-itrap "]在参考项目中,反汇编与 DCL 的.asm 文件匹配。[/quot]我希望参考工程具有将 DCL 函数从闪存复制到 RAM 的代码、但这在您的工程中是缺失的。
您好、Luccas、
正如 Chester 指出的、您在项目(RAM)中显示的存储器范围全部为0x0000、紫色措辞仅显示参考/预期程序、蓝色指令为实际反汇编。
如果您要构建闪存程序(加载到闪存并在 RAM 中运行)、则需要将 DCL 汇编函数放入要在启动时从闪存复制到 RAM 的组中。 DCL 库将所有 asm 函数放入一个名为"dclfuncs"的段中。 您应该添加程序来复制它、也许可以与".TI.ramfunc"一起使用、如下所示。 请确保将加载和运行部分替换为您选择的部分。 谢谢。
组
{
.TI.ramfunc
Dclfuncs
}LOAD = FLASH_BANK0_SEC6、
运行= RAMGS0GS1、
Load_start (RamfuncsLoadStart)、
load_size (RamfuncsLoadSize)、
Load_End (RamfuncsLoadEnd)、
RUN_START (RamfuncsRunStart)、
run_size (RamfuncsRunSize)、
RUN_END (RamfuncsRunEnd)、
PAGE = 0、ALIGN (4)
韩文
切斯特、您好!
感谢你的帮助。 我的链接器已在链接器中正确映射、但我没有从闪存复制到 RAM。 我向器件初始化例程添加了以下 memcpy、现在 DCL 函数按预期工作。
memcpy (&isrcodefuncsRunStart、&isrcodefuncsLoadStart、
(size_t)&isrcodefuncsLoadSize);
再次感谢您的帮助!
Luccas
您好、Han、
实际上、我正在构建一个闪存程序。 我已将 dclfuncs 添加到我的链接器文件中、但在初始化期间我没有将其从闪存复制到 RAM。 在我解决这个问题后、DCL 函数按预期工作。
感谢你的帮助!
Luccas