c - 不理解从整数到更小指针错误的转换

标签 c iar 8051

我正在使用一个 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/

相关文章:

embedded - 16 位处理器的任意精度算术 (Bignum)

c - 为什么最高的元素没有返回?

c - C 程序中的功能 block 架构

c - "Refreshing"8051微 Controller :

embedded - STM32 IAR 没有 ITM 跟踪输出,除非代码中包含 printf

c - 链接器选项的顺序在 .map 文件中是否有所不同?

c - I2C 协议(protocol)如何工作

c - 从第三个连接开始Winsock错误10038

Python 与所有主要专业语言

c - 如何在不重复除法的情况下判断一个数是否为素数