当用汇编代码编写函数时,通过结构中定义的指针调用 C 中的函数计算
Invoking a function calculation in C through a pointer defined in a structure, when function is written in assembly code
我有一段代码,我想了解它是如何工作的。 SGENT_1_calc 是一个信号发生器函数,在别处写成汇编代码。当在 C 中调用计算时,sgen.calc(&sgen) 需要它自己的结构地址作为参数。为什么 ?
提前感谢您的帮助!
typedef struct {
unsigned int freq;
unsigned int step_max;
unsigned int alpha;
int gain;
int offset;
int out;
void (*calc)(void *);
}SGENT_1;
#define SGENT_1_DEFAULTS { 5369,
1000,
0,
0x7fff,
0,
0,
(void (*)(void *))SGENT_1_calc} // pointer casted here ???
void SGENT_1_calc(void *); //SGENT1_calc is a signal generator function
SGENT_1 sgen = SGENT_1_DEFAULTS; // this is an instance
sgen.calc(&sgen); //don't understand how the calculation is invoked,
// why it has &sgen as an argument ???
sgen.calc
是一个指向函数的指针,该函数接受一个 void *
类型的参数并且不返回任何内容。指向函数的机器代码是如何生成的是无关紧要的。在任何情况下,sgen.calc
的 value 不包含有关存储该值的变量的信息,因此如果 sgen
包含要提交给函数,那么它的 calc
成员指向该函数的事实并没有提供任何绕过(指向) struct
.
的方法
如果没有关于 sgen.calc
指向的函数的其他信息,指向 sgen
的指针与任何其他对象指针一样适合作为它的参数。选择那个特定的参数而不是任何其他参数本身并没有什么特别之处。
然而,事实上,可以合理地假设该函数假定其参数指向具有特定布局的数据结构。 C 代码暗示 type SGENT_1
与该布局一致。从提供的代码中无法确定该函数是否使用 struct
的 calc
成员,但它作为最后一个成员的位置与它没有这样做是一致的。在这种情况下,它可能仅出于组织目的而包含在 C struct
中。
我有一段代码,我想了解它是如何工作的。 SGENT_1_calc 是一个信号发生器函数,在别处写成汇编代码。当在 C 中调用计算时,sgen.calc(&sgen) 需要它自己的结构地址作为参数。为什么 ? 提前感谢您的帮助!
typedef struct {
unsigned int freq;
unsigned int step_max;
unsigned int alpha;
int gain;
int offset;
int out;
void (*calc)(void *);
}SGENT_1;
#define SGENT_1_DEFAULTS { 5369,
1000,
0,
0x7fff,
0,
0,
(void (*)(void *))SGENT_1_calc} // pointer casted here ???
void SGENT_1_calc(void *); //SGENT1_calc is a signal generator function
SGENT_1 sgen = SGENT_1_DEFAULTS; // this is an instance
sgen.calc(&sgen); //don't understand how the calculation is invoked,
// why it has &sgen as an argument ???
sgen.calc
是一个指向函数的指针,该函数接受一个 void *
类型的参数并且不返回任何内容。指向函数的机器代码是如何生成的是无关紧要的。在任何情况下,sgen.calc
的 value 不包含有关存储该值的变量的信息,因此如果 sgen
包含要提交给函数,那么它的 calc
成员指向该函数的事实并没有提供任何绕过(指向) struct
.
如果没有关于 sgen.calc
指向的函数的其他信息,指向 sgen
的指针与任何其他对象指针一样适合作为它的参数。选择那个特定的参数而不是任何其他参数本身并没有什么特别之处。
然而,事实上,可以合理地假设该函数假定其参数指向具有特定布局的数据结构。 C 代码暗示 type SGENT_1
与该布局一致。从提供的代码中无法确定该函数是否使用 struct
的 calc
成员,但它作为最后一个成员的位置与它没有这样做是一致的。在这种情况下,它可能仅出于组织目的而包含在 C struct
中。