Forum: PC-Programmierung Adresse auf die ein Zeiger zeigt herausfinden


von Christian J. (Gast)


Lesenswert?

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

von Oliver (Gast)


Lesenswert?

Auf einem 32-Bit-System nur mit viel Glück.
Ansonsten per cast und Operator =

Oliver

von Christian J. (Gast)


Lesenswert?

16 Bit, Z80

von Christian J. (Gast)


Lesenswert?

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, .....)

von Christian J. (Gast)


Lesenswert?

habs schon.

adresse = (uint16_t)pointer.

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.