【问题标题】:Casting to pointer warning投射到指针警告
【发布时间】:2015-05-04 10:59:34
【问题描述】:

我将变量 display_address、version、serial_no[] 定义为 uint8_t 并将它们转发给函数,这些变量需要是指针,所以我将它转换为 (uint8_t *) 变量,然后我收到警告

警告:从较小的转换为 'uint8_t *'(又名 'unsigned char *') 整数类型 uint8_t (aka 'unsigned char')

有什么问题,为什么这不起作用?

这是我转发参数的函数

void write_to_flash (void)    {                     
BYTE i;

    iap_copy_to_flash((uint8_t *)display_address, OFFSET_ADDRESS, 1); //warning here
    delay_1_ms();
    iap_copy_to_flash((uint8_t *)version, OFFSET_VERSION, 1); //warning here
    delay_1_ms();
    for (i=0;i<8;i++)     {
        iap_copy_to_flash((uint8_t *)serial_no[i], OFFSET_VERSION+i, 1); //warning here
        delay_1_ms();
        }
    }

及iap_copy_to_flash参数说明

void iap_copy_to_flash (uint8_t* buff, uint32_t flash_addr, uint32_t num_bytes)

【问题讨论】:

  • 只是将它们视为需要保存到闪存上某个扇区的变量

标签: c embedded


【解决方案1】:

您将整数转换为指针,这意味着您将display_address 中的实际值作为指针位置传递。 99% 的情况下这是一个坏主意™,除非它是某种描述的循环转换,但我建议改为修复中间存储类型。

您应该使用&amp; 运算符来获取变量的地址:

void write_to_flash (void)    {                     
BYTE i;

iap_copy_to_flash(&display_address, OFFSET_ADDRESS, 1); 
delay_1_ms();
iap_copy_to_flash(&version, OFFSET_VERSION, 1); 
delay_1_ms();
for (i=0;i<8;i++)     {
    iap_copy_to_flash(&serial_no[i], OFFSET_VERSION+i, 1); 
    delay_1_ms();
    }
}

【讨论】:

  • 感谢您的帮助。
猜你喜欢
  • 2021-04-12
  • 1970-01-01
  • 2019-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-18
  • 1970-01-01
  • 2019-11-22
相关资源
最近更新 更多