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.

[参考译文] MSP432P401R:禁止使用PC相关表达式的指令

Guru**** 2595800 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/636754/msp432p401r-forbidding-instructions-with-pc-relative-expressions

部件号:MSP432P401R

您好,  

是否有办法禁止使用PC相关表达式的指令,或某种方法(除汇编程序中的编码之外)来解决问题? 问题是我正在将在另一个项目上创建的功能下载到与在第一个项目上创建的功能不同的内存部分上进行设备和刷新。 例如,具有_eabi_mull函数的double x * 2分支的函数,但因为BL指令不在同一地址程序分支上,所以地址错误。

此致,

Ugljesa。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Ugljesa
    将其移至编译器论坛,他们在那里有一些专业知识来解决此问题。
    -Bob
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Ugljesa Popovic 说:
    我正在下载在另一个项目上创建的函数,以在与在第一个项目上创建的不同的内存部分上进行设备和刷新。[/QUOT]

    我认为"冲洗"是一个打字错误,您的意思是"闪光"。

    您从另一个项目获得此功能的形式是什么?  是目标文件吗?  或者什么?

    谢谢,此致,

    -George

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

    是的,闪烁:D

    我正在使用cmd文件将函数放在某个地址上... 然后我从该项目的已知地址的十六进制文件中获取该函数,然后使用RF将这些字节发送到设备,设备会在闪存的某个扇区上闪烁(:D)。  

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

    我很好奇为什么您没有访问此函数的源代码或目标文件的权限。  但是,现在,我只会接受它们不可用。

    Ugljesa Popovic 说:
    使用cmd file[/QUOT]将函数放在某个地址上

    您的意思是在链接程序命令文件中有这样的语句...

    SPECIAL_function = 0x1234; 

    然后,在您的C代码中,您使用类似的内容调用该函数...

    结果= SPECIAL_function (arg1,arg2); 

    是这样吗?  如果不是,请在这一层次详细描述您的具体做法。

    谢谢,此致,

    -George

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

    好的,我有一个大项目是在微控制器上构建和下载的。 此UC可以接收射频功能,并在将来需要时使用这些功能。 因此,在请求时,此控制器(从现在起我将其称为节点)在其闪存中没有此功能。
    我要提到的另一个项目仅用于使该功能下载到远程节点。 并且可以在cmd文件中访问。 它是main.obj的一部分。 我这样说:
    FNC1 > 0x0.1万

    main.obj(.text:FNC1)
    }
    现在,我知道,当这个项目构建时,我可以在@0x0.1万上获取该函数的十六进制代码,然后将该数据发送到远程节点,在那里他下载并在给定地址上刷新该数据。
    在这种情况下,我制作了具有双精度参数的函数,该函数被平方。
    在汇编器x*x中,必须使用_eabi_mull函数进行分支,这是通过BL指令完成的,BL指令取决于此指令的地址。 这不适合我,因为此功能下载在远程节点的不同地址上,所以使用_eabi_mull函数进行分支时出错。 所以我需要间接渠道的指令,分支机构不依赖于此指令地址。
    我的问题基本上是,是否有选项(可能是CCS上的选项)可以禁止PC相关表达式,或者在带有某些标志或其他内容的cmd文件中禁止? (但不在汇编器选项中编码,我知道一个:D)

    此致。

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

    为了确保我理解,我想用我自己的话描述您的问题。

    已下载的函数构建为在地址0x1000处运行。  它使用BL指令调用RTS函数以执行浮点乘法。  此BL指令使用PC相对寻址。  当您尝试将下载的函数放在与0x1000不同的地址时,PC相关BL不起作用。   

    您需要的是与位置无关的代码。  在Web上搜索该术语可提供大量良好的背景信息。  遗憾的是,TI MSP430编译器不支持与位置无关的代码。

    谢谢,此致,

    -George

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的,这就是问题... 好的,我只是想知道这是否可行,我只是把这个功能放在同一个地址上,但它给我带来了一些我想避免的限制。
    谢谢你。