投射到指针警告
Casting to pointer warning
我将变量 display_address、版本、serial_no[] 定义为 uint8_t 并将它们转发给函数,变量需要是指针,所以我将其转换为 (uint8_t *) 变量,之后我收到警告
warning: cast to 'uint8_t *' (aka 'unsigned char *') from smaller
integer type 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)
您正在将整数转换为指针,这意味着您将 display_address
中的实际值作为指针位置传递。这在 99% 的情况下都是一个坏主意™,除非它是某种描述的循环转换,但我建议改为修复中间存储类型。
相反,您应该使用 &
运算符来获取变量的地址:
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();
}
}
我将变量 display_address、版本、serial_no[] 定义为 uint8_t 并将它们转发给函数,变量需要是指针,所以我将其转换为 (uint8_t *) 变量,之后我收到警告
warning: cast to 'uint8_t *' (aka 'unsigned char *') from smaller integer type 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)
您正在将整数转换为指针,这意味着您将 display_address
中的实际值作为指针位置传递。这在 99% 的情况下都是一个坏主意™,除非它是某种描述的循环转换,但我建议改为修复中间存储类型。
相反,您应该使用 &
运算符来获取变量的地址:
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();
}
}