2017-06-10 3 views
-1

誰かが間違っている場所を教えてください。eepromバッファを読み込もうとしましたが、このエラーが発生しました - '無効な値は無視されません'

int main (void) 
{ 

char str[16]; 
unsigned char *s; 
unsigned char i, byte; 
// extern char (*p)[]; 
char string1[16] = "9999999999"; 
char (*p)[16] = &string1; 
// uint16_t i; 
sysclk_init(); 
board_init(); 
ioport_init(); 

    LCD_pin_init(); 

    PORTC.DIRSET = PIN0_bm; 
// ioport_set_pin_dir(LED,IOPORT_DIR_OUTPUT); 

/* Insert application code here, after the board has been initialized. */ 

PORTB.OUT = eeprom_read_byte(&a[3]); 
NVM_CTRLB |= NVM_EEMAPEN_bm; 
PORTB.OUT = *(&a[3] + 0x1000); 


nvm_eeprom_erase_and_write_buffer(0x00,*p,2); 
while(1) 
{ 


> str[byte] = nvm_eeprom_read_buffer(0x00,*p,2); 
    byte++; 

    //s[0]=str; 
    //s[16]='\0'; 

    lcd_cmd(0x01); 
    lcd_select_location(0x01,0x00); 
    lcd_puts(str); 

    if(str == 0x41) 
    { 
    PORTC.OUTTGL = PIN0_bm; 
    delay_s(1); 
// ioport_set_pin_level(LED,0); 
    lcd_cmd(0x01); 
    lcd_select_location(0x01,0x00); 
    lcd_puts(s); 
    // delay_s(3); 
    } 
    } 
} 

私はエラーを取得:何をすべきか 「があるべきとして無視ない空値を」?私はxmegaコントローラからeepromデータを読み込もうとしています。私は正常に書き込みとバイトを読み取ることができますが、1つ以上のバイトを読み書きする私はエラーが発生しています。

これはバイトを返す以前の作業コードです。

#include <asf.h> 
#include <nvm.h> 
#include "LCD1/LCD_public.h" 
#include <string.h> 


    void lcd_ready(); 
    void lcd_data_out(); 
    void lcd_puts(); 

    unsigned char a[10]; 


uint8_t eeprom_read_byte(uint8_t address) 
{ 
    nvm_wait_until_ready(); 

    NVM.ADDR0 = address & 0xFF; 
    NVM.ADDR1 = (address >> 8) & 0x1F; 
    NVM.ADDR2 = 0x00; 

    NVM.CMD = NVM_CMD_READ_EEPROM_gc; 
    nvm_exec(); 

    return NVM.DATA0; 
    } 

    int main (void) 
{ 
     /* Insert system clock initialization code here (sysclk_init()). */ 
    char str[16]; 
    unsigned char *s; 
    unsigned char i, byte; 
    // extern char (*p)[]; 
     char string1[16] = "9999999999"; 
    char (*p)[16] = &string1; 
    // uint16_t i; 
     sysclk_init(); 
     board_init(); 
     ioport_init(); 

     LCD_pin_init(); 

    PORTC.DIRSET = PIN0_bm; 
    // ioport_set_pin_dir(LED,IOPORT_DIR_OUTPUT); 


     PORTB.OUT = eeprom_read_byte(&a[3]); 
     NVM_CTRLB |= NVM_EEMAPEN_bm; 
    PORTB.OUT = *(&a[3] + 0x1000); 


    nvm_eeprom_erase_and_write_buffer(0x00); 
    while(1) 
    { 
    str = nvm_eeprom_read_buffer(0x00,0x41); 
    //byte++; 

    s[0]=str; 
    s[16]='\0'; 


    if(str == 0x41) 
    { 
    PORTC.OUTTGL = PIN0_bm; 
    delay_s(1); 
// ioport_set_pin_level(LED,0); 
    lcd_cmd(0x01); 
    lcd_select_location(0x01,0x00); 
    lcd_puts(s); 
    // delay_s(3); 
    } 
    } 
} 
+0

私はあなたの 'nvram_eeprom'関数の定義を持っていませんので、確かに言うことはできませんが、' nvram_eeprom_read_buffer'は値を返しません。さらなる助けが必要な場合は、[MCVE]を提供してください。 – kaylum

+0

'a'はどこに定義されていますか? –

+0

@kaylumはい、関数が戻っていないようですが、私は同じ 'nvm_eeprom_read_buffer'関数を使ってバイトを読み込みました。読み出しバイトを返し、NVMデータレジスタに格納します。検証可能な例を見ていきますが、もし私がそれを持っていれば、私はそれを参考にしています。 –

答えて

1

あなたはnvm_eeprom_read_bufferリターンバイトのEEPROMから読み込まれ、あなたがstr[byte]にそれを割り当てることができだろうと信じているようです。それはできませんし、することはできません。その関数はvoidであり、あなたが送信したバッファに読み込みバイトを入れます(サンプルコードではp)。

あなたのコードには多くのヒックアップがありますが、それぞれ別の質問に入るはずです。

関連する問題