c - 使用远函数指针

标签 c pointers embedded function-pointers

我意识到 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/

相关文章:

c - 程序在读取输入时停止

C++ 双重比较的非常奇怪的行为

c++ - 如何在不更改cpp地址的情况下分配空间?

c++ - 存储指针值需要多少位?

c++ - 在特定内存地址创建堆,用于动态内存分配

c - 为 FSMC LCD 编写非阻塞代码

C: 使用 8 位的 char 作为一个完整的 int

c - 第一次 printf 之后它什么也不做(成功编译)

c++ - 比较指向的两个整数值

c - 将稀疏查找表映射到微 Controller 上 C 中的函数指针数组