Forum: Mikrocontroller und Digitale Elektronik ORG anweisung in C


von Sebastian (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

in anlehnung an meinen Beitrag vor einigen Tagen zum AMD NET186 Board 
(was keiner zu kennen schien) habe ich noch eine frage.
Nach vielen Stunden suchen bin ich im Webarchiv in einer version von 
2002 der AMD seite doch auf die Dateien gestoßen die ich brauche.
Ein programmierbeispiel habe ich angehängt.

Um folgendes geht es auch in meiner Frage.
Der speicher ist wie folgt auf geteilt: 0h-7ffff -> RAM; 80000h - FFFFFh 
-> ROM (Flash).

Die serielle schnittstelle nimmt die *.hex dateien (mittels MAKEHEX aus 
exe erstellt) entgegen und bringt sie an ihren Adressen im speicher 
unter.

In der Main file steht:
**  For this version of the program, I will choose to put SRAM at
**  80000h, and modify UMCS to move start of flash to C0000h.  THis is
**  because E86MON puts it's stack at the top of DRAM at 7ffffh, and 
moving
**  DRAM down would crash E86MON.
**  Note that if this code is saved in Flash by an E86MON download, it 
will
**  be saved at 80000h.  When E86MON runs it, it moves the code to DRAM 
first.
**  Then the code will make the lower part of Flash not available.  So
**  a reset must be pressed after running the code to regain access to 
the
**  lower part of Flash.

ICh kann aber nirgendwo im Programmcode irgendwas entdecken das das 
verursachen könnte (außer tonnenweise defines die ich nicht 
durchblicke).

Auch in den batchdateien nichts zu finden.

Kann mir bitte jemand erklären wie man dafür sorgt das ein C programm an 
eine bestimmte stelle im Speicher geschrieben wird? In ASM gäbe es die 
ORG direktive. Gibt es sowas ähnliches auch in C?
Aber bei einer EXE macht das ja eigentlich überhaupt keinen sinn oder?


mfg. Sebastian

von Olaf (Gast)


Lesenswert?

> Kann mir bitte jemand erklären wie man dafür sorgt das ein C
> programm an eine bestimmte stelle im Speicher geschrieben wird?
> In ASM gäbe es die ORG direktive. Gibt es sowas ähnliches auch in C?

In C uebernimmt dein Linker die Zuordnung. Da kannst du irgendwo 
festlegen wo ein bestimmtes Segment im Speicher liegen soll. Und in 
deinem Programm kann man dann mit Herstellereigenen Anweisungen 
festlegen welches Segment er gerade benutzen soll.
Mit anderen Worten Handbuch zu deinem Compiler lesen. :-)

Olaf

von Sebastian (Gast)


Lesenswert?

Danke.
Ich hatte ebenfalls den Linker im verdacht.

Der Autor hat VC++ (glaube version 6 benutzt)

Zitat aus der Batchdatei zum herstellen:


link /NOD /NOI /STACK:5120 /ONERROR:NOEXE main + pcndrv + pnpappn + 
tipleds ,ethrdemo,ethrdemo,c:\msvc\lib\oldnames.lib + 
c:\msvc\lib\llibce.lib,;

ICh sehe hier nur Stack:5120. Ich weiß zwar nicht was es bewirkt aber 
nach einer Startadresse für das programm klingt es irgendwie nicht. 
Ansonnsten konnte ich im CODE nichts entdecken. Was allerdings daran 
liegen kann das ich nicht weiß wonach ich suchen muss. HAst du 
vielleicht einen tipp. Gibts noch die msdn zu vc von vor 10 jahren ;).

Sebastian

von Klaus W. (mfgkw)


Lesenswert?

Bei VC++ kann man Anweisungen an den Linker mit #pragma-Anweisungen in 
den Quelltext einfügen:
http://support.microsoft.com/kb/153901

Vielleicht hilft es als Stichwort zur Suche.

von Sebastian (Gast)


Lesenswert?

Ja den tipp mit pragma find ich gut (kannte ich noch garnicht). Habe 
alle dateien durchsucht, nichts derartiges zu finden. gibt es noch eine 
andere möglichkeit im quelltext das festzulegen?

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.