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:DSS 执行方法并按参考传递参数

Guru**** 2524460 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1352124/tms320f28379d-dss-execute-method-and-pass-parameters-by-reference

器件型号:TMS320F28379D

我正在尝试使用 DSS 来编写单元测试。  我想测试一个简单的 C 方法:

void unpackU16(Uint16 x, Uint8 y[2])
/*!  This subroutine unpacks a 2-byte unsigned word into two
 *   unsigned bytes.
 */

{
    y[0] = (x & 0xFF00) >> 8;
    y[1] = (x & 0x00FF);

    return;
}

我通过设置"PC"寄存器手动跳转到该方法、可以在寄存器"AL"和"XAR4"中看到 x 和 y 参数:

我写入寄存器"AL"以设置 x = 0x1234。

但当我继续到方法的结尾时、y 尚未更新。

如何将 y 作为参考参数传递?  是否有某种方法需要分配一个新的栈变量并将其作为 y 传递?

谢谢!

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

    您好 Diane:

    我可以理解您要在这里完成的任务。您只是想设置作为参数传入的 y 的变量、但不会修改原始值吗? 您是否可以传入变量 y 的地址并在该地址修改存储器?

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

    Omer:

    我尝试编写一个调用该方法的 DSS 脚本、包括为 x 指定一个值、以及在方法结束时检查 y 的值。

    我不想修改 y、我想使用该方法来执行该操作、然后我想验证 y 的值是否设置正确。

    当我查看结尾处的 y 值时、它没有改变。  我猜这是因为没有将 y 分配为堆栈变量(通过引用传递)?

    谢谢!

    Diane

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

    您好 Diane:

    我不想修改 y,我想用该方法来修改 y,然后我想验证 y 的值是否设置正确。

    我不确定 我是否理解了与我所问的不同之处、 UnpackU16的用途是修改 y? 如果是这样、更好的方法是为指向数组开头的指针传入地址。 我不太熟悉这种代码如何编译、但使用指针意味着您可以修改数组的实际源代码、而不是一个副本(我不确定是否正在进行复制、但使用指针应该可以修改 y)。

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

    Omer:

    很抱歉耽误你的时间。  是的,此方法的用途是修改 y。

    我将方法签名更改为:

    void unpackU16(Uint16 x, Uint8 *y)

    我使用 DSS 来跳转到该方法、初始化 x (通过寄存器 AL)、但在我逐步介绍该方法时、y (也称为寄存器 XAR4)不会改变。

    这是因为我必须以某种方式将 y 预定义为 DSS 中的堆栈变量吗?

    谢谢!

    Diane

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

    在 DSS 中、在我通过寄存器 AL 初始化 x 后、如果我将 y (通过寄存器 XAR4)重定向到 RAM 中未使用的地址、则可以看到指定的位置已成功更新:

    debugSession.memory.writeRegister("AL", 0x1234)
    debugSession.memory.writeRegister("XAR4", 0xadd0)

    我想知道 DSS 中是否有可编程的方式来确定未使用的 RAM 地址(而不是查看.map 文件)?

    谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我想知道 DSS 中是否有可编程的方法来确定未使用的 RAM 地址(而不是查看.map 文件)?

    抱歉、没有此 DSS API。