【发布时间】:2014-09-04 14:07:13
【问题描述】:
我正在开发一个 16 位指针宽度的 8051 平台。
我有一个处理闪存仿真的通用代码模块,并且有一个函数可以返回页面的 16 位起始地址:
volatile u16_t start_address = find_start_address_of_page( page );
我想将此“地址”传递给需要 u8_t* 作为参数的 CRC 函数,因此我将其转换为函数调用,如下所示:
(u8_t *)start_address
这会产生警告
警告[Pe1053]:从整数转换为更小的指针
这让我有点困惑,因为 u8_t* 是 16 位宽,而我的变量是 16 位变量。仅仅是编译器发出警告吗?关于一般的“整数到指针”转换?
代码运行良好,我只是想确定我没有遗漏一些愚蠢的东西......
【问题讨论】:
-
start_address 是一个 16 位的整数,而不是指向整数的指针。尝试使用 (u8_t *)(&start_address)
-
是的,但这不是我想要实现的——这会给我 start_address 的 address。 start_address 是地址值本身,存储为整数。
-
我明白了。您的逻辑对您的程序是正确的。但是编译器期望一个变量是指针而不是具有地址的整数值。这就是警告发生的原因。演员表已完成并按您的意愿工作,但在某些情况下这不会发生,这就是编译器向您发出此警告的原因