我正在使用一个 16 位指针宽度的 8051 平台。
我有一个用于处理闪存仿真的通用代码模块,并且有一个返回页面的 16 位起始地址的函数:
volatile u16_t start_address = find_start_address_of_page( page );
我想将此“地址”传递给需要 u8_t* 作为参数的 CRC 函数,因此我将其转换为函数调用,如下所示:
(u8_t *)start_address
这会产生警告
Warning[Pe1053]: conversion from integer to smaller pointer
这让我有点困惑,因为 u8_t* 是 16 位宽,而我的变量是一个 16 位变量。是否只是编译器警告关于一般的“整数到指针”转换?
代码工作正常,我只是想确定我没有遗漏一些愚蠢的东西...
最佳答案
您写道您的 8051 平台具有 16 位指针宽度。
据我所知,8051 有不同的地址范围 - 处理器中的内部 RAM(最大 256 字节) - 外部 RAM(最大 64k) - 程序内存(最大 64k)
因此,我使用过的编译器 (Keil) 至少有四种不同的指针类型。 内部 RAM 的 8 位宽“数据”指针。 用于外部 RAM 的 16 位宽“xdata”指针。 程序存储器的 16 位宽“代码”指针。 一个 24 位宽的通用指针,可以设置为指向三种内存类型中的任何一种。第一个字节用于选择内存类型。
警告文本可能意味着编译器想要将您的 16 位值转换为内部 RAM 中只有 8 位宽的地址。
关于c - 不理解从整数到更小指针错误的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25667615/