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.

[参考译文] TMS320F28388D:有关28388D 内存分配的问题

Guru**** 2544130 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1268475/tms320f28388d-question-about-28388d-memory-allocation

器件型号:TMS320F28388D

您好、我最近一直使用28388D 进行算法计算、CPU1用于接收数据并通过 IPC 将数据发送给 CPU2、CPU2执行实时算法更新迭代、 但当我使用它时会出现以下问题,我设置的变量 START_FLAG 不能被分配一个值,请问这种情况的原因是什么,期待收到您的消息!

//读取命令
//
IPC_readCommand (IPC_CPU2_L_CPU1_R、IPC_FLAG0、IPC_ADDR_CORRECTION_ENABLE、
命令、地址、数据(&D);

if (command == IPC_CMD_READ_MEM)
{
status = true;

//
//读取和比较数据
//
for (I=0;I<数据;I++)
{
recbuf[i]=*(uint32_t *) addr + i);
GPIO_writePin (DEVICE_GPIO_PIN_IPC、0);
if (recbuf[i]== 0x23)
{
START_FLAG = 1;

if (START_FLAG)
{
if (recbuf[i]== 0)
{
继续;

if (recbuf[i]== 0x2C)
{
start_cnt++;

if (recbuf[i]== 0x0A && start_cnt >= 18)
{
CPU2_flag=1;
start_cnt=0;
START_FLAG=0;
中断;



GPIO_writePin (DEVICE_GPIO_PIN_IPC、0);

是否存在内存分配问题?

非常感谢!

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

    您好!

    您能否显示 START_FLAG 的声明? 您是否能够使用 CPU1更改 START_FLAG 的值?

    此致、

    本·科利尔

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

    START_FLAG 仅是一个字符类型变量、可以在 CPU1中分配、此外、CPU1和 CPU2具有通用 RAM 的一部分、RAMGS0~RAMGS15、但我在 CPU2的 CMD 文件中更改了这部分的起始位置和大小、 但 CPU1中的 CMD 文件仍然是默认文件、它与这有什么关系吗? 如下图所示

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

    我不确定更改 RAM 大小是否会导致问题、但我会进行研究。 您可以检查 start_flag char 存储在哪里吗? 您还可以使用此行将变量存储在特定位置:  

    此致、

    本·科利尔

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

    大家好、在这里设置 start_FLAG 时应该没有任何问题、我的程序设置了大量的全局变量、占用了我的大量片上 RAM、如下所示

    当我在程序中添加上述代码行时、无法正确分配 START_FLAG、我检查了两者之间的存储器地址、 而且没有冲突、同样的方式、我注释掉了这行代码、程序可以恢复正常、就像我的程序已达到内存调用阶段的极限!

    在这里、我还有很多剩余内存? 你认为这可能的原因是什么?

    非常感谢。

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

    请将其提交给我们的编译器团队。

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

    对于包含以下代码的源文件...

    Unknown 说:
    if (recbuf[i]== 0x23)
    {
    START_FLAG = 1;

    if (START_FLAG)
    {
    if (recbuf[i]== 0)
    {
    继续;
    }

    ...  请按照 如何提交编译器测试用例一文中的说明进行操作

    谢谢。此致、

    -乔治

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

    e2e.ti.com/.../CPU1main.pp.txte2e.ti.com/.../CPU2main.pp.txt

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

    对于此源代码...

    Unknown 说:
    if (recbuf[i]== 0x23)
    {
    START_FLAG = 1;

    if (START_FLAG)
    {
    if (recbuf[i]== 0)
    {
    继续;

    if (recbuf[i]== 0x2C)
    {
    start_cnt++;

    if (recbuf[i]== 0x0A && start_cnt >= 18)
    {
    CPU2_flag=1;
    start_cnt=0;
    START_FLAG=0;
    中断;
    }

    ... 我想将其编译为汇编代码、然后检查是否存在可能的问题。  很遗憾、我无法对您提交的代码执行此操作、因为不存在这些代码行。

    我还需要所有构建选项、就像编译器看到的那样。  和编译器的版本。

    所有这些详细信息都在 如何提交编译器测试用例一文中。  请按照文章中的说明提交所有这些详细信息。

    谢谢。此致、

    -乔治

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

    大家好、我根据如何提交编译器测试用例中的说明生成了相应的.pp 文件、但文件无法上传、我修改了文件后缀.txt、您只需要将其改回来!
    非常感谢!

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

    很遗憾,我没有在你的最后一篇文章中看到附件。  有关附加文件的详细信息、请参阅 此常见问题解答

    谢谢。此致、

    -乔治

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

    我的问题已经解决、RAMGS0~RAMGS15是 CPU1和 CPU2之间的共享存储器、但该段默认分配给 CPU1、我使用了 MemCfg_setGSRAMControllerSel (MEMCFG_SECT_GSx、MEMCFG_GSRAMCONTROLLER_ CPU2)函数将该段中的存储器分配给 CPU2、问题得到了解决。
    非常感谢!