mahlzeit, ich habe ein Problem beim Verständis eines Fehlers. ich habe folgende sachen:
| 1 | typedef struct | 
| 2 | {
 | 
| 3 | uint8 messageType; | 
| 4 | uint8 messageSubType; | 
| 5 | uint16 messagesize; | 
| 6 | } message __attribute__((aligned(4))); | 
| 7 | |
| 8 | typedef struct | 
| 9 | {
 | 
| 10 | uint8 ecuNumber; | 
| 11 | uint16 aliveTime; | 
| 12 | uint16 sizeReqponseTable; | 
| 13 | uint16 sizeRequestTable; | 
| 14 | uint32 *requestTable; | 
| 15 | uint32 *responseTable; | 
| 16 | uint16 sizeReqponseTable; | 
| 17 | uint16 sizeRequestTable; | 
| 18 | } commInit; | 
| 19 | |
| 20 | |
| 21 | static void function() | 
| 22 | {
 | 
| 23 | ..
 | 
| 24 | message *msg_p | 
| 25 | |
| 26 | msg_p = (message *) getData(msg); | 
| 27 | |
| 28 | commInit *init_p = (commInit*)&msp_p[1]; | 
| 1 | static uint32 responseTable_au32[200]; | 
| 2 | static uint32 requestTable_au32[200]; | 
| 3 | |
| 4 | static void init() | 
| 5 | {
 | 
| 6 | ...
 | 
| 7 | commInit init; | 
| 8 |   ...
 | 
| 9 | init.responseTable = responseTable_au32; | 
| 10 | init.requestTable = requestTable_au32; | 
| 11 | ...
 | 
Der Fehler tritt bei commInit *init_p = (commInit*)&msp_p[1]; auf. bei der Initialisierung init.responseTable = responseTable_au32; init.requestTable = requestTable_au32; seht in init.responseTable und init.requestTable die adresse von responseTable_au32 und requestTable_au32 (32 bit-Adressen). was genau steht in &msp_p[1] ? msp_p ist doch nur ein pointer auf eine Struktur. aber was genau bewirkt [1] ? Das Problem bei commInit *init_p = (commInit*)&msp_p[1]; ist, dass danach in init_p->responseTable_au32 und in init_p->requestTable_au32 eine andere Adresse steht. Es die Adresse wie responseTable_au32 und requestTable_au32 aber als 64 bit-Adresse (mit 0 aufgefüllt) Beispiel Adresse von responseTable_au32 is 0x23232323 Bei der Initialisierung steht in init.responseTable ebenfalls 0x23232323 in init_p-responseTable steht jetzt allerdings 0x2323232300000000 Wenn ich jetzt darein schreiben möchte, kracht es natürlich. Der Code kommt von einem 32-bit system. Jetzt bauen wir aber in einem 64-bit system. kann es daran liegen? Dann hätte ich aber gedacht, dass responseTable_au32 ebenfalls schon eine 64 Bit-Adresse hat. Wie kann ich das Problem fixen? Am Code selber dürfen wir leider nichts ändern (es sei denn es muss, so wie in diesem Fall)
 Thread beobachten
 Thread beobachten Seitenaufteilung abschalten
 Seitenaufteilung abschalten