2015-05-04 249 views
0

我將變量display_address,version,serial_no []定義爲uint8_t並將它們轉發給函數,該變量需要是指針,因此我鑄造了它(uint8_t *)變量,之後我得到警告鑄造指針警告

警告:投爲 'uint8_t *'(又名 '無符號字符*')從較小 整數類型uint8_t(又名 '無符號字符')

什麼問題,爲什麼這不會工作?

這裏是我轉發參數

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) 
+0

只是看他們作爲需要被保存到一些部門對閃存 – Lazar

回答

4

你是一個整數轉換爲指針的功能,這意味着你在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(); 
    } 
} 
+0

變量,謝謝您的幫助。 – Lazar