Hallo,
Ich hab ein kleines Problem mit dem Speicherzugriff mittels pointer.
Ich habe eine Struktur die ich auf ein EEPROM Speichern möchte. Anstatt
jetzt jedes Structurelement einzeln in uChar zu zerlegen und in einem
Array abzuspeichern hatte ich mir überlegt einfach mittels eines
Char-pointers durch das Array "zu wandern"
1 | typedef struct
|
2 | {
|
3 | UINT16 Cycle_Count;
|
4 | UINT16 Completed_Cycles;
|
5 | float cal_value;
|
6 | UINT16 Actual_Page;
|
7 | UINT8 Page_Position;
|
8 | } system_type;
|
9 |
|
10 | system_type System;
|
11 |
|
12 | UINT16 Address = 0;
|
13 | UINT16 Length = 0;
|
14 |
|
15 | UINT8 *pTransmit = 0;
|
16 | UINT8 *pReceive = 0;
|
17 | UINT8 *pAddress = 0;
|
18 |
|
19 | void fnStoreSystemValues (void )
|
20 | {
|
21 | Target = WRITE_SYSTEM;
|
22 | Address = 0x55AA;
|
23 | pAddress = UINT8 *) &Address;
|
24 | pTransmit = (UINT8*) &System.Cycle_Count;
|
25 | Length = sizeof(System);
|
26 | Addressing_Flag = 1;
|
27 | IE2 = UCB0TXIE; /* USCI_B0 transmit interrupt enable */
|
28 | UCB0CTL1 |= UCTR + UCTXSTT; /* start condition I2C transmit */
|
29 | while (UCB0STAT & UCBBUSY);
|
30 | }
|
In der ISR mach ich dann (unter anderem)
1 | UCB0TXBUF = *pAddress;
|
2 | IFG2 &= ~UCB0TXIFG; // USCI_B0 clear transmit interrupt flag
|
3 | Address_length--;
|
4 | if (Address_length != 0)
|
5 | {
|
6 | pAddress++;
|
7 | }
|
Der Pointer zeigt zwar auf die richtige Adresse, aber wenn ich mir am
Ozsi anschaue was übertragen wird bewegt sich der Pointer
folgendermaßen:
0x55AA wird nicht wie erwartet als 0x55 und 0xAA übertragen sondern als
0xAA und 0x55.
Ich hab jetzt schon mehrere Einstellungen probiert aber keine Lösung
gefunden.
Bei den Daten wäre es mir egal, da es sich beim zurück lesen wieder
aufheben würde, leider wird so auch die Adresse verstellt.
Gibt es dafür eine Lösung? z.b. Bytereihenfolge angeben oder so?
Danke im voraus