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.

[参考译文] TMS320F280037:CLA 编译错误问题/ CLA编译报错问题分析 分析

Guru**** 2390755 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1397376/tms320f280037-analysis-of-cla-compilation-error-problem-cla

器件型号:TMS320F280037

工具与软件:

我们目前正在项目中编译 CLA 代码、编译器报告了错误、难以找出原因。 您能帮助我们了解一下吗?

现象1: 在 xx.cla 文件中调用7个函数参数传输时、会报告编译错误、并且函数内容已被屏蔽。

现象2:    在 xx.cla 文件中调用6个函数参数传输时、报告编译正常、并且函数内容已被屏蔽。

根据这一现象、这似乎是一个堆栈溢出错误。 如果没有被误解、则在中分配 CLA 的栈空间。 暂存段。

当传递6个参数时 ,内存分配显示仍然有充足的空间由 stack.scratchpad 段指向。

期待 TI 专家的回应。

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

    您好!

    这些函数是直接从 CLA 调用的任务吗? 或者是否事先有一些嵌套?

    请注意、在 CLA 程序中、您通常希望避免过多的嵌套函数调用、因为这会减慢 CLA 程序的速度、并且暂存区可能会溢出。 在旧版本的 CLA 外设中、最多允许两个函数调用、但 F28003x 的 CLA 上已删除此要求。

    您能否说明在将函数切换到具有7个参数时控制台中显示了什么错误消息?

    此致、

    Delaney

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

    您好、Delaney:

    感谢您回答我的问题。

    控制台上显示的错误消息与问题上显示的错误消息一致。

    该函数总共通过4层函数调用执行。 如下图所示。

    也许正如您所说的那样、传递的函数调用和参数层过多、这可能会导致 暂存区溢出。

    但是 28003x 支持超过2层的嵌套函数、暂存段指向的 RAM 存储器空间也已足够。

    我不知道还有一些其他规则限制了当前的程序编译?

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

    尊敬的 Shibo:

    您是否可以在控制台日志中向上滚动以查看是否显示任何其他错误消息? 通常、实际问题将创建自己的消息、然后在结束时显示"Target 'All ' not remaked by error (目标'All'未因错误而重制)"。  

    此致、

    Delaney

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

    让我感到困惑的是、即使我向上滑动以查看整个控制台上的所有信息、控制台上也没有其他错误消息

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

    尊敬的 Shibo:

    如果您尝试进行"重建"而不是"构建"、它是否在控制台中显示错误描述? 在不知道错误是为了什么而引发的情况下、很难准确地说发生了什么。  

    此外、 在具有6个参数的工作用例中、您是在分支到函数之前还是之后检查暂存区?

    此致、

    Delaney

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

    您好、Delaney

    我已经多次尝试"构建"和"重建"、控制台上显示的结果是一致的。

    您在上面看到的多层函数调用是因为我们使用 MATLAB 通过 MBD 自动生成代码、并且该架构决定了软件调用。 在与您沟通后、我们进行了各种尝试并最终修改了架构、以存储需要在数组中传递并传递的参数值。 生成代码后、该函数通过获取数组的第一个地址来调用参数、从而减少传递的参数数量并使编译通过。 但是、无法在之前编译它的原因尚不清楚。

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

    尊敬的 Shibo:

    我很高兴听到该计划现在正在构建。 除了解决这个问题、减少函数调用的数量也有助于提高 CLA 性能。  

    至于编译错误背后的原因、我会谘询其他专家、尝试找出根本原因。  

    此致、

    Delaney