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.

[参考译文] 编译器/AM3358:将 pasm 移植到 c 代码结构定义

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/925653/compiler-am3358-porting-pasm-to-c-code-struct-definition

器件型号:AM3358

工具/软件:TI C/C++编译器

您好!  

我目前正在将功能密码程序移植到 c 代码包装程序(从而尽可能多地保留汇编器代码)

在原始程序中、结构定义如下:

.struct AppParams
u32 RunFlag
.u32 DDRBaseAddress
提供.u32 DDRBytes
u32 delayCycles
u32 numChannels
.end

我想将其移植到一个__asm____volatile (...) 格式、但我尚未成功。

我尝试了 spruhv6手册中编写的格式以及一些细微的更改。

定义可由 clpru 2.1.5编译的 asm 结构的正确格式是什么?

此致、
RENS

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

    [引用 user="Rens Baeyens"]但我尚未成功。

    请详细说明。  出什么问题了?  您看了什么?  您如何知道这是错误的?

    谢谢、此致、

    乔治

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

    尊敬的乔治:  

    感谢您的快速回复!  

    我在发布商品后取得了一些进展。

    目前、我在我的 c 包装程序中定义了 asm 结构、如下所示:

    _asm____volatile_(
    “.struct AppParams \n""
    .int RunFlag \n""
    .int DDRBaseAddress \n""
    .intDDRRBytesAvailable \n""
    .intdelayCycles \n""
    .intnumChannels \n""
    .endstruct \n")
    ; 

    这似乎没有任何错误。

    您能否确认此语法正确?

    ----------

    还有一个问题:

    在原始程序中、定义了以下内容:

    LBBO   RUN_FLAG、ADDR_PRURAM、OFFSET (AppParams.RunFlag)、4.

    我已将其移植到:

    LBBO   &RUN_FLAG、ADDR_PRURAM、OFFSET (AppParams.RunFlag)、4.

    如何替换 offset 命令?

    当前,以下错误由此行生成:

    错误! 第73行:[E0009]缺少结构/联合体成员或
    标签
    LBBO &RUN_FLAG、ADDR_PRURAM、OFFSET (AppParams.RunFlag)、4.

    第73行的注释:在符号替换后[R0001]
    线路变为:
    LBBO &R6、R16、OFFSET (AppParams.RunFlag)、4.

    错误! 第73行:[E0003]指令无效
    LBBO &RUN_FLAG、ADDR_PRURAM、OFFSET (AppParams.RunFlag)、4.

    第73行的注释:在符号替换后[R0001]
    线路变为:
    LBBO &R6、R16、OFFSET (AppParams.RunFlag)、4.

    提前感谢、

    RENS

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

    您好!

    在附件中、我放置了包装程序。

    我忘了提及有关结构定义的这一点。  

    clpru 输出结束时:

    错误! 在 EOF 上:[E0300]以下符号是
    未定义:
    DelayCycles
    RunFlag
    数字通道
    DDRBaseAddress
    AppParams
    偏移
    可提供 DDRBY

    但是、这些符号是在 file.e2e.ti.com/.../SPH0641_5F00_Beaglebone_5F00_Black.c 开头的结构中定义的

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

    虽然我不确定、但我认为您正在尝试在 C 代码和汇编代码之间共享结构定义。

    最好的方法是在 C 语言中定义结构、然后在汇编代码中使用.cdecls 指令自动继承该结构定义。  请在 PRU 汇编工具手册中搜索 标题 为"使用汇编源代码共享 C/C++头文件"的章节。  我建议您通过编写一个非常小的示例程序来学习它。  然后缓慢地将其扩展到最终程序中的工作方式。

    至于有关 offset 命令的问题... 只需编写 AppParams.RunFlag。  汇编器会将其替换为结构中该字段的偏移量。

    请告诉我这些建议是否能解决问题。

    谢谢、此致、

    乔治

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

    尊敬的乔治:

    再次感谢详细的回答。

    我本应该进一步澄清我的目的。  

    在原始程序中、结构由主内核上使用共享存储器的单独 c 程序启动和设置。

    因此、在包装程序中、我只希望能够在汇编器代码中使用它、因此不必能够在包装程序的 c 和 asm 中同时使用它。

    能否为我提供一个在__asm__(..)中定义结构的小示例? 功能?

    此致、

    感谢您的大力支持!

    RENS

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

    我看到的越多、我认为您不应在 C 语言中编写此 PRU 代码的次数就越多。 请改用汇编语言编写此代码。

    例如... 编译器支持的 asm 函数应该很少使用。  请在 PRU 编译器手册中搜索 标题 为在优化代码中使用 asm 语句时务必小心的子章节。  在这种情况下、使用 asm 来定义结构的布局毫无意义。

    请告诉我此建议是否解决了问题。

    谢谢、此致、

    乔治

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

    尊敬的乔治:

    再次感谢您的快速回复!

    我编写 C 代码 ASM 包装程序是因为我正在为控制系统开发基于通用模型的代码生成器。

    因此、生成器根据所需的平台规范开发 C 代码。 目前、发生器生成一个 C 程序、这个程序基本上是一个初始化、之后是根据一个模型定义的时序图进行的一系列读取和写入。

    据我所见、对于该平台、实现可预测的硬实时行为的最简单解决方案是通过包装已有的 ASM 代码(该代码经实践证明功能正常) 如果我要重写现有程序、我必须重新评估计时行为和可靠性。

    因此、本质上、作为我的模型的输入、我提供了一些平台规格(例如、读取时间:5ns)。 然后、这些规格与所需时序图的指定模型相结合、以生成符合平台规格和时序图的 c 程序。 在此 c 程序中、生成器定义了根据平台使用的相应头文件。 (在本例中、我在上面共享的文件)生成所有内容后、会使用适合平台的编译器对其进行编译(在本例中为 clpru)

    在 C 头文件中使用 asm 代码是否有更好的方法?

    如果没有、则当前剩余的编译错误是与定义结构相关的错误。

    感谢您的帮助!

    RENS

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

    [引用 user="Rens Baeyens"]是否有更好的方法在 C 头文件中使用 asm 代码?[/quot]

    不幸的是、不   

    TI PRU 编译器工具提供的解决方案支持开发流程、其中假定 C 代码为起点、然后从 C 代码继承汇编代码。  它不支持以汇编代码为起点的另一种工作方式。   

    谢谢、此致、

    乔治