Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在像8051这样的8位微控制器上,指针的大小是多少?_C_Pointers_Embedded_Memory Address_8051 - Fatal编程技术网

C 在像8051这样的8位微控制器上,指针的大小是多少?

C 在像8051这样的8位微控制器上,指针的大小是多少?,c,pointers,embedded,memory-address,8051,C,Pointers,Embedded,Memory Address,8051,我们知道指针的大小取决于地址总线,所以像8051这样的8位微控制器上指针的大小是多少?一个兼容的C编译器要求size_MAX至少为65535(0xFFFF)。这意味着对象指针必须至少为16位 考虑到架构,它不太可能有更宽的指针,但可以。它不仅取决于处理器,还取决于编译器和目标平台及其内存。扩展的8051系列包括32位机器 请注意,对象指针和函数指针的宽度可能不同。符合要求的C编译器要求SIZE_MAX至少为65535(0xFFFF)。这意味着对象指针必须至少为16位 考虑到架构,它不太可能有更宽

我们知道指针的大小取决于地址总线,所以像8051这样的8位微控制器上指针的大小是多少?

一个兼容的C编译器要求
size_MAX
至少为65535(0xFFFF)。这意味着对象指针必须至少为16位

考虑到架构,它不太可能有更宽的指针,但可以。它不仅取决于处理器,还取决于编译器和目标平台及其内存。扩展的8051系列包括32位机器


请注意,对象指针和函数指针的宽度可能不同。

符合要求的C编译器要求
SIZE_MAX
至少为65535(0xFFFF)。这意味着对象指针必须至少为16位

考虑到架构,它不太可能有更宽的指针,但可以。它不仅取决于处理器,还取决于编译器和目标平台及其内存。扩展的8051系列包括32位机器


请注意,对象指针和函数指针可能具有不同的宽度。

stdint.h施加的限制包含独立实现和托管实现中的常量
INTPTR_MIN/INTPTR_MAX
4.一致性,ISO/IEC 9899:

7.18整数类型

如果你有一个地址总线为8的异国处理器,你不能在它上面实现C,但是这样的处理器肯定不存在

如果处理器的总线宽度为16位,数据总线为3位,则可以实现C抽象机强加的数据类型,但对每个操作使用许多回迁


此外,在异国情调的体系结构上,抽象C机器的位与物理线路之间不是直接对应(同构)。某些导线可能不使用,其他导线可能保留更正代码,其他导线可能生成陷阱表示。在这样的体系结构上,更难实现C。

stdint.h施加的限制包含独立和托管实现中的常量
INTPTR_MIN/INTPTR_MAX
4.一致性,ISO/IEC 9899:

7.18整数类型

如果你有一个地址总线为8的异国处理器,你不能在它上面实现C,但是这样的处理器肯定不存在

如果处理器的总线宽度为16位,数据总线为3位,则可以实现C抽象机强加的数据类型,但对每个操作使用许多回迁


此外,在异国情调的体系结构上,抽象C机器的位与物理线路之间不是直接对应(同构)。某些导线可能不使用,其他导线可能保留更正代码,其他导线可能生成陷阱表示。在这样的体系结构上,实现C更为困难。

8051不是一个C友好的处理器

它有几个地址空间。我广泛使用Keil8051编译器,它有几种指针类型

  • 指向内部内存空间或内部间接空间的8位指针
  • 指向外部ram或代码空间的16位指针
  • 可以指向任何地方的“智能”24位指针。基本上是一个后跟16位的标签
所有这些都没有增加银行转换方案的复杂性,这使得事情变得更加“有趣”


智能指针应该避免,因为它们又大又慢。

8051不是一个C友好的处理器

它有几个地址空间。我广泛使用Keil8051编译器,它有几种指针类型

  • 指向内部内存空间或内部间接空间的8位指针
  • 指向外部ram或代码空间的16位指针
  • 可以指向任何地方的“智能”24位指针。基本上是一个后跟16位的标签
所有这些都没有增加银行转换方案的复杂性,这使得事情变得更加“有趣”


智能指针在哪里应该避免,因为它们又大又慢。

这取决于哪个编译器、使用哪个编译命令以及针对哪个操作系统体系结构。此外,指针的大小是32位还是64位取决于我提到的内容,而不取决于您提到的内容。8051有一个16位地址总线和一个名为
DPTR
@DMaster的16位指针寄存器不,它确实没有。在任何8051实现中,指针总是16位。也许读一下这个问题。@Lundin谢谢你纠正我。我忘了16位arch也存在:)我曾经使用过8051编译器,其中
char*
是3个字节。(17个值位)这取决于哪个编译器、使用哪个编译命令以及针对哪个操作系统体系结构。此外,指针的大小是32位还是64位取决于我提到的内容,而不取决于您提到的内容。8051有一个16位地址总线和一个名为
DPTR
@DMaster的16位指针寄存器不,它确实没有。在任何8051实现中,指针总是16位。也许读一下这个问题。@Lundin谢谢你纠正我。我忘了16位arch也存在:)我曾经使用过8051编译器,其中
char*
是3个字节。(17个值位)您好,您是否见过一个处理器在N条线路上有一条总线,其中C编译器没有使用所有N条物理线路实现C抽象机,并且在执行C程序时,总线的N条线路中有一些是虚拟的?实际上是的,8051。这不是一个“C”问题。这是一个8051问题。给定一个不错的16位扩展数据指针,该指针没有访问数据、IDATA或代码空间的值。您需要不同类型的指针,或者所谓的慢速、大型、智能指针。要理解这一点,您需要深入了解8051。Th
7.18.2.4 Limits of integer types capable of holding object pointers
— minimum value of pointer-holding signed integer type
INTPTR_MIN                           −(2^15 − 1)
— maximum value of pointer-holding signed integer type
INTPTR_MAX                            2^15 − 1
— maximum value of pointer-holding unsigned integer type
UINTPTR_MAX                           2^16 − 1