我目前正在开发一个项目,需要从 ARM 汇编函数向 C 程序返回一个指向 double 的指针。
我目前通过将 double 插入堆栈然后返回堆栈指针的地址来解决这个问题。
但是我不确定这是否是最好(最安全)的方法,因此我在这里要求确认这是一种好方法还是替代解决方案。
另一个问题是,根据任务,我不允许传递另一个变量,也不允许我使用 C malloc 函数。
编辑:我通过在 .data 中创建一个变量解决了这个问题,然后只需返回该字段的地址即可。
最佳答案
你应该想想你将如何使用纯 C 语言!您不能在堆栈上分配double
。您可以在调用汇编函数之前保留内存。示例
void my_assembly(double* value) {
*value = (...);
}
void main(void) {
double value;
my_assembly(&value);
}
或者将其分配到汇编函数中:
double* my_assembly(void) {
double *value = malloc(sizeof(double));
*value = (...);
return value;
}
void main() {
double* value = my_assembly();
}
另一种选择是返回双倍! ARM's Procedure call Standard 5.4 结果返回
说:
A double-word sized Fundamental Data Type (e.g., long long, double and 64-bit containerized vectors) is returned in r0 and r1
关于c - ARM 汇编器返回指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48069689/