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