Forum: Mikrocontroller und Digitale Elektronik AVR32 User Page Flash auslesen Error (AT32UC3C)


von save_jeff (Gast)


Lesenswert?

Hi,

ich versuche grade die User Page zu benutzen über die flashc Bibliothek 
und ich bekomme immer eine Exception wenn ich nicht vorher in der main 
einmal einen memcpy ausführe.

zb.:
1
//uint32_t xx = 0;
2
//flashc_memcpy(AVR32_FLASHC_USER_PAGE + (16 * 4), &xx, 4,true);

 Führe ich den momcpy in einer subfunktion auf dann gibt es die selbe 
Exception
1
.org  0x008
2
  // Bus Error Data Fetch.
3
_handle_Bus_Error_Data_Fetch:
4
  rjmp $

hier ein beispielcode
1
void flash_write(uint16_t id, const uint32_t val)
2
{
3
  //while(!flashc_is_ready()) {}
4
  flashc_memcpy(AVR32_FLASHC_USER_PAGE + (id * 4), &val, sizeof(uint32_t), true);
5
}
6
7
uint32_t flash_read(uint16_t id)
8
{
9
  const unsigned volatile char *src = (unsigned char*) (AVR32_FLASHC_USER_PAGE_ADDRESS + (id * 4)); 
10
  volatile uint32_t* res;
11
  while(!flashc_is_ready()) {}
12
  memcpy32(res, src, 1);
13
  return *res;
14
}
15
16
int main (void)
17
{
18
19
//hiermit funktioniert der Code
20
//uint32_t xx = 0;
21
//flashc_memcpy(AVR32_FLASHC_USER_PAGE + (16 * 4), &xx, 4,true);
22
    
23
//hiermit funktioniert der Code nicht
24
uint32_t xx = 0;
25
flash_write(16, xx);
26
27
//Code
28
volatile uint32_t a = 0;
29
volatile uint32_t b = 0;
30
a = flash_read(0); //beim aufruf hier tritt der fehler auf
31
b = flash_read(1);
32
flash_write(0, b);
33
flash_write(1, a);



Das erscheint mit alles etwas unlogisch. ich könnte mir ja erklären dass 
ich vorher mit der memcpy funktion flags setze oder die seite buffere 
oder so, aber warum funktioniert dass dann nicht in einer subfunktion.

wäre echt cool wenn mir jm. sagen könnte wie ich den falsch richtig 
auslese

Vg. Jeff

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.