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.

[参考译文] TMS320F28379D:CLA memcpy

Guru**** 2328790 points
Other Parts Discussed in Thread: SYSCONFIG, C2000WARE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1510682/tms320f28379d-cla-memcpy

部件号:TMS320F28379D
Thread 中讨论的其他器件:SysConfigC2000WARE

工具/软件:

您好:

我想在闪存配置中使用 CLA

我希望将 CLA 代码从闪存复制到 RAM。

我看到此复制请求由 sysconfig 生成的 Init 函数发出:

因此、我让 SysConfig 在命令链接器文件中生成所需的符号、用于我的工程:

如您所见, CMD 文件生成 loadStart_cla1Prog ,但 cla_init()函数需要 Cla1funcsRunStart 等。

令我惊讶的是、我的示例似乎仍然有效:

- cla_led_control 是在 cla1ToCpuMsgRAM 中声明的变量

-在 CLA 的任务1中,我切换这个变量的布尔值

-在 CPU 的 cla_task1 ISR 中,我在这个变量中设置微控制器的输出

-定期在主循环的 CPU 我强制调用 CLA 感谢  cla_fforceTasks ()

即使我断开 LaunchPad 和 JTAG 与板上 DIP 开关3的连接、输出也会切换。

有人能告诉我  

为什么我的例子似乎有效?

什么是正确的方法?

提前、谢谢。

Vincent

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

    尊敬的 Vincent:  

    看起来您使用的 是 SysConfig 链接器 cmd 文件生成。 我相信它生成的符号会映射到代码中指定的预期链接器符号。 这就解释了它的工作原理。 如果您有任何疑问或问题、我建议您查看 C2000Ware 中提供的基于 SysConfig 的 CLA 示例、以了解这些函数的编写方式。 有关 SysConfig 链接器命令工具的更多信息、请查看此应用手册: https://www.ti.com/lit/an/sprad49/sprad49.pdf 

    您还可以参考此文档、其中说明了如何将 CLA 支持添加到现有示例: /cfs-file/__key/communityserver-discussions-components-files/171/CLAProjectStructureUG.pdf 

    此致、

    Ozino

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我相信它会生成映射到代码
    中指定的预期链接器符号的符号

    您好:

    首先感谢您的回答。 您发送给我的链接很有趣、我已经看过了 C2000Ware 示例。

    您所说的正是似乎没有做的事情:

    在由 SysConfig 生成的*。cmd 文件中: load_start (loadStart_cla1Prog)

    在由 SysConfig 生成并由 C2000Ware 使用的 cla_init ()中: extern uint32_t Cla1funcsRunStart

     loadStart_cla1Prog 与 Cla1funcsRunStart 之间是否存在链接 ? (我在 device.h 上查找但未找到)

    感谢你的帮助。 我真的需要理解这个问题。

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

    尊敬的 Vincent:

    我理解您的顾虑。 我将此问题重定向到 C2000Ware SysConfig 所有者、阐明如何处理这一问题。

    此致、
    Ozino

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

    您好、

    您可以在 SysConfig 生成的文件中看到、它使用 BINIT 表。 这意味着从闪存复制到 RAM 是通过 cinit 函数自动完成的。 应用程序不需要显式执行该操作。

    此致、

    Veena

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

    您好:

    您的答案似乎正是我想要的。 但我在生成的文件中看不到该表。 你能告诉我更多关于这一点吗?

    在哪里可以找到它?   cla_init()在哪里使用它?  Cla1funcsRunStart, Cla1funcsLoadStart,...是否包括在此表中?

    谢谢你。  

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

    您可以在.map 文件中的链接器生成的复制表下看到

    使用 start()和 end()添加的符号不会在该表中使用。 因此、如果要使用复制表、则不需要这些符号。

    令人遗憾的是、

    Veena

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

    Veena、

    我 在这里找到了*。map 文件和__TI_cinit_table 表。

    但你能告诉我这个表格是用来将写在闪存中的代码复制到 RAM 吗?

    查看 cla_init ()时出错:

    我似乎已执行 memcpy。 但解析器错误:定义了 CMDTOOL (可能在 device_cmd.opt 中):

    您确认了吗?

    因此、如果您使用的是复制表、则不需要这些符号

    选择不使用表的正确方法是什么?

    我真的希望我不要打扰你我的问题。

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

    BINIT 表内容作为 cint00函数本身的一部分在 main 之前复制。

    您也可以使用您自己的复制表。 在这种情况下,您需要调用 copy_in 函数来执行 copy。 如果使用的表名是 BINIT、则将其视为 pf cint00函数的一部分

    以下应用手册可能会有所帮助。

    https://www.ti.com/lit/an/spraa46a/spraa46a.pdf

    此致、

    Veena