Hallo, weiss jemand, wie man die physikalische Adresse auf die ein char* pointer zeigt auf eine 16 Bit Variable zuweisen kann? file.start_adress muss die Speicheradresse eines 16 Bit Raumes enthalten, auf die data zeigt, damit später das programm wieder dorthin geladen werden kann wo er herkommt. Dazu sende ich einen Header an den uC der die SD karte verwaltet. // File-header struct file_type{ uint8_t cmd; // 1) Kommando für Aktion, WR RD DL usw uint8_t type; // 1) 0 = Programm, 1 = Datensatz, 2 = ASCII uint16_t start_adress; // 2) Programm: Ursprüngliche Startadresse im Speicher (0 = keine) uint16_t end_adress; // 2) Programm: Ursprüngliche Endadresse (0 = keine) uint32_t len; // 4) Laenge des Datensatzes in Bytes uint16_t no; // 2) Nummer des Files uint8_t name[8]; // 8) Dateiname uint8_t descr[32]; // 32) Beschreibung des Files } file; char sd_write_data(char fileno, char* filename, char* filedescr, char* data, uint16_t len) { uint16_t i,crc; uint8_t resp; // Antwort des Slaves char* ptr; // Header Infos zusammenbauen file.no = fileno; // Filenummer file.len = len; // Datenlänge file.start_adress = ?????? data ????? strcpy(file.name,filename); // Dateiname strcpy(file.descr,filedescr); // Dateibeschreibung
Auf einem 32-Bit-System nur mit viel Glück. Ansonsten per cast und Operator = Oliver
Defintion des phys. RAM; Bereiches, ein Array "Overlay", was sich da drüber legt. __at (0x2000) unsigned char ram[RAM_SIZE]; // Bereich des RAM Zuweisung des zu sichernden Bereiches an einen Char pointer char* ptr = &ram[100]; Aufruf der save Routine: sd_write_data(....., ptr, .....)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.