-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);
}
}
}
私はあなたの 'nvram_eeprom'関数の定義を持っていませんので、確かに言うことはできませんが、' nvram_eeprom_read_buffer'は値を返しません。さらなる助けが必要な場合は、[MCVE]を提供してください。 – kaylum
'a'はどこに定義されていますか? –
@kaylumはい、関数が戻っていないようですが、私は同じ 'nvm_eeprom_read_buffer'関数を使ってバイトを読み込みました。読み出しバイトを返し、NVMデータレジスタに格納します。検証可能な例を見ていきますが、もし私がそれを持っていれば、私はそれを参考にしています。 –