我目前正在开发一个项目,我需要将指向ARM程序集函数的指针返回到C程序。
我目前通过将double推入堆栈然后返回堆栈指针的地址来解决此问题。
但是我不确定这是否是最好的(最安全的)方式,因此我在这里要求确认这是一个很好的方法,或者替代解决方案
另外一个问题是,根据任务,我不允许另外传递另一个变量,我也不允许使用C malloc函数。
编辑:我通过在.data中创建变量来解决问题,然后只返回该字段的地址。
答案 0 :(得分:1)
你应该想想你将如何做纯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 Result Return
说:
在r0和r1中返回双字大小的基本数据类型(例如,长长,双和64位容器化向量)