我意识到 far 是特定于编译器的,但我的期望是 far 说明符的位置对于那些真正理解指针的人来说应该是有意义的。
因此,我有两个应用程序共享处理器的整个内存空间。
应用 A 需要调用应用 B 中存在的函数 foo。
我知道函数 foo 的内存位置。
所以这应该可以在应用程序 A 中工作:
typedef int (* __far MYFP)(int input);
void somefunc(void)
{
int returnvalue;
MYFP foo;
foo = (MYFP) 0xFFFFFA;
returnvalue = foo(39);
}
- __far 在 typedef 中的正确位置吗?
- 我是否需要将 __far 添加到 (MYFP) Actor 阵容中?
- 一些信息表明不需要取消对 foo 的调用,您的经验如何?
还有什么地方看起来不正确,或者我可以尝试完成它吗?
有更好的方法吗?
编辑:
这是在使用 Code Warrior 的嵌入式设备(Freescale S12XEQ 设备)上。它是一个具有 24 位存储空间的 16 位设备,所以是的,它是分段/分组的。
-亚当
最佳答案
__far
关键字,至少在 MS 世界中,用于创建使用分段内存的二进制文件。您需要了解 8086 内存系统才能理解这一点。 8086把内存分成段,每个段64K长,所以一个段中的每个地址需要16bits。地址有两种形式:近的和远的。近地址为 16 位,是当前段的偏移量,CS、DS、ES、SS 之一,具体取决于指令,远地址为 32 位,由段和偏移量组成。在 8086 中,绝对地址是 16 * 段 + 偏移量,可寻址范围为 1Mb。
如果您没有使用分段存储系统,而且看起来您没有,那么所有地址都具有相同的位数,因此不需要区分近/远,这意味着编译器可能会忽略该关键字.
关于c - 使用远函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/306017/