Forum: Mikrocontroller und Digitale Elektronik PIC18Fxx Array mit 512Bytes in Assembler


von Oli H. (lavalu)


Lesenswert?

Hallo,

ich bin soeben von C18 auf Assembler zurück/umgestiegen da mit der C18 
Code zu langsam ist. Nun verusche ich ein Array mit 512Bytes im 
Assembler einzurichten für einen 18F85J10.
Aus C18 ist mir bereits bekannt das dafür 2 Bänke im RAM mit dem 
Linkerscript zusammengefasst werden müssen. Meine Frage ist: Wie ich nun 
ein Array im Assembler declariere das auf diese zusammengefassten Bänke 
mit Namen buffer1 zugreift.
Ist es durch die Bankstruktur überhaupt möglich einen Pointer im Array 
von 0 ten Element bis zum 511 ten Element laufen zu lassen ? Oder muss 
ich zwingend zwischen den 2 Bänken umschalten?

Jetzt gehts um die Wurst...

von Frank K. (fchk)


Lesenswert?

Lies Dich mal zum Thema "Extended Instruction Mode" schlau. Dazu gibt es 
auch ein Bit in einem der Konfigurationsworte, mit dem man das erst 
einschalten muss.

fchk

von Oli H. (lavalu)


Lesenswert?

Hi Frank,

danke für die schnelle Nachricht, ich hab nochmal das Sheet studiert und 
wenn ich weiß jetzt das die SFRxH:SFRxL Register dazu benutzt werden. 
Man schreibt die RAM adress rein und setzt damit einen Pointer, der 
Inhalt des Registers auf das gepointet wird steht dann in der "Variable" 
INDFx die folglich bearbeitet werden kann. Der Pointer kann mit 
POSTDECx, POSTINCx, PREINCx un PLUSWx dann fröhlich durch den gesamten 
RAM geschoben werden ohne Bankumschalten.

Bei der declaration der Variablen mit 512 Bytes lässt sich der wohl nur 
Teilen aber mir ist immer noch unklar wie ich den declarieren kann. Denn 
obwohl die Bänke 256Bytes haben kann ich keine 256Bytes vergeben. Ich 
bin normalerweise nicht mit relocatable code unterwegs und fang damit 
erst an, ich habs auf folgende weise versucht, was aber wie gesagt 
fehlermeldungen erzeugt:

SDBUF1   udata  0x500
SDBUFL   res    255

SDBUF1 ist im Linker eine Section die ich der Bank 0x500-0x5FF zugeteilt 
hab. Aber ich bekomm immer als Antwort:

Error - section 'SDBUF1' has a memory 'BUF1' which can not fit the 
absolute section. Section 'SDBUF1' start=0x00000500, length=0x00000127.

Falls mir da noch einer auf die Sprünge helfen könnte????

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.