您好,
是否有办法禁止使用PC相关表达式的指令,或某种方法(除汇编程序中的编码之外)来解决问题? 问题是我正在将在另一个项目上创建的功能下载到与在第一个项目上创建的功能不同的内存部分上进行设备和刷新。 例如,具有_eabi_mull函数的double x * 2分支的函数,但因为BL指令不在同一地址程序分支上,所以地址错误。
此致,
Ugljesa。
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.
您好,
是否有办法禁止使用PC相关表达式的指令,或某种方法(除汇编程序中的编码之外)来解决问题? 问题是我正在将在另一个项目上创建的功能下载到与在第一个项目上创建的功能不同的内存部分上进行设备和刷新。 例如,具有_eabi_mull函数的double x * 2分支的函数,但因为BL指令不在同一地址程序分支上,所以地址错误。
此致,
Ugljesa。
我很好奇为什么您没有访问此函数的源代码或目标文件的权限。 但是,现在,我只会接受它们不可用。
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