2014-06-09 17 views
0

EEPROM에서 데이터를 수신 할 때 문제가 있습니다. EEPROM 읽기 AVR

먼저 다음 코드 제작 :

#include <avr/io.h> 
#include <avr/eeprom.h> 

char  NAME[5] EEMEM = "a001"; 
char  UNIT[2] EEMEM = "C"; 
uint16_t CYCLICITY EEMEM = 2000; 

int main(void) 
{ 
    while(1) 
    { 
     //TODO:: Please write your application code 
    } 
} 

를이에서 나는 .HEX 및 .eep 파일을 추출했다. 그런 다음 avrdude를 사용하여이 파일을 작성했습니다. 먼저 나는 .har 파일 만 eerpom에 저장했기 때문에이 오류를 씁니다. w와 나는 몇 바이트를 파괴합니다. 이것은 그렇게 중요하지 않습니다. 그 후에 올바른 명령을 사용하여 글을 쓰고 다음 인쇄 화면 에서처럼 데이터의 일부를 봅니다.

dumpeeprom

나는 숫자, C 및 A001을 절약하고있다. 첫 번째 행에서 볼 수 있듯이 ..C.a001이 있습니다. 나는 9 바이트를 썼다.

이제 다른 프로그램에서! 나는이 작업을 수행하려고 :

char  EEMEM NAME[5] ; 
char  EEMEM UNIT[2] ; 
uint16_t EEMEM CYCLICITY; 

void _vReadEEPROM(char *au8Name,char *au8Unit,uint16_t *u16Cyclicity) 
{ 
    eeprom_read_block((void *)&au8Name,(const void *)NAME,5); 
    eeprom_read_block((void *)&au8Unit,(const void *)UNIT,2); 
    *u16Cyclicity = eeprom_read_word(&CYCLICITY); 
} 

parametres 글로벌 구조체에 있습니다

나는 "깨진 UART"에 보내 주의 동안
typedef struct 
{ 
    uint16_t u16Cyclicity; 
    uint16_t u16Value; 
    char  pu8Name[5]; 
    char  pu8Unit[2]; 
}EEH_layout; 

(I 그 다른 주제를 가지고) . 이 코드가 나올 때까지 USART는 좋은 가치와 쓰레기를 보냈습니다.하지만 USART는 아무 것도 보내지 않았습니다. 그리고 나는 이것이 eeprom에서 읽는 0 (널) 때문에 기인합니다. led가 깜박일 때 interupts 1 초 타이머가 있기 때문에 CPU가 작동합니다. 이것은 작동하고 있습니다, 그래서 나는 EEPORM으로부터 0을 얻었습니다.

또한 내가 EEPROM을 작성하는 방법에 대해 확신하지 못한다. EEPROM에는 많은 조정이 있지만 EEPROM을 구성하는 방법은 알려지지 않았다. 나는이 코드를 내 코드에 넣고 싶지 않습니다. 나는 eeprom에서 그들을 작성하여 혼자 쓸 것입니다!

EDIT : uint16 매개 변수는 ok입니다. UART를 통해 읽을 수 있으며 2000입니다. 그러나 문자는 ok가 아니며 null입니다.

EDIT : TEST OK, 문제는 기능 매개 변수가 정상적으로 사용되지 않는 것이 었습니다. 포인터가 잘못 초기화 되었기 때문에 * pau8Name 대신 pau8Name []을 사용하여 함수를 변경했습니다!

+0

예 데이터는 첫 번째 행에 있습니다. D0 07은 2000 년 12 월 7D0입니다. 제가 쓴 것입니다. 43 00은 C이고 \ 0, 61 30 30 31 00은 a001이며 \ 0 –

+0

입니다. UART에서 avrdude와 같은 방법으로 프로그램 자체를 16 진수 16 진수로 덤프하여 예상 한 것처럼 보이게하십시오. –

+0

나는 이것을 시도하고 있지만 성공하지는 못했다. 또한 AVR Studio에서 AVR Studio의 디버그 모드를 선택하면 eeprom에 0의 9 바이트가 있다고합니다. 0은 0입니다. –

답변

0

항상주의해야합니다!

문제는 초기화되지 않은 포인터 때문입니다. 게시물의 EDIT를 참조하십시오!