Home

DOWNLOAD CESY 8 Handbuch

image

Contents

1. unsigned char foo char i reentrant int j 0 static data at 0x31 unsigned char k Hier wird f r jeden Aufruf der Funktion neuer Platz f r die bergebene Variable i und die lokale Variable j geschaffen Die Variable k liegt an einer bestimmten Adresse und muss statisch gebunden werden 87 6 Der C Compiler Es ist unn tig zu erw hnen dass der Platz auf dem Stack knapp ist und reentrante Funktionen nur sparsam verwendet werden sollten An die Programmierung rekur siver Funktionen zu denken verbietet sich von selbst Parameter d rfen niemals als bestimmte Speicherklasse bergeben werden Ihr Da tentyp ergibt sich aus dem verwendeten Speichermodell und aus den Reentranz Optionen 6 7 5 Overlaying Um Speicherplatz im internen RAM zu sparen versucht der Compiler lokale Vari ablen die keiner Speicherklasse zugewiesen wurden und Parameter wiederzuver wenden Dazu werden diese Daten in einem Speicherbereich abgelegt der berla gert werden kann Overlaying Ein Aufruf einer anderen Routine berlagert dann diese Daten Dies gilt nur f r das small Speichermodell Es schr nkt das oben gesagte ber statisch gebundene Variablen ein Eine echte statische Bindung ohne Overlaying erfolgt daher nur mit dem reservierten Wort static Uber die Direktive pragma nooverlay kann das Overlaying abgeschaltet werden Beispiel pragma save pragma nooverlay void set_error unsigne
2. e Undefined Label Error ein GOTO oder GOSUB Befehl hat ein Sprungziel angegeben das nicht definiert wurde e Syntax Error diesen Befehl gibt es nicht e String constant exceeds line Error eine Stringkonstante bei einen PRINT Befehl darf maximal 64 Zeichen lang sein und muss auf beiden Seiten mit einem Anf hrungszeichen abgeschlossen werden e Hex constant too long Error eine hexadezimal angegebene Konstante darf aus maximal 6 Zeichen bestehen e Illegal expression Error ein arithmetischer Ausdruck ist in dieser Form nicht zul ssig e Missing bracket Error eine Klammer fehlt e Input without reference Error ein INPUT Befehl wei nicht in welche Variable das Ergebnis geschrieben werden soll e Illegal label definition Error ein Label darf so nicht definiert werden e Illegal Character in label Error ein Label darf nur aus den Zeichen A Z 0 9 _ bestehen e Label defined twice Error ein Label darf nur einmal definiert werden um eine eindeutige Zuweisung zu erm glichen e NEXT without FOR Error der Compiler wei nicht was er mit dem einsamen NEXT tun soll e NEXT without variable Error der NEXT Befehl ist nur mit einer Bezugsvariablen g ltig 77 5 BASIC Compiler e Too many nested IFs Error maximal 20 IF Anweisungen k nnen verschach telt werden e Too many nested REPEATs Error maximal 20 REPEAT Anweisungen k nnen verschachtelt werden e IF without ENDIF Error zu einer IF
3. lt lt lt expression gt lt sym gt lt sym gt 1 lt for body gt e The lt for body gt does not contain continue or break e All goto s are contained within the loop e No function calls within the loop e The loop control variable lt sym gt is not assigned any value within the loop e The loop control variable does NOT participate in any arithmetic operation within the loop e There are NO switch statements in the loop 8 1 6 Algebraic Simplifications SDCC does numerous algebraic simplifications the following is a small sub set of these optimizations i j t 0 changed to iss i 2 changed to i gt gt 1 i j ji changed to i 103 i j 1 changed to i Note the subexpressions given above are generally introduced by macro expansions or as a result of copy constant propagation 8 1 7 switch Statements SDCC changes switch statements to jump tables when the following conditions are true e The case labels are in numerical sequence the labels need not be in order and the starting number need not be one or zero switch i switch i case 4 case 0 case 5 case 1 case 3 case 2 case 6 case 3 62 8 1 OPTIMIZATIONS CHAPTER 8 SDCC TECHNICAL DATA Both the above switch statements will be implemented using a jump table The example to the right side is slightly more efficient as the check for the lower boundary of the jump table is not
4. tik sind gegen ber Assembler nur geringe Geschwindigkeitsnachteile zu erwarten Nun zum Programm Zun chst ist wieder der Ausgabepin zur ckzusetzen und der Timer zu initialisieren clear 144 7 openclk Dann wird auf die gedr ckte Taste an P1 0 gewartet poll_1 ifs check 144 0 1 goto poll_1 Der ifs Befehl wirkt sich brigens im Gegensatz zu if nur auf die in der selben Zeile folgenden Kommandos aus Einschalten verz gern und ausschalten set 144 7 delay 10 clear 144 7 17 2 Installation und erste Schritte Insbesondere der delay Befehl erlaubt f r die meisten BASIC Programme ausreichen Jetzt noch darauf warten dass die Taste wieder losgelassen wird und dann wieder von vorne anfangen poll 2 ifs check 144 0 0 goto poll 2 goto poll 1 Fertig Sie sollten das Programm nun abspeichern Stellen Sie bitte den Dateityp auf BASIC ein Wenn Sie das Programm das n chste Mal laden wird das automati sche Einriicken sofort deaktiviert Das Compilieren des Programms erfordert eini ge Einstellungen die im Dialogfenster Optio nen BASIC angegeben werden miissen Die meisten Einstellungen sind n tig da das BASIC ja Hardware Funktionen unterst tzt die bei ver schiedenen Controllerboards unterschiedlich sein k nnen F r dieses Programm ist insbeson dere die richtige Einstellung der Quarz Frequenz wichtig denn diese bestimmt die Ge nauigkeit der Echtzeituhr Da die Uhr im Pr
5. Die erste Zeile deckt den gesamten Wertebereich ab Wenn der Wert im unteren Viertel lag wird eine genauere Messung im Bereich 0 25 genommen 5 4 10 Flash Programmierung nur mit LAB 537 e POKEF adresse byte Schreibt ein Byte an die spezifizierte Adresse im Flash EPROM unseres LAB537 e PEEKF adresse Liest ein Byte von der spezifizierten Adresse im Flash EPROM des LAB537 Beispiel Ausgabe POKEF 0734F0 80 PRINT PEEKF 0734F0 128 Beachten Sie bitte dass dieser Befehl explizit auf den Flash Speicher unseres LAB537 Mikrocontrollersystems abgestimmt ist Da nach jedem 16kB Block ein Block von 256 Byte folgt der nicht benutzt werden kann erfolgt eine Adresskorrek tur Daher reicht der ansprechbare Bereich nur von 000000h bis O7DFFF Wie in jedem EPROM k nnen nur Bits von 1 auf 0 programmiert werden nicht umgekehrt Wird dies trotzdem versucht kann der Flash Baustein einen unkontrol lierten Zustand annehmen Testen Sie bitte vor Beschreiben ob die Speicherzelle leer FF ist 68 5 4 BASIC Referenz e ERASEF L scht den gesamten Flash Speicherbaustein Beispiel ERASEF DELAY 100 Auch dieser Befehl ist explizit auf den Flash Speicher unseres LAB537 Mikrocont rollersystems abgestimmt Nach diesem Kommando muss 10 Sekunden gewartet werden bis der Flash Baustein wieder angesprochen wird Diese Zeit ben tigt das IC intern zum L schen des Speichers Der Befehl selbst wird in der blichen Zeit aus
6. Hilfe Abbruch Die Installation ist damit abgeschlossen Je nachdem welche Nutzer Berechtigungen gesetzt sind kann es vorkommen dass einige Dateien nicht automatisch kopiert werden Kopieren Sie gegebenenfalls dann selbst per Explorer oder DOS Fenster die ent sprechenden Dateien in den CESY Ordner und ggf die BWCC DLL in den Win dows Systemordner Abbildung 1 Installation 2 1 3 Installation unter Virtual PC CESY wurde unter dem Gesichtspunkt h chster Systemkompatibilit t entwickelt und l uft daher auch unter Virtual PC auf verschiedenen Host Systemen Garantiert wird die Lauff higkeit unter Apple OS X da auf diesem System eine Vielzahl von Tests durchgef hrt wurde Hier ist insbesondere auf die Anbindung der seriellen Schnittstelle zu achten Zielsysteme k nnen problemlos ber zugewiesene integrier te oder externe RS 232 Schnittstellen angesprochen werden G ngige USB RS232 Adapter funktionieren in der Regel gut wenn die entsprechenden Treiber auch auf dem Gastsystem installiert werden 2 1 4 Update Installation Installieren Sie ein eventuelles Update bitte grunds tzlich in einen neuen Ordner Sie k nnen im Nachhinein dann per Explorer die Ordner umbenennen So wird vermieden dass Ihre Quelltexte berschrieben werden 2 2 Installation des C Compilers CESY stellt eine graphische Benutzeroberfl che f r den Open Source C Compiler SDCC dar SDCC steht f r Small Device C Compiler also C Compil
7. Installieren Sie diese wie oben beschrieben Vergessen Sie nicht die CESY Startup Dateien neu zu installieren 7 4 Bug gefunden Leider kann es nicht ausgeschlossen werden dass ein ausgeliefertes Programm noch Bugs enth lt Falls Sie einen solchen finden bitten wir Sie uns diesen schriftlich per Post oder e mail zu melden Wir werden den Fehler schnellstm glich beheben und Ihnen eine korrigierte Version kostenlos zusenden Bitte geben Sie folgende Informationen an damit wir den Fehler reproduzieren k nnen e Name Adresse Kunden Nummer Kaufdatum e Seriennummer e Betriebssystem e Controllersystem evtl Schaltplan e CESY H ndler e Controllersystem H ndler e evtl Schaltplan des seriellen Kabels e detaillierte Beschreibung des Fehlers 93 8 Der Befehlssatz des 80x51 8 Der Befehlssatz des 80x51 Die Assembler Befehle sind f r alle Prozessoren der 80x5ler Familie iden tisch 8 1 1 Transferbefehle fur Register und internes RAM MOV A Rr MOV Rr A MOV A Ri MOV Ri A MOV A dadr MOV dadr A MOV A konst8 MOV dadr konst8 MOV Rr konst8 MOV Ri konst8 MOV Rr dadr MOV dadr Rr MOV Ri dadr MOV dadr Ri MOV dadri1 dadr2 MOV DPTR konst16 XCH A Rr XCH A Ri XCH A dadr XCHD A Ri PUSH dadr POP dadr 8 1 2 Transferbefehle f r externes RAM und ROM MOVX A Ri MOVX Ri A MOVX A DPTR MOVX DPTR A MOVC A A PC MOVC A A DPTR 8 1 3 Logik Befehle ANL A Rr ANL A Ri ANL A dadr ANL dadr
8. MUST explicitly include ret or reti in _naked function The related directive pragma exclude allows a more fine grained control over pushing amp popping the registers While there is nothing preventing you from writing C code inside a _naked function there are many ways to shoot yourself in the foot doing this and it is recommended that you stick to inline assembler 37 3 13 INTERFACING WITH ASSEMBLER CODE CHAPTER 3 USING SDCC 3 12 3 Use of Labels within Inline Assembler SDCC allows the use of in line assembler with a few restrictions regarding labels In older versions of the compiler all labels defined within inline assembler code had to be of the form nnnnn where nnnn is a number less than 100 which implies a limit of utmost 100 inline assembler labels per function _asm mov b 10 000018 djnz b 00001 _endasm Inline assembler code cannot reference any C Labels however it can reference labels defined by the inline assem bler e g foo some c code _asm some assembler code ljmp 0003 _endasm some more c code clabel inline assembler cannot reference this label _asm 0003 label can be referenced by inline assembler only _endasm some more c code In other words inline assembly code can access labels defined in inline assembly within the scope of the function The same goes the other way i e labels defines in inline assembly can not be accessed by C statements
9. NOT used pragma nojtbound can be used to turn off boundary checking for jump tables for a given function only noloopreverse Will not do loop reversal optimization nolabelopt Will not optimize labels makes the dumpfiles more readable no xinit opt Will not memcpy initialized data from code space into xdata space This saves a few bytes in code space if you don t have initialized data nooverlay The compiler will not overlay parameters and local variables of any function see section Parameters and local variables for more details no peep Disable peep hole optimization peep file lt filename gt This option can be used to use additional rules to be used by the peep hole optimizer See section 8 1 12 Peep Hole optimizations for details on how to write these rules peep asm Pass the inline assembler code through the peep hole optimizer This can cause unexpected changes to inline assembler code please go through the peephole optimizer rules defined in the source file tree lt target gt peeph def before using this option 23 3 2 COMMAND LINE OPTIONS CHAPTER 3 USING SDCC 3 2 8 Other Options c compile only will compile and assemble the source but will not call the linkage editor clmode reads the preprocessed source from standard input and compiles it The file name for the assembler output must be specified using the o option E Run only the C preprocessor Preprocess all the C source files specifie
10. Reducing the size of division multiplication amp modulus operations can reduce code size substantially Take the following code for example foobar unsigned int pl unsigned char ch unsigned char chl pl ch For the modulus operation the variable ch will be promoted to unsigned int first then the modulus operation will be performed this will lead to a call to support routine _moduint and the result will be casted to a char If the code is changed to foobar unsigned int pl unsigned char ch o unsigned char chl unsigned char pl ch It would substantially reduce the code generated future versions of the compiler will be smart enough to detect such optimization opportunities Have a look at the assembly listing to get a feeling for the code generation Tools included in the distribution Name Tink gb780 Documentation included in the distribution sdechdoch Software simulator for microcontrollers sdec sim ucsim doc index html Temporary notes on the pic16 port sdec sre pic16 NOTES SDCC internal documentation debugging file format sdec doc cdbfileformat pdf Notes on debugging with sdcdb sdcc debugger README 56 6 3 RELATED OPEN SOURCE TOOLS CHAPTER 6 TIPS 6 3 Related open source tools Name Where to get gpsim PIC simulator http www dattalo com gnupic gpsim html gputils GNU PIC utilities http gputils sourceforge net fIP5 PIC programmer http digil
11. To prevent this no single register bank should be used by both a high priority and a low priority ISR This is probably most easily done by having all high priority ISRs use one bank and all low priority ISRs use another If you have an ISR which can change priority at runtime you re on your own I suggest using the default bank zero and taking the small performance hit It is most efficient if your ISR calls no other functions If your ISR must call other functions it is most efficient if those functions use the same bank as the ISR see note below the next best is if the called functions use bank zero It is very inefficient to call a function using a different non zero bank from an ISR 2possible exception if a function is called ONLY from interrupt functions using a particular bank it can be declared with the same using attribute as the calling interrupt functions For instance if you have several ISRs using bank one and all of them call memcpy it might make sense to create a specialized version of memcpy using 1 since this would prevent the ISR from having to save bank zero to the stack on entry and switch to bank zero before calling the function 34 3 11 STARTUP CODE CHAPTER 3 USING SDCC 3 11 Startup Code 3 11 1 MCS51 DS390 Startup Code The compiler inserts a call to the C routine _sdcc_external_startup at the start of the CODE area This routine is in the runtime library By default this routine
12. den Befehl gesetzt und dem Aufruf wird einfach eine Konstante addiert Zugriffe auf Tabellen werden immer auf den Anfang der Tabelle umgerechnet auch hier wird im Quelltext zum Label eine Konstante addiert Au erdem werden Zugriffe auf SFR Register immer per Label adressiert Leider ist es f r die 80x51 Sprache nicht m glich eine automatische Tabellener kennung zu programmieren da jeder Code von 0 bis FF einen Befehl darstellt Sie m ssen also wissen wo sich Tabellen befinden Schauen Sie sich im Monitor dazu den Code Ihres Programms genau an Logische Zahlenfolgen ASCII Zeichenfolgen die W rter bilden oder unsinnige Befehlsfolgen weisen meist auf eine Tabelle hin Auch der Reassembler wird durch den aktiven Prozessor Modus beeinflusst Je nach Modus werden die passenden SFR Labels erzeugt 3 8 1 Bedienungsschritte e Laden Sie den Programmcode in den Codespeicher Meist liegt der Code als Hexcode oder Bin rcode vor Ist letzteres der Fall so ist es unbedingt erforder lich dass die richtige Startadresse angegeben wird da sonst viele Spr nge nicht symbolisch adressiert werden k nnen e Sehen Sie im Monitor nach ob Sie Tabellen finden k nnen und notieren Sie gegebenenfalls Start und Endadresse und ob die Tabelle als Bytefolge oder als ASCU Zeichen im Programmtext erscheinen sollen e W hlen Sie im Assembler Men den Reassembler Befehl e Es erscheint ein Fenster in dem Sie Tabellen und Textbereiche erfassen k n ne
13. 8 1 7 nooverlay the compiler will not overlay the parameters and local variables of a function less_pedantic the compiler will not warn you anymore for obvious mistakes you r on your own now noloopreverse Will not do loop reversal optimization exclude none acc b dpl dph The exclude pragma disables generation of pair of push pop instruction in ISR function using interrupt keyword The directive should be placed immediately before the ISR func tion definition and it affects ALL ISR functions following it To enable the normal register saving for ISR functions use pragma exclude none noiv Do not generate interrupt vector table entries for all ISR functions defined after the pragma This is useful in cases where the interrupt vector table must be defined manually or when there is a secondary manually defined interrupt vector table e g for the autovector feature of the Cypress EZ USB FX2 More elegantly this can be achieved by obmitting the optional interrupt number after the interrupt keyword see section 3 8 about interrupts callee_saves function1 function2 function3 The compiler by default uses a caller saves convention for register saving across function calls however this can cause unnecessary register pushing amp popping when calling small functions from larger functions This option can be used to switch off the register saving con vention for the function names specified The compiler will not sav
14. 8A 82 CO 02 CO 03 12 80 6D DO 03 DO 02 OA OB 80 80E0 AC 22 74 OD CO EO E4 CO EO 74 25 CO EO 74 81 C0 80E0 EO 74 02 CO EO 74 26 CO EO 74 00 CO EO E4 CO EO t 15 21 52 1 einfigen P OOOO Abbildung 7 Die CESY Oberfl che LCALL TOInit Start 24 3 2 Das Speicherkonzept 3 2 Das Speicherkonzept Das wichtigste Merkmal von CESY ist der sogenannte Virtuelle Codespeicher Als virtuell bezeichnet man etwas das in Wirklichkeit gar nicht vorhanden ist dem Benutzer aber vorgegaukelt wird so dass er es sehen und sogar damit arbeiten kann CESY gaukelt Ihnen also den Speicher eines Controllersystems vor auch wenn gar keines angeschlossen ist Dieser Speicher nimmt den vom Assembler generierten Code auf Sie k nnen ihn mit dem Monitor bearbeiten Sein Inhalt kann ganz oder h ppchenweise ber die Download oder Upload Funktionen zwischen dem virtuel len Speicher auf dem PC und den Speicherb nken des Zielsystems bertragen wer den Diskettenoperationen sind nur auf den virtuellen Speicher m glich So m ssen Sie zun chst einen Upload durchf hren und k nnen dann den Speicherbereich auf einen Datentr ger abspeichern wenn Sie z B den RAM Inhalt Ihres Controllersys tems speichern m chten Der Speicher eines 80x51 Systems ist in drei Speicherb nke aufgeteilt die berein ander liegen und daher mit verschiedenen Befehlen angesprochen werden m ssen e DATA Segment auch interner Datenspeicher Umfasst beim 803
15. Assemblierung automatisch global definiert werden Beachten Sie bitte dass dieser Befehl gleich am Zei lenanfang stehen muss und zwischen dem gro en P und der Zahl genau ein Leerzeichen zu stehen hat Beispiel zu den Pseudo Befehlen ORG 2000h Startadresse P 535 Prozessor ist 80535 DB 12 23h konst8 Bytes DB Text 0Odh 0Oah 0 Text DW 1480 13000 AFFEh Words DW Unterl Unter2 Unter3 Sprungtabelle DS 33 33 Byte freier Platz 32 3 7 Assembler Syntax 3 7 5 Include Dateien Wenn der Quelltext zu lang wird so dass er un bersichtlich wird oder wenn f r einige Anwendungen Bibliotheken erstellt werden sollen sollten Teile in eine Datei ausgelagert werden Auch Makrobibliotheken k nnen und m ssen als Include Dateien realisiert werden e I lt Dateiname gt Der Befehl muss direkt am Zeilenanfang stehen sonst gibt es einen Syntax Fehler Pfade sollten nicht angegeben werden Sorgen Sie also dafiir dass alle Include Dateien im Projekt Verzeichnis stehen Zwischen dem Befehl und dem Dateina men muss genau ein Leerzeichen stehen Sie diirfen Include Dateien bis zu 10 Ebe nen tief schachteln d h eine Datei bindet die andere ein die wiederum eine dritte einbindet usw Um dieses Feature zu nutzen m ssen Sie bei den Assembler Optionen das Kontrollfeld rekursive Include Dateien aktivieren Beispiel Sieht der Quelltext folgenderma en aus RET I UNTER SRC LCALL Unterprg Label aus Include D
16. BASIC Befehl RUN der zum Starten von einzelnen Routinen dient bekannt ist Das Assemblerprogramm muss im Quelltext vorliegen und sich mit CESY problemlos assemblieren lassen Weitere Include Dateien d rfen eingebunden werden Labels d rfen frei verwendet werden sie sind dann in der Include Datei lokal d h es d rfen keine Programmteile aufgerufen werden die nicht in der Include Datei vorkommen Makros sind erlaubt Es sind zwei Arten von Include Dateien erlaubt 1 Dateien mit nur einem Programm Einsprung 2 Dateien mit mehr als einem Programm Im ersten Fall muss das Programm gleich in der ersten Zeile beginnen und mit dem RET Befehl abgeschlossen werden Im zweiten Fall muss am Anfang ein Sprungtabelle stehen die folgendes Format aufweist LJMP subi LUMP sub2 LUMP sub3 71 5 BASIC Compiler Jeder Programmteil ist mit RET abzuschliessen e RUN Ausdruck Symbol lt ID gt startet ein Assembler Unterprogramm das in einer mit dem INCLUDE Befehl eingebundenen Datei vorhanden ist Als Parameter kann ein arithmetischer Ausdruck oder eine Variable angegeben werden Dieser wird dem Assemblerprogramm in den Registern R5 R6 und R7 LMH Byte bergeben Welche Include Datei gemeint ist wird aus dem angegeben Symbol ersichtlich Enth lt die Include Datei mehrere Unterprogramme und eine Sprungtabelle so muss ber die ID nach dem Doppelpunkt das entsprechende Unterprogramm ausgew hlt werden Beispiel INCLUDE INCB
17. Daten Wenn Sie im Editor einen Block markiert haben wird der ganze Block durch einen Tastenanschlag gel scht Dies k nnen Sie in den Optionen abschalten um Sicher heit vor Datenverlust zu haben Wieviel Sinn Include Dateien machen die weitere Include Dateien aufrufen bleibt Ihnen berlassen Wenn Sie das rekursive Einbinden erlauben wollen m ssen Sie hier das entsprechende H kchen setzen Diese Funktion befindet sich aber Beta Stadium Dies wird sich auch erst mal nicht ndern 7 2 Blitzstart ber die Blitzstart Kn pfe siehe Abbildung sy sees nme k nnen Sie den Arbeitsgang von Assemblieren Download Programmstart automatisieren Sie a miissen dazu nur auf den entsprechenden Blitz start Knopf klicken Vorher muss aber in den Op tionen Eigenschaften das K stchen Download Adressen setzen aktiviert werden Abbildung 24 Blitzstart Kn pfe Entsprechendes gilt nat rlich auch f r die Compiler Wenn Sie in den Terminal Optionen Automatisch Starten aktiviert haben so geht sofort nach dem Starten ein Terminalfenster auf bzw wenn schon eins offen ist 92 7 3 Neue SDCC Version wird es aktiviert Beachten Sie aber dass das ffnen eines Terminalfensters mit dem Initialisieren einer Schnittstelle verbunden ist was ein paar hundert Millise kunden dauert 7 3 Neue SDCC Version Auf der Website http sdcc sourceforge net k nnen Sie laufend aktualisierte SDCC Versionen herunterladen
18. Doppel kreuz etc verwendet werden sie sind dann in einfache Anf hrungszeichen zu set zen Es d rfen beliebige arithmetische Ausdr cke verwendet werden Falls das Ergebnis negativ ist wird es ins Zweierkomplement umgewandelt Klammern sind erlaubt ansonsten gilt die Reihenfolge der Eingabe Es stehen die Operatoren DIV MOD AND OR XOR LO HI NOT zur Verf gung Division durch 0 er 31 3 CESY Referenz gibt 0 Operatoren aus Buchstaben werden von Punkten eingeschlossen damit sich keine Einschr nkungen f r die Labels ergeben Beispiel zur Arithmetik ma MOV A 20 dezimal MOV A a ASCII klein MOV A 20h hex MOV A 10101111b bin r MOV A 20 negativ MOV DPTR ma 3 Arithmetik MOV A LO ma 3 7 4 Pseudo Befehle F r die Steuerung des Assemblers stehen folgende Pseudo Befehle zur Verf gung ORG Anfang des Codes im Speicher DB Tabelle aus Bytes Darf bis zu 64 Elemente enthalten Texte sind auch er laubt und mit Bytes mischbar Au erdem Konstanten DW Tabelle aus Words Darf bis zu 32 Elemente enthalten Labels der Typen CODE und EQU sind erlaubt DS Leerraum im Code Angabe in Bytes P Definition des Controllertyps Die hier angewendete Definition hat eine h here Priorit t als die Definition im Assembler Men Es sind die Befehle P 51 P 52 P 535 P537 P552 m glich Das Programm kann diese Einstellun gen ber Symbole erkennen die f r die bedingte
19. L schen dauert ca 5 10 Sekun den je nach Zustand des Speicherbausteins e Flash Sektorl schen l scht einzelne 64k Bereiche des Flash ber ein Dia logfenster k nnen Sie den zu l schenden Bereich w hlen Auch hier leuchtet die LED w hrend des etwa 2 Sekunden dauernden L schvorgangs ACH TUNG einige Flash Bausteine erlauben kein Sektorl schen e Flash Boot ist eine besonders interessante Eigenschaft Durch das Schrei ben einer Boot Markierung wird bei RESET ein zuvor ins Flash herunterge ladenes Programm nach dem Starten in das RAM kopiert und das RAM da nach als EPROM Emulator konfiguriert siehe Handbuch des LAB 537 und die Online Hilfe Schlie lich wird das Programm ab Adresse 0000h gestar tet Sie m ssen dazu die L nge Ihres Programmes eingeben Die nicht zu 47 3 CESY Referenz g nglichen Bereiche am Ende jeder 16k Seite des Flash werden automatisch ber cksichtigt Es gelten die selben Vorsichtsma nahmen wie beim Autostart beschrieben Soll das LAB 537 Board wieder mit dem CESY Betriebssystem starten legen Sie einfach beim Start den Pin P6 7 C24 an der Messerleiste auf 5V Damit kann die untere Flash Bank nicht selektiert werden und die Boot Markierung wird nicht gefunden Vergessen Sie nicht die Boot Markierung zu l schen Ein erneutes Setzen ist nur nach dem L schen dieses Flash Sektors m glich Diese Funktion erm glicht einen permanenten Einsatz des LAB 537 berall dort wo das Einsetzen eines
20. Option ffnen Sie nun also ein neues Editorfenster mit Datei neu Editor Unser Pro gramm soll ab der Adresse 8000h im Speicher stehen Die meisten Experimentier Boards verf gen ber einen RAM Speicherbereich ab 8000h Ist dies bei Ihrem Board anders ersetzten Sie die 8000h bitte durch die ben tigte Adresse Die ersten Befehle lauten somit P31 lt tab gt org 8000h lt tab gt bedeutet hier nur dass Sie die Tabulatortaste dr cken sollten um den Befehl passend einzur cken Die 8000h wird automatisch passend einger ckt Der P31 Befehl sagt dem Assembler dass er die SFR Labels f r den 8031 Prozessor vorein stellen soll Sie k nnten diese Einstellung auch ber das Assembler Men vorneh men Als n chstes definieren wir die ben tigten Labels tro bit tecon 4 tf fo bit Et con reload equ 55536 Beachten Sie dass das Label tcon bereits vordefiniert ist die Bit Labels allerdings von Hand zu definieren sind Wir beginnen nun das Hauptprogramm Zuerst ist der Timer zu initialisieren und der Ausgabepin zuriickzusetzen ELY p1 7 clr tro clr t o anl tmod 11110000b orl tmod 00000001b In einer Warteschleife soll das Programm verharren bis die Taste gedr ckt ist da nach wird der Ausgabepin geschaltet poll_key jb p1 0 poll_key setb pl1 7 14 2 5 Kennenlernen von CESY Jetzt wird eine Sekunde verz gert Wir rufen dazu ein Unterprogramm das 10 ms verz gert hundertmal auf mov
21. Programm im Zielsystem Wenn das Programm nur kurze Zeit unter 50 ms l uft so wird nach dessen Ende mit dem RET Befehl ein Fenster angezeigt in dem die Register des Controllers wie sie sich nach dem Pro gramm ergeben angezeigt Beachten Sie bitte dass ein Programm nur im Code ROM laufen kann und daher ein Pro gramm Download eigentlich nicht m g x lich ist Ein blicher Kunstgriff zur Um SFR Kontrolle Adresse gehung dieses Problems wird im Hard Ina FF ef ware Abschnitt beschrieben eSFR Kontrolle erm glicht das Auslesen und Setzen von SFR Registern des Cont rollers In einem Pop Up Fenster kann die auszulesende oder zu ndernde Adresse eingegeben werden Wenn der Knopf Einlesen gedr ckt wird wird der Inhalt des Registers gelesen und angezeigt Ist die Checkbox permanent auslesen akti viert so wird die Adresse permanent aus gelesen und angezeigt bis der Stop J permanent auslesen Einlesen Ausgeben Ende Stop Abbildung 16 SFR Fenster 46 3 11 Kommunikation mit dem Zielsystem oder Ende Knopf angeklickt wird Um ein Register zu setzen ist ein Wert in das Inhalt Feld einzutragen und der Ausgeben Knopf anzuklicken e Batterie Backup RAM enth lt zwei Untermeniis e Autostart setzen setzt eine Markierung in der N he der Interrupt Vektoren Ihres Programms Wird ein Reset ausgel st so pr ft das CESY Betriebssystem ob diese Markierung vorhanden ist und
22. Reihenfolge H chstwertiges Byte mittelwertiges Byte niedrigwertiges Byte HML So kann das Assemblerprogramm sich einen Satz von Variablen aussuchen die es liest und ver ndert 5 4 6 SFR Register e OUT adresse byte gibt einen Wert an ein SFR Register aus Beispiel OUT 144 3 Setzt am Port 1 das erste und das zweite Bit e IN adresse liest einen Wert aus einem SFR Register aus Beispiel PRINT IN 144 Liest den Zustand von Port 1 ein e SET adresse bit bit setzt ein oder mehrere Bits in einem SFR Register Nicht angegebene Bits werden nicht beeinflusst Beispiel SET 144 0 SET 144 3 7 PRINT IN 144 e CLEAR adresse bit bit l scht ein oder mehrere Bits des angegebenen SFR Registers oder l scht es ganz wenn keine Bits angegeben wurden Wie beim SET Befehl werden nur die spezifizierten Bits beeinflusst Beispiel OUT144 255 CLEAR 144 1 CLEAR 144 3 5 PRINT IN 144 CLEAR 144 PRINT IN 144 65 5 BASIC Compiler e CHECK adresse bit fragt ein Bit an einem SFR Register ab Beispiel Ausgabe SET 176 4 IF CHECK 176 4 PRINT Ja CLEAR 176 4 IF CHECK 176 4 PRINT Ja 5 4 7 Serielle Schnittstelle e SEROPEN initialisiert die serielle Schnittstelle Wenn im BASIC Optionen Fenster die Checkbox Serielle Schnittstelle initialisieren angeklickt wurde wird die Schnittstelle automatisch zu Anfang des Programms initialisiert e SERCLOSE schlie t die serielle Schnittstelle inde
23. basic blocks Do local common subexpression elimination then global subexpression elimination Dead code elimination Loop optimizations If loop optimizations caused any changes then do global subexpression elimination and dead code elimination again e This phase determines the live ranges by live range I mean those iTemp variables defined by the compiler that still survive after all the optimizations Live range analysis is essential for register allocation since these computation determines which of these iTemps will be assigned to registers and for how long e Phase five is register allocation There are two parts to this process 68 8 4 RETARGETTING FOR OTHER PROCESSORS CHAPTER 8 SDCC TECHNICAL DATA The first part I call register packing for lack of a better term In this case several MCU specific expression folding is done to reduce register pressure The second part is more MCU independent and deals with allocating registers to the remaining live ranges A lot of MCU specific code does creep into this phase because of the limited number of index registers available in the 8051 e The Code generation phase is unhappily entirely MCU dependent and very little if any at all of this code can be reused for other MCU However the scheme for allocating a homogenized assembler operand for each iCode operand may be reused e As mentioned in the optimization section the peep hole optimizer is rule based system
24. command sdcc sourcefile c This will compile assemble and link your source file Output files are as follows sourcefile asm Assembler source file created by the compiler sourcefile Ist Assembler listing file created by the Assembler sourcefile rst Assembler listing file updated with linkedit information created by linkage editor sourcefile sym symbol listing for the sourcefile created by the assembler sourcefile rel or sourcefile o Object file created by the assembler input to Linkage editor sourcefile map The memory map for the load module created by the Linker sourcefile mem A file with a summary of the memory usage sourcefile ihx The load module in Intel hex format you can select the Motorola 19 format with out fmt s19 If you need another format you might want to use objdump or srecord Both formats are documented in the documentation of srecord sourcefile adb An intermediate file containing debug information needed to create the cdb file with debug sourcefile cdb An optional file with debug containing debug information The format is documented in cdbfileformat pdf sourcefile no extension An optional AOMF or AOMFS1 file containing debug information generated with option debug The Intel absolute object module format is commonly used by third party tools debuggers simulators emulators sourcefile dump Dump file to debug the compiler it self generated with option dumpall
25. einf gen oder mit einem bestimmten Wert f llen und Sie k nnen nach einer Bytefolge in einem Adressbereich suchen Wenn ein Monitorfenster aktiv ist k nnen Sie mit dem Befehl Datei Drucken einen Speicherbereich ausdrucken 3 9 1 Tipps Sie k nnen ber die Zwischenablage einen Speicherbereich im Zielsystem von einer Speicherbank in die andere bertragen Stellen Sie dazu zuerst die Ansicht der Quell Bank z B Code ein w hlen Sie den Befehl Bearbeiten Kopieren und kopieren den ben tigten Bereich in die Zwischenablage Dann stellen Sie die An sicht auf die Ziel Bank z B XRAM und f gen den Bereich aus der Zwischenab lage an der gew nschten Adresse ein Beim Einf gen wird nat rlich nicht richtig eingef gt sondern der Bereich ber schrieben Wenn Sie einen Speicherbereich des Zielsystems auf einen Datentr ger speichern m chten m ssen Sie zun chst im Im Export Men einen Upload vornehmen um den Bereich in den virtuellen Speicher zu holen Nur daraus ist ein Speichern auf einen Datentr ger oder das Ausdrucken m glich Wenn Sie die Anzeige in disassemblierter Form vermissen durch die M glichkeit der Anzeige mehrerer Editorfenster ist es bequem m glich zwischendurch den be n tigten Bereich zu reassemblieren Danach schlie en Sie das nicht mehr ben tigte Editorfenster einfach wieder 3 9 2 Troubleshooting Der Monitor teilt sich mit den anderen Programmteilen insbesondere mit dem Ter minal ev
26. needed e The number of case labels is at least three since it takes two conditional statements to handle the boundary conditions e The number of case labels is less than 84 since each label takes 3 bytes and a jump table can be utmost 256 bytes long Switch statements which have gaps in the numeric sequence or those that have more that 84 case labels can be split into more than one switch statement for efficient code generation e g switch i case case case case case case 10 case 11 case 12 Wo PB WD t If the above switch statement is broken down into two switch statements switch i case 1 case 2 case 3 case 4 and switch i case 9 case 10 case 11 case 12 then both the switch statements will be implemented using jump tables whereas the unmodified switch statement will not be You might also consider inserting dummy cases 0 and 5 to 8 in this example The pragma nojtbound can be used to turn off checking the jump rable boundaries It has no effect if a default label is supplied Use of this pragma is dangerous if the switch argument is not matched by a case statement the processor will happily jump into Nirvana 8 1 8 Bit shifting Operations Bit shifting is one of the most frequently used operation in embedded programming SDCC tries to implement bit shift operations in the most efficient way possible e g unsigned char i i gt gt 4 generates the following cod
27. neuen EPROMs umst ndlich oder unm glich w re Der Flash Speicher ist sogar sicherer als ein normales UV EPROM weil er seine Information nicht durch UV oder hochenergetische Strahlung verlieren kann e BSL setzen ber ein Dialogfenster ist ein einfacher Zugriff auf das Banks witch Latch m glich Sie k nnen den aktuellen Stand des BSL auslesen und jedes Bit einzeln setzen Dies funktioniert nat rlich nur ber das CESY Betriebssystem denn das BSL selbst ist nicht lesbar Das Betriebssystem spiegelt das BSL in einer Speicherzelle des internen RAMs e Direktausgabe Oftmals ist es praktisch einen Speicherausschnitt direkt auf einer Druckerschnittstelle auszugeben Viele EPROM Emulatoren k nnen so program miert werden Diese Aufgabe k nnen Sie direkt von CESY aus erledigen Sie m s sen nur den ben tigten Port z B LPT1 eingeben Achtung Bitte keinen Doppel punkt angeben Die Funktion sollte auch mit den Seriellen Schnittstellen funktionie ren wobei die in den Systemeinstellungen get tigten Angaben f r die Baudrate etc hergenommen werden 48 3 12 Das Terminal Fenster 3 12 Das Terminal Fenster ber das Terminalfenster k nnen Sie mit Ihrem Zielsystem frei kommunizieren Insbesondere bei der Programmierung unter BASIC wird Ihnen diese Funktion eine gro e Hilfe sein Es handelt sich dabei um ein einfaches ASCII Terminal das um die Cursorfunktionen im VT100 Standard erweitert wurde Wenn Ihr Programm also mit dem CE
28. paar Kabeln notfalls im fliegenden Aufbau schnell nachger stet werden 4 1 2 Serielle Verbindung Der PC und das Zielsystem m ssen ber ein serielles Kabel verbunden werden da mit CESY Zugriff auf das System hat Ein solches Kabel kann bei beidseitig 9pol Steckverbindern wie folgt aussehen e PC Seite Verbinden Sie die Pins 1 4 6 untereinander sowie die Pins 7 8 Ab Windows 95 ist das nicht notwendig e Kabel Verbinden der Pins 2 3 und 5 des Zielsystems mit den entsprechenden Pins des PCs Ein Kreuzen der Pins 2 und 3 kann notwendig sein Beachten Sie dass beide Schnittstellen mit den gleichen bertragunsparametern 8N1 und der gleichen bertragungsgeschwindigkeit laufen Beim ersten Start kann es vorkommen dass die bertragungsstrecke noch nicht synchronisiert ist Sie sollten zun chst mit dem Monitor pr fen ob die bertragung reibungslos funktioniert bevor Sie z B einen Download starten Eventuell m ssen Sie in der Windows Systemsteuerung das FIFO des benutzten seriellen Kanals ab schalten 4 1 3 Vorbereitung f r Einzelschrittbetrieb Um Ihr System f r den Einzelschrittbetrieb im Monitor klarzumachen m ssen Sie nur die INTO Leitung P3 2 Ihres Controllers auf Masse ziehen Welcher Pin das 50 4 2 Die CESY Firmware nun ist schauen Sie bitte im Datenblatt des Controllers bzw in der Anleitung Ihres Boards nach 4 1 4 Einrichtung der Seriellen Schnittstelle Die serielle Schnittstelle wird im Men O
29. transferieren Im Bearbeiten Men stehen folgende Blockoperationen zur Verf gung e Ausschneiden Der Block wird in die Zwischenablage kopiert und danach aus dem Text entfernt e Kopieren Der Block wird in die Zwischenablage kopiert e Einf gen Ein Block aus der Zwischenablage wird in den Text eingef gt e L schen Der Block wird gel scht ohne die Zwischenablage zu beeinflus sen Suchen und Ersetzen Nach der Anwahl dieser Men punkte ffnet sich ein Dia logfenster indem Sie den Suchbegriff und den Ersetzungstest sowie Suchoptio nen angeben k nnen Mit der Option Weitersuchen f hren Sie eine Suche nach dem ersten Auffinden eines Suchbegriffes fort e Auffinden von Fehlerstellen Der Assembler merkt sich die ersten 10 Feh lerstellen und zeigt direkt nach dem Assemblieren die erste an Mit der Option Fehler suchen springen Sie zum n chsten Fehler Die Meldung wird in der Statuszeile angezeigt e Direkter Sprung auf eine Zeile Gro e Programme sind oft langwierig zu durchbl ttern Daher kann eine Zeile durch Angabe der Zeilennummer au tomatisch angesprungen werden 3 6 Der Assembler ae Cee Programmcode gibt es eine farbliche 0 Syntax Hervorhebung Diese erleich Pe ee BE tert das Eingeben von Programmen da Schl sselworte bzw Mnemonics farb lich gekennzeichnet werden Sie k n PR assembler nen die Farben mit dem Men befehl ren a Optionen Textfarben ausw hlen Re
30. used with other attributes like reentrant The keyword critical may also be used to disable interrupts more locally critical i More than one statement could have been included in the block 33 3 10 FUNCTIONS USING PRIVATE REGISTER BANKS MCS51 DS390 CHAPTER 3 USING SDCC 3 9 2 Enabling and Disabling Interrupts directly Interrupts can also be disabled and enabled directly 8051 EA 0 or EA_SAVE EA EA 0 EA 1 EA EA_SAVE On other architectures which have seperate opcodes for enabling and disabling interrupts you might want to make use of defines with inline assembly HC08 define CLI _asm cli _endasm define SEI _asm sei _endasm Note it is sometimes sufficient to disable only a specific interrupt source like f e a timer or serial interrupt by manipulating an interrupt mask register Usually the time during which interrupts are disabled should be kept as short as possible This minimizes both interrupt latency the time between the occurrence of the interrupt and the execution of the first code in the interrupt routine and interrupt jitter the difference between the shortest and the longest interrupt latency These really are something different f e a serial interrupt has to be served before its buffer overruns so it cares for the maximum interrupt latency whereas it does not care about jitter On a loudspeaker driven via a digital to analog converter which is fed by an interrupt a latency of a
31. which can repro grammed for other MCUs 69 Stand August 2004 Version 8 0 by dr rakers MIKROCONTROLLER Im Hemmen 2 59387 Ascheberg e mail info rakers de www http www rakers de Das Handbuch unterliegt wie das Programm dem Urheberrecht Kopieren ist nur zum eigenen Gebrauch erlaubt Auszugsweises Vervielfaltigen unabh ngig vom gew hlten Verfahren ist nur bei schriftlicher Erlaubnis des Autors gestattet Die Laufzeitbibliothek des BASIC und das Betriebsprogramm d rfen in Ihre Anwendungen eingebunden und zusammen mit diesen vertrieben werden Bedingung ist dass entweder Ihr Name oder der Ihrer Firma explizit in einem Copyright Hinweis erscheint oder dass der Name des CESY Autors dort genannt wird Die Laufzeit bibliothek darf nicht als eigenst ndiges Paket oder Toolbox weitergegeben werden So wohl Laufzeitbibliothek CLIB SRC als auch das Betriebsprogramm SYS51 SRC SYS535 SRC SYS537 SRC LAB537 SRC etc d rfen nur als Objektcode in Anwendun gen eingebunden werden Der mitgelieferte Assembler Sourcecode hat bei Ihnen zu blei ben Gleiches gilt auch f r die Demonstrations Programme ber Ausnahmen ist mit dem Autor zu verhandeln Der SDCC Compiler ist durch die GNU General Public License gesch tzt Das SDCC Paket darf vom Benutzer gratis benutzt werden Etwaige nderungen sind allen interessier ten weiteren Nutzern zug nglich zu machen Dies gilt jedoch nicht f r mit dem SDCC CES
32. 0 FF FF FE FF FF FF FE FF FF FF FF FF FF FF FF FF Rufen Sie ihn bitte mit 8070 EF FF FE FF FF FF FE FF FF FF FF FE FF FF FF FF 8080 EF FF EF FF FF FF FF FF FF FF FF FF FF FF FF FF Datei Neu Monitor 8090 FF FF FE FF FF FF FF FF FF FF FF FF FF EF FF EF auf Ent Monitotentt a sumuemuumumusuun erscheint das einen Hexdump ab Adresse Abbildung 4 Programm im Monitor 0000h anzeigt Mit dem Befehl Bearbeiten Gehe zu k nnen Sie zur Adresse 8000h springen Jetzt m ss te ein Bild gem Abbildung 4 erscheinen Anhand des Hexdumps kann man nat r lich nicht auf die korrekte Funktion des Programms schlie en Aber zur Endkontrol le eignet sich diese Darstellung da sie sehr kompakt ist und Anfang und Ende des Programms schnell zu erkennen sind Man sieht zum Beispiel dass das Programm nur ca 48 byte lang ist Genaue Informationen erh lt man per Assembler Listing 80C0O EF FF FE FF FE EF FE FE FF EF FF FE FE FF FF FE Speichern Sie nun Ihr Programm in bin rer Form ab Dies geschieht auch mit Datei speichern unter W hlen Sie aber nun als Dateityp Bin rdatei Fast alle EPROM oder FLASH Programmierger te oder Emulatoren verstehen dieses Da tenformat Wenn Sie ein EPROM brennen wollen m ssen Sie das Programm nat r lich ab Startadresse 0000h assemblieren 2 5 2 Download und Programmstart Nun kann das Programm an da
33. 1 51 128 byte beim 8032 52 und 80535 256 byte Dieser Speicher liegt direkt im Controllerchip daher ist der Zugriff sehr schnell Dieser Speicher enth lt auch dern Prozessorstack Wenn Sie mit der Benutzung dieses Speichers auskommen ben tigen Sie keinen externen RAM Chip e CODE Segment auch Code ROM Dieser Speicher kann als EPROM oder Mas ken ROM im Chip integriert sein meistens wird jedoch ein externer EPROM Chip benutzt Dort liegt der aus f hrbare Programmcode Benutzer bearbeitet e XRAM Segment auch exter Editor ig i Monitor ner Datenspeicher Befindet Precompiler Br er i h i i RAM ompllel Se eee Er az a E o ETA Chip und kann bis zu 64 kB p tex a E ETA umfassen Aus diesem Spei Reassembler Upload cher k nnen ohne Tricks keine l I ig Programme ausgef hrt wer den er dient allein der Spei H Fo cherung von Daten Ben tigt man einen Download zum Testen von Programmen so muss hardwarem ig eine kleine Manipulation vorgenommen werden Abbildung 8 Speichermanagement 25 3 CESY Referenz 3 3 Vom Quelltext zum lauff higen Programm Um ein Programm zu erstellen und gleich auch auszuf hren sind nur wenige Schrit te notwendig gesetzt den Fall alles funktioniert auf Anhieb 1 Neues Editorfenster ffnen 2 Assembler oder BASIC Programm im Editor editieren 3 Sichern der Quelltext Datei 4 Assemblieren bzw Compilieren 5 Sichern als Save As Bin r oder Hexdatei 6 Dow
34. 19 The linker output final object code is in Motorola S19 format The format itself is documented in the documentation of srecord WI linkOption linkOption Pass the linkOption to the linker See file sdcc as doc asxhtm html for more on linker options 3 2 4 MCSS51 Options model small Generate code for Small Model programs see section Memory Models for more details This is the default model model large Generate code for Large model programs see section Memory Models for more details If this option is used all source files in the project have to be compiled with this option xstack Uses a pseudo stack in the first 256 bytes in the external ram for allocating variables and passing parameters See section 3 17 1 2 External Stack for more details iram size lt Value gt Causes the linker to check if the internal ram usage is within limits of the given value xram size lt Value gt Causes the linker to check if the external ram usage is within limits of the given value code size lt Value gt Causes the linker to check if the code memory usage is within limits of the given value stack size lt Value gt Causes the linker to check if there is at minimum lt Value gt bytes for stack pack iram Causes the linker use unused register banks for data variables or stack 3 2 5 DS390 DS400 Options model flat24 Generate 24 bit flat mode code This is the one and only that the ds390 code generator supports right now and i
35. 3 13 Interfacing with Assembler Code 3 13 1 Global Registers used for Parameter Passing The compiler always uses the global registers DPL DPH B and ACC to pass the first parameter to a routine The second parameter onwards is either allocated on the stack for reentrant routines or if stack auto is used or in data xdata memory depending on the memory model 3 13 2 Assembler Routine non reentrant In the following example the function c_func calls an assembler routine asm_func which takes two parameters extern int asm_func unsigned char unsigned char int c_func unsigned char i unsigned char j return asm func i j int main return c_func 10 9 The corresponding assembler function is 38 3 13 INTERFACING WITH ASSEMBLER CODE CHAPTER 3 USING SDCC globl _asm_func_PARM_2 globl _asm_func area OSEG asm_func_PARM_2 ds 1 area CSEG _asm_func mov a dpl add a _asm_func_PARM_2 mov dpl a mov dph 0x00 ret Note here that the return values are placed in dpl One byte return value dpl LSB amp dph MSB for two byte values dpl dph and b for three byte values generic pointers and dpl dph b amp acc for four byte values The parameter naming convention is _ lt function_name gt _PARM_ lt n gt where n is the parameter number starting from 1 and counting from the left The first parameter is passed in dpl for a
36. 51 e g bit test_bit Writing 1 to this variable generates the assembly code D2 00 setb _test_bit The bit addressable memory consists of 128 bits which are located from 0x20 to Ox2f in data memory Apart from this 8051 specific storage class most architectures support ANSI C bitfields INot really meant as examples but nevertheless showing what bitfields are about device include mc68hc908qy h and sup port regression tests bitfields c 27 3 4 STORAGE CLASS LANGUAGE EXTENSIONS CHAPTER 3 USING SDCC 3 4 1 7 sfr sbit Like the bit keyword sfr sbit signifies both a data type and storage class they are used to describe the special function registers and special bit variables of a 8051 eg sfr at 0x80 PO special function register P0 at location 0x80 sbit at 0xd7 CY CY Carry Flag Special function registers which are located on an address dividable by 8 are bit addressable an sbit addresses a specific bit within these sfr 3 4 1 8 Pointers to MCS51 DS390 specific memory spaces SDCC allows via language extensions pointers to explicitly point to any of the memory spaces of the 8051 In addition to the explicit pointers the compiler uses by default generic pointers which can be used to point to any of the memory spaces Pointer declaration examples pointer physically in internal ram pointing to object in external ram xdata unsigned char data p pointer physically in external ram pointing to
37. A ANL A konst8 ANL dadr konst8 ORL A Rr ORL A Ri ORL A dadr ORL dadr A ORL A konst8 ORL dadr konst8 XRL A Rr XRL A Ri XRL A dadr XRL dadr A XRL A konst8 XRL dadr konst8 CLR A CPL A 8 1 4 Bit Verarbeitung MOV C badr MOV badr C ANL C badr ANL C badr ORL C badr ORL C badr CLR C CLR badr SETB C SETB badr CPL C CPL badr 94 7 4 Bug gefunden 8 1 5 Arithmetik Befehle ADD A Rr ADD A Ri ADD A dadr ADD A konst8 ADDC A Rr ADDC A Ri ADDC A dadr ADDC A konst8 INC A INC dadr INC Rr INC kRr INC DPTR SUBB A Rr SUBB A Ri SUBB A dadr SUBB A konst8 DEC A DEC dadr DEC Rr DEC Rr MUL AB DIV AB DA A 8 1 6 Rotations Befehle RL A RR A RLC A RRC A 8 1 7 Unbedingte Sprungbefehle LUMP adr16 AJMP adr11 SJMP rel JMP A DPTR 8 1 8 Bedingte Sprungbefehle JZ rel JNZ rel JC rel JNC rel JB badr rel JNB badr rel JBC badr rel 8 1 9 Kombinierte Vergleichs und Sprungbefehle CUNE A dadr rel CINE A konst8 rel CINE Rr konst8 rel CUNE Ri konst8 rel 8 1 10 Kombinierte Dekrementier und Sprungbefehle DJNZ Rr rel DJNZ dadr rel 8 1 11 Unterprogramm Befehle LCALL adr16 ACALL adrl1l RET RETI 8 1 12 Diverse Befehle NOP SWAP A 95 Ausz ge der Wichtigsten Kapitel aus dem Original SDCC Handbuch Chapter 3 Using SDCC 3 1 Compiling 3 1 1 Single Source File Projects For single source file 8051 projects the process is very simple Compile your programs with the following
38. AS1 INC Switch INCLUDE INCBAS2 INC Stop RUN 3 Switch 0 RUN 3 Switch 1 RUN 0 Stop Zun chst werden zwei Dateien eingebunden Die erste enth lt zwei Unterprogramme die ber den Identifier selektiert werden Die zweite Include Datei besitzt nur einen Befehl der keiner weiteren Spezifizierung bedarf Ein ausf hrlicheres Beispiel findet sich unter den Dateinamen INCLUDE BAS INCBAS1 INC und INCBAS2 INC auf der CESY Diskette CD e STOP beendet ein BASIC Programm indem ein Sprung auf das Programmende vorgenommen wird Je nach Einstellung springt der Prozessor in eine Endlosschleife oder zum Monitorprogramm 12 5 4 BASIC Referenz 5 4 12 Stringverarbeitung Das CESY Basic bietet eine zugegebenerma en spartanische aber dennoch sehr effektive Stringverarbeitung an Diese beruht auf dem System der nullterminierten Strings das der Sprache C entlehnt wurde Dabei wird ein String einfach im Speicher abgelegt und hinter den String wird eine bin re Null geschrieben Dadurch verl ngert sich die effektive L nge des Strings um ein Byte Um die Verwaltung des Speicherbereiches f r die Strings muss sich das Programm k mmern Da Mikrocontroller blicherweise f r Steuerungsaufgaben verwendet werden dienen Strings vor allem zur Benutzerf hrung Dazu sind die vorhandenen Stringbefehle voll ausreichend Mit ein paar Kniffen ist aber noch mehr m glich so k nnen Benutzereingaben verwaltet und manipuliert wer
39. ASS LANGUAGE EXTENSIONS CHAPTER 3 USING SDCC 3 4 1 4 pdata Paged xdata access is currently not as straightforward as using the other addressing modes of a 8051 The following example writes 0x01 to the address pointed to Please note pdata access physically accesses xdata memory The high byte of the address is determined by port P2 or in case of some 8051 variants by a separate Special Function Register see section 4 1 pdata unsigned char test_pdata_ptr void main test_pdata_ptr pdata Oxfe test_pdata_ptr 1 Generates the assembly code 75 01 FE mov _test_pdata_ptr 0xFE 78 FE mov r0 0xFE 74 01 mov a 0x01 F2 movx r0 a Be extremely carefull if you use pdata together with the xstack option 3 4 1 5 code Variables declared with this storage class will be placed in the code memory code unsigned char test_code Read access to this variable generates the assembly code 90s00r6F mov dptr _test_code E4 clr a 93 move a atdptr char indexed arrays of characters in code memory can be accessed efficiently code char test_array c h e a p Read access to this array using an 8 bit unsigned index generates the assembly code E5 00 mov a _index 90s00r41 mov dptr _test_array 93 move a atdptr 3 4 1 6 bit This is a data type and a storage class specifier When a variable is declared as a bit it is allocated into the bit addressable memory of 80
40. Anweisung geh rt immer ein ENDIF das die Schachtelung schlie t Ausweg benutzen Sie IFS e REPEAT without UNTIL Error zu einer REPEAT Anweisung geh rt immer auch ein UNTIL das die Schachtelung schlie t 5 7 1 Laufzeitfehler Die meisten Befehle werden zur Laufzeit ohne jede Priifung ausgefiihrt Dies erfordert eine gro e Sorgfalt beim Programmieren Falls fatale Fehler zur Laufzeit auftreten die den Ablauf des Programmes gef hrden w rden wird eine Fehlermeldung ber die serielle Schnittstelle ausgegeben sofern sie ge ffnet ist Ansonsten bleibt das Programm an der Stelle stehen bis ein RESET ausgel st wird Die einzigen fatalen Laufzeitfehler sind Arithmetikfehler berlauf oder Division durch null 78 5 7 Fehlermeldungen 79 6 Der C Compiler 6 Der C Compiler CESY ist ab Version 8 mit einem C Compiler ausgestattet Der Compiler ist jedoch nicht wie der BASIC Compiler ein echter Teil von CESY sondern es handelt sich um ein gro es Open Source Projekt das im Internet von vielen gemeinsam arbeitenden Informatikern entwickelt wurde und kontinuierlich weiterentwickelt wird Der Name SDCC steht f r Small Devices C Compiler auf Deutsch C Compiler f r kleine Prozessoren Zuf lligerweise sind die Initialen des Hauptautors ebenfalls S D CESY bindet den SDCC Compiler ein so dass seine Benutzung erheblich vereinfacht wird Der Editor enth lt einen Satz von Textfarben f r die C Syntax
41. CO EO E4 CO EO 74 25 CO EO 74 81 CO EO 74 02 CO EO 74 26 CO EO 74 00 CO KO E4 CO EO 15 21 52 1 1 Einf gen Abbildung 2 Das Programmfenster 2 5 Kennenlernen von CESY Wenn Sie das erste Mal mit CESY arbeiten lesen Sie jetzt bitte folgende Themen der Handb cher berblick J e Benutzeroberfl che e Speicherkonzept e Arbeitsschritte e Datei Wir wollen nun zum weiteren Kennenlernen der wichtigsten Funktionen ein kleines Programm erstellen das ein nicht nachtriggerbares Monoflop emuliert An einen Pin des Mikrocontrollers sagen wir P1 0 wird ein Taster angeschlossen der den Pin auf Masse zieht Am Pin P1 7 soll eine Leuchtdiode angeschlossen werden die nach den Tastendruck genau eine Sekunde aufleuchtet und dann wieder verl scht 13 2 Installation und erste Schritte Dieses Programm soll einmal in Assembler und einmal in BASIC implementiert werden Wenn Sie den Taster anschlie en bedenken Sie bitte dass ein Pull up Widerstand vom Pin P1 0 nach 5V notwendig ist sonst funktioniert das Beispiel nicht 2 5 1 Assembler Beispiel Um die gew nschte Zeit genau einhalten zu k nnen ist die Benutzung eines Timers notwendig Wir gehen davon aus dass ein 8031 oder 8032 verwendet wird Diese Bausteine unterscheiden sich nicht in der Timer Programmierung Sie k nnen nat r lich auch einen C515 oder C517 verwenden denn die Beispiele funktionieren auch mit diesen Typen Setzen Sie aber immer die P31
42. Code Wird der Modus lar ge verwendet so werden die Daten im externen RAM abgelegt was nat rlich um st ndlicher ist f r Assembler Kenner MOV DPTR xxx MOVX A DPTR MOV Rx A 5 Bytes MOV Rx xx 2 Bytes und zu langsameren Programmen f hrt Bei zusammengesetzten Programmen m ssen immer alle Bibliotheken und Pro grammteile im gleichen Speichermodell bersetzt werden Die Standardbibliotheken sind bereits f r beide Modelle bersetzt Ordner lib small oder lib large Die Option Externen Stack verwenden wird von der derzeitigen Version des SDCC Compilers nicht sauber unterst tzt und ist nur f r Experimente gedacht Schlie lich k nnen noch Suchpfade f r Include Dateien und Bibliotheken sowie zus tzliche Compiler Linker Definitionen bergeben werden CESY kann nach dem Compilieren eine LOG Datei anzeigen Dies ist sicherlich sinnvoll wenn der Compiler einen Fehler gemeldet hat Man kann auch nach jedem bersetzten die Log Datei anzeigen lassen dann kann bei der Programmerstellung gleich auch auf Warnungen geachtet werden 6 4 Compilieren Das bersetzen eines C Assembler Debugger Im Export Optionen Fenster Hilfe Compilieren Programms ist genauso einfach Comp Down Start p Projekt Projekt ffnen wie das eines Assembler oder er BASIC Programms In der Datei Hinzuf gen FAR Datei entfernen Hauptmen zeile findet man das bersetzen Build C Compiler Men unter C Hier gibt es folg
43. DIF abgeschlossen Der ELSE Block kann auch entfallen dann wird der THEN Block mit ENDIF abgeschlossen Der THEN Befehl kann weggelassen werden 61 5 BASIC Compiler Start INPUT A 3 A 100_ IF A 100 THEN PRINT A ist hun A ist hun dert ENDIF IF A gt 200 THEN PRINT Zu Gross ELSE PRINT Okay ENDIF GOTO Start C e IFS Vergleich Rest der Zeile ACHTUNG Dieser Befehl dient zur Erhaltung der Kompatiblit t zu CESY BASIC V2 x Benutzen Sie bei neuen Programmen bitte den erweiterten IF Befehl Bedingung Nach IFS folgt ein Vergleich Es sind die Vergleichsoperatoren lt lt gt gt und ungleich m glich Wenn der Vergleich positiv war wird der Rest der Programmzeile ausgef hrt Falls der Vergleich negativ war wird das Programm ab der folgenden Zeile fortgef hrt Start INPUT A 100 IFS A 100 PRINT Hundert Hundert PRINT A 100 GOTO Start e REPEAT Programmblock UNTIL Vergleich Schleife mit Abbruchbedingung Die Schleife startet mit REPEAT Der bis zu UN TIL folgende Programmblock wird so lange wiederholt bis der auf UNTIL folgende Vergleich positiv ist Der Vergleich selbst ist quivalent zu dem Vergleich bei IF Eingabe Ausgabe Start INPUT A REPEAT A A 2 PRINT A A UNTIL A gt 1000 GOTO Start 62 5 4 BASIC Referenz 5 4 3 LC Display e DINIT initialisiert ein angeschlossenes LCD Display und l scht die Anzeige Die Befehls und Datenadr
44. Dr Sven Rakers CESY 8 Das Cross Entwicklungssystem f r alle Mikrocontroller der 80x51 Familie ESY professional V 8 00 Datei Bearbeiten Ansicht BASIC C Assembler Debugger Im Export Optionen Fenster Hilfe PASCAL CESYB include lt string h gt include lt stdio h gt include lt float h gt em Testprg fiir 4x4 Matrix delay 1 xdata unsigned char at Oxff80 lcd command include tast pruef2 inc xdata unsigned char at Oxff62 lcd data run 0 tast 0 m1 void delay unsigned int d run 0 tast 1 unsigned int i device 0 for i O i lt dsit print t delay 10 goto M1 void g sfr a B D PASCAL CESY801 CESYCOMP SRC 2 PSC sr el heroes ess asia SSeS Ta een ff 2 CESY8 00 c 5 Rakers Basic Compiler Output Generated 12 08 2004 14 15 E void dindl a a lcd_combef equ F400h delay 4dat equ F402h lcd_comdly equ Oih delay 4timeconst equ A600h Jan opar Eze equ aonan 8000 02 88 49 32 FF FF FF FF FE delay 4VarDat equ 38h 8010 FF FF FF 32 FF FF FF FF FF 8020 FF FF FF 32 FF FF FF FE FE org 8000h 8030 FE AA 82 AB 83 7C 00 7D 00 I CLIB SRC 8040 OC BC 00 F5 OD 80 F2 22 90 a ee 8050 04 12 80 31 90 FF 80 74 0C mov baudrate FAh 8060 90 FF 80 74 01 FO 90 10 04 LCALL SerInit 8070 FF 80 74 80 4A FO 90 00 64 8080 22 FO 90 00 64 12 80 31 22 8090 85 24 83 85 25 FO CO 02 CO Start 80A0 83 DO 03 DO 02 8B 06 EB 33 Line No 0 label 80B0 64 80 8D FO 63
45. ESY Dies impliziert aber auch dass von unserer Seite keine Garantie auf das Funktionieren des SDCC gegeben werden kann obwohl es besser funktioniert als so manche teurere Software Vor allen kann nicht garantiert werden ob SDCC f r den von Ihnen gew nschten Zweck verwendbar ist 80 6 3 Speicherbereiche 6 3 Speicherbereiche Im Men SDCC Optionen k nnen die Speicherbereiche die das C Programm im Zielsystem einnimmt eingestellt werden F r den Anfang reicht es aus wenn Code Segment und XRAM Segment auf Ihr Zielsystem angepasst werden Die Einstell m glichkeiten im Einzelnen e Code segment hier startet Ihr Programm Achten Sie darauf dass die Inter rupt Adressen richtig angesprungen werden F r unser LAB 537 w re die Einstellung 0000 f r die INDU Boards 8000h Letzteres passt auch f r die meisten Boards anderer Hersteller Soll das Programm schlie lich in ein EPROM gebrannt werden so muss die Code Adresse nat rlich auf 0000 gesetzt werden e XRAM segment hier legt das Programm Variablen und Strings ab Kleinere Programme werden in der Regel ohne XRAM auskommen e Data Segment diese Einstellung sollten Sie m glichst auf Auto lassen Damit wird das Data Segment also der interne Datenspeicher automatisch verwaltet und zwar nach folgender Regel o Variablen werden ab Adresse 08h abgelegt o Wenn weitere Registerb nke verwendet werden z B im Rahmen von Interrupts verschi
46. FO 80 95 FO Y_LABEL 80C0 35 24 FD RE 25 8C 82 8D 83 80D0 8A 82 CO 02 CO 03 12 80 6D 80E0 AC 22 74 OD CO EO E4 CO EO 800 E0 74 02 CO EO 74 26 CO EO LCALL TOInit 15 21 52 1 1 Einf gen I Benutzerhandbuch Stand V8 0 September 2004 Inhalt 1 BERBLICK 2 INSTALLATION UND ERSTE SCHRITTE 2 1 Installation 2 2 Installation des C Compilers 2 3 Deinstallation 2 4 Starten von CESY 2 5 Kennenlernen von CESY 2 6 Probleme erkennen und l sen 2 7 Programme in ein EPROM brennen 3 CESY REFERENZ 3 1 Die Benutzeroberfl che 3 2 Das Speicherkonzept 3 3 Vom Quelltext zum lauff higen Programm 3 4 Das Datei Men 3 5 Der Editor 3 6 Der Assembler 3 7 Assembler Syntax 3 8 Der Reassembler 3 9 Der Monitor 3 10 Der Debugger 3 11 Kommunikation mit dem Zielsystem 3 12 Das Terminal Fenster 4 HARDWARE UND CESY FIRMWARE 4 1 Hardware 4 2 Die CESY Firmware 5 BASIC COMPILER 5 1 bersetzen 5 2 Einstellungen 5 3 Aufbau eines BASIC Programms 5 4 BASIC Referenz 5 5 Interrupts in BASIC 5 6 Besonderheiten bei C517 C509 Prozessoren 5 7 Fehlermeldungen 6 DER C COMPILER 6 1 Stand der Entwicklung 6 2 Open Source Urheberrecht und Garantieverzicht 6 3 Speicherbereiche 4 6 4 Compilieren 6 5 Projekt Manager 6 6 Die Programmiersprache C 6 7 Spracherweiterungen und Besonderheiten 6 8 Weitere Dokumentation 7 DIVERSES 7 1 Eigenschaften 7 2 Blitzstart 8 NEUE SDCC VERSION 9 BUG
47. G Media IDE Memory cards eeprom flash En Decryption Remote debugging Realtime kernel Keyboard LCD RTC FPGA PID then the sdcc user mailing list http sourceforge net mail group_id 599 would certainly like to hear about it Programmers coding for embedded systems are not especially famous for being enthusiastic so don t expect a big hurray but as the mailing list is searchable these references are very valuable Let s help to create a climate where information is shared 41 3 17 MEMORY MODELS CHAPTER 3 USING SDCC 3 17 Memory Models 3 17 1 MCS51 Memory Models 3 17 1 1 Small and Large SDCC allows two memory models for MCS51 code small and large Modules compiled with different memory models should never be combined together or the results would be unpredictable The library routines supplied with the compiler are compiled as both small and large The compiled library modules are contained in separate directories as small and large so that you can link to either set When the large model is used all variables declared without a storage class will be allocated into the external ram this includes all parameters and local variables for non reentrant functions When the small model is used variables without storage class are allocated in the internal ram Judicious usage of the processor specific storage classes and the reentrant function type will yield much more efficient code than using the large model Sever
48. GEFUNDEN 10 DER BEFEHLSSATZ DES 80X51 Das CESY Handbuch Dieses Handbuch soll Ihnen bei der Arbeit mit CESY als Referenz zum schnellen Nachschlagen dienen Es enth lt eine Auswahl der wichtigsten Informationen der Online Hilfe Handb cher werden gew hnlich in gr eren St ckzahlen gedruckt Das bedeutet allerdings dass ein solches Handbuch nicht lange aktuell bleibt CESY wird des fteren berarbeitet und in einer neuen Versionsnummer angeboten Jedes Mal neue Handb cher zu drucken w re unrentabel und dazu umweltbelastend Aus diesen Gr nden liefert diese Brosch re Standardinformationen die mit dem Stand dieses Buches aktuell sind Weitere Informationen finden Sie in der st ndig aktualisierten Online Hilfe Wenn Sie ein neues Update erhalten sehen Sie bitte zun chst die README Datei auf Ihrer Programmdiskette CD an Dort finden Sie Hinweise auf neue Befehle nderungen Bugfixes usw Ausf hrlichere Informationen dazu sind dann in der Online Hilfe enthalten ber Anregungen von der Benutzerfront sind wir jederzeit dankbar und werden sie soweit f r einen gr eren Kreis n tzlich in das n chsterreichbare Update ein bringen Das Handbuch ist in f nf Teile unterteilt e Installation und erste Schritte e Referenzhandbuch e Hardware amp Firmware e BASIC Referenz e C Handbuch Wir wiinschen Ihnen viel Erfolg und eine angenehme Arbeit mit CESY 1 berblick 1 berblick CESY ist eine komfortable Ent
49. N Like dD except that the macro arguments and contents are omitted Only define name is included in the output Wp preprocessorOption preprocessorOption Pass the preprocessorOption to the preprocessor sdcpp SDCC uses an adapted version of the preprocessor cpp of the GNU Compiler Collection gcc if you need more dedicated options please refer to the documentation at http www gnu org software gcc onlinedocs 3 2 3 Linker Options L lib path lt absolute path to additional libraries gt This option is passed to the linkage editor s additional libraries search path The path name must be absolute Additional library files may be specified in the command line See section Compiling programs for more details xram loc lt Value gt The start location of the external ram default value is 0 The value entered can be in Hex adecimal or Decimal format e g xram loc 0x8000 or xram loc 32768 code loc lt Value gt The start location of the code segment default value 0 Note when this option is used the interrupt vector table is also relocated to the given address The value entered can be in Hexadecimal or Decimal format e g code loc 0x8000 or code loc 32768 21 3 2 COMMAND LINE OPTIONS CHAPTER 3 USING SDCC stack loc lt Value gt By default the stack is placed after the data segment Using this option the stack can be placed anywhere in the internal memory space of the 8051 The value entered can b
50. SI C If an interrupt service routine needs to do any of these operations then the support routines as mentioned in a following section will have to be recompiled using the stack auto option and the source file will need to be compiled using the int long reent compiler option Calling other functions from an interrupt service routine is not recommended avoid it if possible Note that when some function is called from an interrupt service routine it should be preceded by a pragma nooverlay if it is not reentrant Furthermore nonreentrant functions should not be called from the main program while the interrupt service routine might be active 32 3 9 ENABLING AND DISABLING INTERRUPTS CHAPTER 3 USING SDCC Also see section 3 7 about Overlaying and section 3 10 about Functions using private register banks 3 8 2 MCS51 DS390 Interrupt Service Routines Interrupt numbers and the corresponding address amp descriptions for the Standard 8051 8052 are listed below SDCC will automatically adjust the interrupt vector table to the maximum interrupt number specified 0x001B 0x0023 Timer 2 8052 0x002B If the interrupt service routine is defined without using a register bank or with register bank 0 using 0 the compiler will save the registers used by itself on the stack upon entry and restore them at exit however if such an interrupt service routine calls another function then the entire register bank will be saved on the stack This scheme
51. SY Terminal klarkommt wird es auch mit einem echten VT100 gut funktionieren Sie k nnen im Optionen Terminal qe x Fenster die Schnittstelle frei konfigu rieren Achten Sie jedoch darauf dass sich m glicherweise verschie dene Programmteile wie z B Moni Schnittstelle C com coM2 C COM3 C COM4 tor und das Terminalprogramm Ubertragungsrate bps m glicherweise eine physikalische C300 son A200 72400 Schnittstelle teilen Das kann zu C4800 9600 19200 Verwirrungen f hren m Byte Gr e Neben den Konfigurationskn pfen Ca ts Ce Cr 6 gibt es noch zwei weitere Checkbo Paritat xen Die Option Echo on bestimmt ob jedes eingegebene Zeichen zu Even Odd Mark Spe No s tzlich zur Schnittstelle auch noch auf dem Bildschirm ausgegeben werden soll Meistens ist das nicht erforderlich Dagegen sollten Sie die Option CR gt CR LF aktivieren Ann TER damit zus tzlich zum Carriage zB BE Return auch noch eine Zeilenschal tung Line Feed ausgegeben wird Stoppbits Lokales Echo a 45 C2 JV CR gt CR LF Abbildung 18 IO Einstellungen 3 12 1 Troubleshooting Wenn Ihre Terminaldarstellung ganz seltsam aussieht kann das daran liegen dass Ihr Zielsystem so schnell feuert dass das Terminalprogramm nicht damit fertig werden kann Bauen Sie dann kurze Verz gerungszeiten o ein Dieses Problem kann brigens auch unter BASIC auftreten Ursache dieses Verhaltens ist dass Windows nicht in
52. Y System bersetzte Programme Diese verbleiben nat rlich im Copyright des jeweiligen Autors Haftungsausschluss Die Firma Rakers lehnt jegliche Anspr che auf Schadenersatz auf grund von Softwarefehlern ab Genaueres siehe unsere allgemeinen Gesch ftsbedingungen
53. Zum Compilieren wird der Text im Editor automatisch gespeichert und dann ein externer Programmaufruf zum C Compiler gestartet CESY ruft dann SDCC ber eine DOS Kommandozeile auf die eine Vielzahl von Kommandos enthalten kann Um die Erstellung dieser Kommandozeile und ihren Aufruf k mmert sich CESY Der bersetzte Code wird direkt wieder geladen und kann mit dem Monitor bearbeitet werden Au erdem entsteht ein Log File das im Falle von Fehlern oder Warnungen ebenfalls angezeigt wird ber das Log File k nnen dann die Fehlerstellen im Editor komfortabel angesprungen werden 6 1 Stand der Entwicklung In der vorliegenden Version k nnen Programme die aus einer einzigen Datei bestehen mit CESY bersetzt werden F r gr ere Projekte gibt es ein einfach zu bedienendes Projektmanagement ber das Projekte aus mehreren Dateien verwaltet bersetzt und gelinkt werden k nnen SDCC kann auch zum bersetzen von Bibliotheken verwendet werden Dies erfordert jedoch die Benutzung von der Kommandozeile Hierzu ist eine CESY Anpassung in Arbeit ber Kommandozeilen erzeugte Bibliotheken k nnen nat rlich auch mit CESY verwendet werden 6 2 Open Source Urheberrecht und Garantieverzicht SDCC ist unter der GNU Public License ver ffentlicht Das hei t dass der Compiler aber nicht CESY frei im Internet verf gbar ist und zwar mitsamt den Quelltexten Jeder darf das Programm benutzen und kostenlos weiterverbreiten gilt auch nicht f r C
54. a memory has to be activated before using it you can probably find this information on the datasheet of the microcontroller your are using see also section 3 11 Startup Code Normally SDCC will only use the first bank of registers register bank 0 but it is possible to specify that other banks of registers should be used in interrupt routines By default the compiler will place the stack after the last 28 3 4 STORAGE CLASS LANGUAGE EXTENSIONS CHAPTER 3 USING SDCC byte of allocated memory for variables For example if the first 2 banks of registers are used and only four bytes are used for data variables it will position the base of the internal stack at address 20 0x14 This implies that as the stack grows it will use up the remaining register banks and the 16 bytes used by the 128 bit variables and 80 bytes for general purpose use If any bit variables are used the data variables will be placed after the byte holding the last bit variable For example if register banks 0 and 1 are used and there are 9 bit variables two bytes used data variables will be placed starting at address 0x22 You can also use data loc to specify the start address of the data and iram size to specify the size of the total internal RAM data idata By default the 8051 linker will place the stack after the last byte of data variables Option stack loc allows you to specify the start of the stack i e you could start it after any data in the general pu
55. abeltyp DATA Die SFR Labels sind alle vom Typ DATA e BIT Bitverarbeitungsbefehle verlangen den Typ BIT Das adressierte Bit wird mit einem Punkt gekennzeichnet Falls in einer BIT Zuweisung ein Label ge 30 3 7 Assembler Syntax braucht wird muss dieses vom Typ DATA und vorher definiert sein Nicht al le Adressen sind Bit adressierbar sondern nur 20h 2fh und 80h 88h F8h e EQU Befehle die eine Konstante erwarten ben tigen den EQU Typen Die Konstante darf 8bit oder 16bit breit sein Einige Operatoren wie LO oder HI arbeiten nur mit Konstanten Grunds tzlich gilt f r die Typen BIT EQU und DATA dass ein Label vor den Zugriff definiert sein muss Das zwingt den Programmierer alle Definitionen am Anfang des Programms zu t tigen Beim Typ CODE w re das freilich nicht sinn voll Beispiel zu den Label Typen weg CODE 2000h zaehler DATA 50h TI BIT SCON 1 SFR Label RI BIT 98h 0 test BIT 10h 5 Fehler konst8 EQU 8 konst16 EQU 1600h Marke JZ weg CODE Beispiele LUMP Marke MOV DPTR weg MOV DPTR Marke MOV A zaehler DATA Beispiele MOV A zaehler Fehler MOV Gril BIT Beispiele MOV A konst8 EQU Beispiele MOV DPTR konst16 3 7 3 Zahlensysteme und Arithmetik Ungekennzeichnete Zahlen werden als Dezimalzahlen interpretiert Hexadezimal und Bin rzahlen werden mit einem nachgestellten h bzw b markiert Ascii Zeichen d rfen mit Ausnahme von Steuerzeichen wie Komma Klammer
56. al optimizations are disabled when the program is compiled using the large model it is therefore recommended that the small model be used unless absolutely required 3 17 1 2 External Stack Attention this option wasn t maintained for a long time and is quite buggy Small programs might work You ve been warned The external stack xstack option is located in pdata memory usually at the start of the external ram segment and is 256 bytes in size When xstack option is used to compile the program the parameters and local variables of all reentrant functions are allocated in this area This option is provided for programs with large stack space requirements When used with the stack auto option all parameters and local variables are allocated on the external stack note support libraries will need to be recompiled with the same options The compiler outputs the higher order address byte of the external ram segment into port P2 see also section 4 1 therefore when using the External Stack option this port may not be used by the application program 3 17 2 DS390 Memory Model The only model supported is Flat 24 This generates code for the 24 bit contiguous addressing mode of the Dallas DS80C390 part In this mode up to four meg of external RAM or code space can be directly addressed See the data sheets at www dalsemi com for further information on this part Note that the compiler does not generate any code to place the processor
57. ander libero it fbradasc FLP5 html indent Formats C source Master of the http home hecnet nl d ingamells beautify html white spaces srecord Object file conversion checksum http srecord sourceforge net ming objdump Object file conversion Part of binutils should be there anyway doxygen Source code documentation sys http www doxygen org ee Oe kdevelop IDE has anyone tried integrating http www kdevelop org Spee g seab Unixom splint Statically checks c sources http www splint org Debugger serves nicely as GUI to http www gnu org software ddd sdedb Unix only 6 4 Related documentation recommended reading Name Subject File c refcard pdf C Reference Card 2 pages http www refcards com about c html c faq C FAQ list http www eskimo com scs C faq top html Latest datasheet of the target CPU Revision history of datasheet S S Muchnick Advanced Compiler Design and bookstore very dedicated probably read other books first Implementation 6 5 Some Questions Some questions answered some pointers given it might be time to in turn ask you some questions e can you solve your project with the selected microcontroller Would you find out early or rather late that your target is too small slow whatever Can you switch to a slightly better device if it doesn t fit e should you solve the problem with an 8 bit CPU Or would a 16 32 bit CPU and or another programming l
58. anguage be more adequate Would an operating system on the target device help if you solved the problem will the marketing department be happy e if the marketing department is happy will customers be happy if you re the project manager marketing department and maybe even the customer in one person have you tried to see the project from the outside is the project done if you think it is done Or is just that other interface protocol feature configuration option missing How about website manual s internationali zls ation packaging labels 2nd source for compo nents electromagnetic compatability interference documentation for production production test software update mechanism patent issues e is your project adequately positioned in that magic triangle fame fortune fun your proj q yp g g Maybe not all answers to these questions are known and some answers may even be no nevertheless knowing these questions may help you to avoid burnout Chances are you didn t want to hear some of them burnout is bad for electronic devices programmers and motorcycle tyres 57 Chapter 8 SDCC Technical Data 8 1 Optimizations SDCC performs a host of standard optimizations in addition to some MCU specific optimizations 8 1 1 Sub expression Elimination The compiler does local and global common subexpression elimination e g i xt y4 i j x y will be translated to iTemp x y i iTemp 1 j iTemp Som
59. atei ANL A 3 Ergebnis verarbeiten und existiert eine Datei namens UNTER SRC in der das Label Unterprg defi niert ist Unterprg MOV A Pl ORL A 55h RET so liest der Assembler den Quelltext folgenderma en RET Unterprg MOV A Pl ORL A 55h RET LCALL Unterprg Label aus Include Datei ANL A 3 Ergebnis verarbeiten Bitte beachten Sie dass ein Include Befehl niemals der letzte Befehl im Text sein sollte H ngen Sie gegebenenfalls ein NOP an 33 3 CESY Referenz e L lt Dateiname gt Dieser Befehl funktioniert genau wie der I Befehl mit dem Unterschied dass die Include Datei lokal ist Sie darf keine Programmteile aus anderen Programmen auf rufen Au erdem sind die Labels dieser Datei f r das aufrufende Programm unsicht bar Dies gibt dem Programmierer eine gr ere Freiheit in der Wahl der Labels Der Preis ist dass die in der Include Datei enthaltenen Programme nur ber eine Sprungtabelle aufrufbar sind da ja keine Labels nach au en sichtbar sind Wird aus einer lokalen Datei eine globale Datei eingebunden sind deren Labels und Symbole in der einbindenden Datei sichtbar nicht jedoch eine Stufe oberhalb 3 7 6 Makros Ein Makro ist eine im Allgemeinen kurze im Quelltext oftmals wiederkehrende Be fehlsfolge Diese wird einmal definiert und kann vielmals wieder aufgerufen wer den Es k nnen Parameter angegeben werden Diese werden beim Aufruf einfach ersetzt so dass auch Parameter
60. b das Betriebssystem gestartet werden soll Letzteres empfiehlt sich wenn eine Autostart Marke gesetzt wurde dieser Einsprung fragt die Marke nicht ab so dass die M glichkeit besteht eine solche Marke wieder zu 16 schen 5 3 Aufbau eines BASIC Programms 5 3 1Zeilennummern und Sprungmarken Das CESY Basic ben tigt keine Zeilennummern Zur Zuweisung von Sprungzielen m ssen Sprungmarken Labels benutzt werden Diese bestehen aus einem Ausrufe zeichen und einer Zeichenkette die mit einem Buchstaben beginnen muss und bis zu acht Zeichen lang sein darf Beispiel Marke print Hello World goto Marke 5 3 2 Variablen Es gibt nur einen Variablentyp der einen 24bit Integer darstellt Der Zahlenum fang reicht von 8 388 608 bis 8 388 607 Wenn Sie einen Flie kommawert dar stellen wollen beispielsweise 8 324 Volt so rechnen Sie einfach mit Millivolt und kommen auf 8324 mV was sich als Integervariable darstellen l sst Variablen werden durch Buchstaben dargestellt Es gibt 26 Variablen entsprechend der Buchstaben A bis Z die gem der Einstellungen im Optionen Fenster im inter nen oder externen Datenspeicher abgelegt werden In der Voreinstellung werden die Variablen A bis P im internen Datenspeicher DATA Segment und die Variablen Q bis Z im externen Datenspeicher XRAM abgelegt Beispiel a 8324 b a 1000 print a Volt b a 1000 b print b Millivolt 5 3 3 Konstanten Oft wird ein Programm les
61. barer wenn numerische Konstanten durch sinnvolle Na men ersetzt werden Dazu k nnen zu Beginn des Programms numerische Konstan ten deklariert werden brigens sind alle Namen der SFR Register zus tzlich vorde finiert Diese vordefinierten Konstanten haben hohe Priorit t k nnen also vom Be 56 5 3 Aufbau eines BASIC Programms nutzer nicht ver ndert werden Der Prozessortyp muss nat rlich im Assembler Men richtig eingestellt worden sein Die mit define definierten Konstanten sind case sensitiv m ssen also in der kor rekten Gro und Kleinschreibung verwendet werden Beispiel define OK MELD c000 define BITMUSTER amp 10010110 outstr OK MELD out P1 BITMUSTER brigens ist das SFR Register B nicht zug nglich da es vom Compiler mit der Variable B verwechselt wiirde 5 3 4Array Zus tzlich zu den Variablen gibt es ein Datenfeld Array Es wird durch den Klammeraffen dargestellt Dieses Datenfeld wird immer im XRAM Segment abgelegt und zwar hinter den normalen Variablen Die erlaubte L nge des Daten feldes wird nicht berpr ft sie h ngt allein vom Speicherplatz ab Beispiel 1 2 2 4 3 8 print 2 3 2 5 3 5 Operatoren Alle wichtigen Operatoren stehen zur Verf gung Priorit ten generell von links nach rechts Punktrechnung vor Strichrechnung Po tenz wie Punktrechnung 5 3 6 Verbinden von Befehlen Mehrere Befehle in einer Zeile werden durch ein S
62. besteht bli Datei Bearbeiten Ansicht BASIC C Assembl Debugger Im Export Optionen Fenster Hilfe BER EEE cherweise aus folgenden Kompo Erz lox nenten ap Main Bund EB F cEsyso2 lB LCD C e Hauptprogramm d h ein tB ms iname Programm das einen main Block enth lt e Unterprogramme d h Pro gramme die keinen main Block enthalten und in das Hauptprogramm eingebun den werden Abbildung 22 Projekt Manager beim Festlegen der e Zu jedem Unterprogramm Hauptdatei eine entsprechende Header Datei h die die Prototypen der im Unterprogramm bereitgestellten Funkti onen enth lt Der Projekt Manager dient zur Definition der Dateien d h welche Datei als Haupt programm und welche anderen Dateien als Unterprogramme dienen Header Dateien werden in das Projekt nicht durch den Projekt Manager sondern ber inc lude Anweisungen im Hauptprogramm eingebunden 83 6 Der C Compiler 6 5 1 ffnen Neues Projekt Mit dem ffnen Befehl wird ein bestehendes Projekt ge ffnet oder ein neues Pro jekt erstellt F r ein neues Projekt muss man den Dateinamen angeben CESY fragt dann ob unter diesem Namen ein neues Projekt erstellt werden soll Die Projekt Datei PRJ und alle Programmdateien m ssen im selben Ordner stehen Nach dem ffnen geht das Projektfenster auf in dem der Projektordner angezeigt wird Den Projektordner kann man nur durch da
63. changes in the inline assembler code Please go through the peephole optimizer rules defined in file SDCCpeeph def before using this option 3 12 2 Naked Functions A special keyword may be associated with a function declaring it as _naked The _naked function modifier attribute prevents the compiler from generating prologue and epilogue code for that function This means that the user is entirely responsible for such things as saving any registers that may need to be preserved selecting the proper register bank generating the return instruction at the end etc Practically this means that the contents of the function must be written in inline assembler This is particularly useful for interrupt functions which can have a large and often unnecessary prologue epilogue For example compare the code generated by these two functions volatile data unsigned char counter void simpleInterrupt void interrupt 1 countertt void nakedInterrupt void interrupt 2 _naked _asm inc _counter does not change flags no need to save psw reti MUST explicitly include ret or reti in _naked function _endasm For an 8051 target the generated simplelnterrupt looks like _simpleInterrupt push acc push b push dpl push dph push psw mov psw 0x00 inc _counter pop psw pop dph pop dpl pop b pop acc reti whereas nakedInterrupt looks like _hakedInterrupt inc _counter does not change flags no need to save psw reti
64. chnittstellenauswahl wird nicht berpr ft ob die Schnittstellen vorhanden und in der Windows Installation richtig angemeldet sind 4 2 Die CESY Firmware Damit CESY mit dem Zielsystem kommunizieren kann muss auch darauf eine Software laufen Diese Software liegt dem Programmpaket als Quelltext bei Die Datei hei t SYS51 SRC f r den 8031 8032 SYS535 SRC f r den 80535 und SYS537 SRC f r den 80C537 Dieses kleine Betriebssystem sorgt f r Download Upload Programmstart Moni torfunktionen und die Debuggerfunktionen Da es ber die serielle Schnittstelle kommuniziert ist die bertragungsgeschwindigkeit und die Quarzfrequenz im Sys temprogramm festzulegen Dies geschieht am Anfang des Quelltextes ber die La bel BAUD und Q Als Beispiel sind in den Programmen 9600 bit s und 11 0592 MHz Quarzfrequenz 384 28800 eingetragen Beim 80535 80537 kann auch mit dem Baudraten Generator gearbeitet werden 51 4 Hardware und CESY Firmware Des weiteren m ssen noch die Einsprungadressen der Interrupts und der Autostart Adresse eingetragen werden Alle Spr nge auf die Interruptvektoren 0003h bis 006bh werden zu den entsprechenden Adressen in Ihrem Programmbereich weiter geleitet Dazu ist das Label D_Start anzupassen Es ist auf die Adresse 8000h vor eingestellt Ein Autostartprogramm w rde so also an der Adresse 8000h starten und alle Interrupts w rden dorthin weitergeleitet Dies ist besonders f r das Funktionie r
65. cks vermerkt das Programm in einem Array Bei der Suche werden in einer FOR NEXT Schleife alle Eintr ge durchgegangen und mit dem Suchbegriff verglichen Die gefundene Nummer wird schlie lich ausgegeben 75 5 BASIC Compiler 5 5 Interrupts in BASIC In dieser CESY Version ist eine Erweiterung enthalten die das Einbinden von Interrupt Routinen in BASIC Programme erm glicht Hierzu einige Hinweise Eingebunden k nnen nur Assembler Programme werden Sie m ssen eine besondere Form haben Siehe dazu die Datei INT_DEMO INC Die Form ist hnlich der f r normale Include Dateien es m ssen aber bestimmte Label Namen verwendet werden e Das Einbinden geschieht mit dem Include Befehl INCLUDE symbol filename i Das Besondere daran ist das i welches an die normale Syntax angeh ngt wird Es sorgt daf r dass eine Interrupt Sprungtabelle in die Laufzeitbibliothek aufgenommen wird die auf die eingebundene Include Datei verweist e Das Setzen von Bits in den Interrupt Konfigurationsregistern muss vom Basic Programm aus von Hand also mittels OUT oder SET etc durchgef hrt werden e Wichtig Sie als Programmierer m ssen darauf achten dass alle Register richtig auf den Stack gerettet werden und nach dem Abarbeiten des Programms auch wieder restauriert werden e Es m ssen ALLE in der Vorlage INT_DEMO INC angegebenen Eintr ge in die Sprungtabelle verwendet werden 5 6 Besonderheiten bei C517 C509 Prozessoren Der v
66. d ab der durch adresse bestimmten Stelle in den Speicher geschrieben Der String ist nullterminiert das hei t erkann beliebig lang sein und wird durch eine bin re Null beendet Um die Speicherverwaltung muss sich das BASIC Programm k mmern Ausf hrliche Erkl rung und Beispiele siehe Kapitel String Verarbeitung 59 5 BASIC Compiler e BYTE wert gibt einen Wert als zweistellige Hexadezimalzahl auf die durch den DEVICE Befehl spezifizierte Art aus Beispiel Ausgabe BYTE 245 F5 e WORD wert gibt einen wert als vierstellige Hexadezimalzahl auf die durch den DEVICE Befehl spezifizierte Art aus Beispiel Ausgabe A 8000 1F40 WORD A e LWORD wert gibt einen wert als sechsstellige Hexadezimalzahl auf die durch den DEVICE Befehl spezifizierte Art aus Beispiel Ausgabe A 7654321 8B344F LWORD A e TAB wert gibt eine durch wert spezifizierte Anzahl von Leerstellen aus Beispiel PRINT A B TAB 4 PRINT B 5 4 2 Struktur Befehle e GOTO Sprungmarke springt in die durch die Sprungmarke gegebene Zeile Beispiel Marke print Hallo goto Marke Dank der Strukturbefehle wie IF THEN ELSE ENDIF oder REPEAT UNTIL ist es nicht mehr notwendig den GOTO Befehl noch zu verwenden Guter Program mierstil zeigt sich in GOTO freien Programmen 60 5 4 BASIC Referenz e GOSUB Sprungmarke RETURN ruft ein Unterprogramm auf und f hrt nach dessen Bearbeitung mit dem Programm fort Das Unterprog
67. d and output the results to standard output 0 lt path file gt The output path resp file where everything will be placed If the parameter is a path it must have a trailing slash or backslash for the Windows binaries to be recognized as a path stack auto All functions in the source file will be compiled as reentrant i e the parameters and local variables will be allocated on the stack see section Parameters and Local Variables for more details If this option is used all source files in the project should be compiled with this option callee saves function1 function2 function3 The compiler by default uses a caller saves convention for register saving across function calls however this can cause unnecessary register pushing amp popping when calling small functions from larger functions This option can be used to switch the register saving convention for the function names specified The compiler will not save registers when calling these functions no extra code will be generated at the entry amp exit function prologue amp epilogue for these functions to save amp restore the registers used by these functions this can SUBSTANTIALLY reduce code amp improve run time performance of the generated code In the future the compiler with inter procedural analysis will be able to determine the appropriate scheme to use for each function call DO NOT use this option for built in functions such as _mulint if this option is u
68. d char errcd pragma restore P3 errcd void some_isr interrupt 2 set error 10 Ohne die pragma Direktive k nnte es sein dass der Parameter errcd berschrieben w rde und der Aufruf durch die Interrupt Service Routine w rde zu einem errati schen Laufzeitverhalten des Programms f hren 6 7 6 Interrupt Service Routinen Kommen wir jetzt zu den schon angesprochenen Interrupt Service Routinen ISR Diese sind in C besonders einfach zu programmieren da sich der Programmierer weder um das Stacken von Registern noch um die Interrupt Vektoren k mmern muss 88 6 7 Spracherweiterungen und Besonderheiten Beispiel void timer isr void interrupt 1 using 2 Die Zahl hinter dem Wort interrupt bezeichnet die Interrupt Nummer die die ISR bedient Das Wort using bezeichnet die verwendete Registerbank Um die Freiga be der Interrupts und deren Priorit tsschema muss sich der Programmierer aber noch selbst k mmern Die Registerbanken sollten sorgf ltig vergeben werden Interrupt Service Routinen ffnen T r und Tor f r einige hochinteressante Bugs o Wenn die ISR Variablen ndert auf die andere Routinen zugreifen dann sollten diese Variablen als volatile deklariert werden o Wenn der Zugriff auf solche Variablen nicht atomar ist d h er besteht aus mehr als einem einzigen Maschinenzyklus dann sollte der betreffende Inter rupt maskiert disabled werden w h
69. den Die Einstellungen f r Data und ExtendedData Segment k nnen Sie einfach auf Auto belassen Starten Sie nun den Compiler Soll x ten Programmfehler auftreten so I m u Speicherbereiche Gr enpr fung Speichersegmente wird ein Fenster ge ffnet in dem Code segment trex MIT Code i000 hex bytes gt t Senmantilhaxi F XRAM 3000 hex bytes die Ausgabe Logdatei angezeigt XRAM segment hex C000 Boe ites ee wird Fehler werden in roter Farbe Data Segment hex 10 Auto C Stack 0 hex bytes 2 z iData Segment hex 30 V Auto angezeigt Warnungen in orange An mars ee 5 s n 3 i sual Smal arge und Mitteilungen in gr n Klicken 7 Externen Stack verwenden auf eine Fehlermeldung oder eine Ordner f r zus tzliche Include Dateien h Warnung in der eine Zeilennummer er Ordner f r zus tzliche Bibliotheken angegeben wird f hrt direkt ins Editorfenster auf die betroffene Zei Zus tzliche Compiler Linker Definitionen le Log Datei anzeigen immer nach Fehler C nie Eventuelle Programmfehler werden ok rn hier genauso angezeigt wie im As sembler Wenn Sie die Endadresse beachten werden Sie bemerken dass Ihr Programm auch in C etwa 4 kB lang ist Das meiste ist allerdings auch hier die Standard Bibliothek die immer mitgeschleppt wird Wenn Ihr Programm dop pelt so lang wird hei t das also nicht da
70. den Eine Anwendung f r so etwas w re z B ein in ein Telefon integriertes Telefonbuch e Alphanumerische Eingaben Mit dem Befehl INSTR kann ber die serielle Schnittstelle eine Zeichenkette vom Benutzer angefordert werden die dann direkt in den Speicher geschrieben wird e Numerische Eingaben und Programmergebnisse k nnen mit Hilfe des DEVICE Befehls an die gew nschte Speicherstelle geschrieben werden Dabei wird mit DEVICE die Speicherstelle festgelegt an der die Zeichenkette beginnen soll e Ausgaben aus dem Speicher sind mit dem OUTSTR Befehl m glich Wenn mit dem DEVICE Befehl dann noch eine Zieladresse angegeben wird hat man einen einfachen und schnellen Kopiervorgang e Die L nge eines Strings kann mit dem LENGTH Befehl leicht ermittelt werden 73 5 BASIC Compiler e Vergleiche Zwei Strings werden mit Hilfe der EQSTR Funktion verglichen Beispiel 1 Eingabe Ausgabe A a000 PRINT Ihr Name Ihr Name Wurst _ Ihr Name Thomas _ INSTR A B A LENGTH A 1 PRINT Ihr Vorname Ihr Vorname Hans _ Ihr Vorname Thomas _ INSTR B C B LENGTH B 1 DEVICE C OUTSTR B DEVICE C LENGTH C 1 OUTSTR A POKE C LENGTH c DEVICE 0 PRINT gt gt Hans Wurst gt Thomas Thomas OUTSTR C IF EQSTR A B PRINT Vor und Vor und Nachname sind ja Nachname sind gleich ja gleich ENDIF Erkl rung des Beispiels zun chst wird die Adresse festgelegt ab der St
71. der Lage ist das Fenster so schnell zu scrollen dass der Emp fangspuffer nicht berl uft Achtung Das Terminal verwaltet einen eigenen Satz von Einstellungen der von den I O Einstellungen von Monitor Download verschieden sein kann 49 4 Hardware und CESY Firmware 4 Hardware und CESY Firmware 4 1 Hardware CESY arbeitet mit jeder Hardware die auf einem 8051 kompatiblen Mikrocontrol ler aufbaut Die 80x51 Familie umfasst inzwischen Tausende von Typen die sich in ihrer internen Hardware unterscheiden und demnach verschiedene SFR Register besitzen Sie sind jedoch alle Code kompatibel so dass Sie CESY f r alle Typen benutzen k nnen 4 1 1 Download von Programmen Bekanntlich ist der 80x51 Controller in Harvard Architektur aufgebaut Programme und Daten werden streng getrennt in separaten Speicherb nken aufbewahrt die XRAM und Code ROM genannte werden Sollen nun Programme per Download zum Zielsystem geschickt werden erweist sich diese Architektur als st rend Es muss ein RAM Speicher her der in beiden Speicherb nken sichtbar ist so dass Pro gramme aus dem RAM ausf rbar werden Fast alle erh ltlichen Controllerplatinen besitzen die M glichkeit einen solchen Speicherbereich einzurichten Dazu werden das RD und das PSEN Signal des Controllers AND verkn pft z B mit einem TTL IC 7408 und an den RD bzw OE Eingang des RAM Chips gelegt Falls Ihr System diese M glichkeit nicht von sich aus bietet kann sie mit ein
72. dumpall Will cause all the above mentioned dumps to be created 3 2 10 Redirecting output on Windows Shells By default SDCC writes it s error messages to standard error To force all messages to standard out put use use stdout Additionally if you happen to have visual studio installed in your windows machine you can use it to compile your sources using a custom build and the SDCC vc option Something like this should work e sdce bin sdec exe vc model large c InputPath 25 3 3 ENVIRONMENT VARIABLES CHAPTER 3 USING SDCC 3 3 Environment variables SDCC recognizes the following environment variables SDCC_LEAVE_SIGNALS SDCC installs a signal handler to be able to delete temporary files after an user break C or an exception If this environment variable is set SDCC won t install the signal handler in order to be able to debug SDCC TMP TEMP TMPDIR Path where temporary files will be created The order of the variables is the search order In a standard nix environment these variables are not set and there s no need to set them On Windows it s recommended to set one of them SDCC_HOME Path see section 2 2 Install Paths SDCC_INCLUDE Path see section 2 3 Search Paths SDCC_LIB Path see section 2 3 Search Paths There are some more environment variables recognized by SDCC but these are solely used for debugging purposes They can change or disappear very quickly and will ne
73. e 63 8 1 OPTIMIZATIONS CHAPTER 8 SDCC TECHNICAL DATA mov a _i swap a anl a 0x0f mov _i a In general SDCC will never setup a loop if the shift count is known Another example unsigned int i i gt gt 9 will generate mov a _i 1 mov _i 1 0x00 clr rre a mov i a 8 1 9 Bit rotation A special case of the bit shift operation is bit rotation SDCC recognizes the following expression to be a left bit rotation unsigned char i unsigned is needed for rotation d i lt lt 1 1 gt gt N will generate the following code mov a _i rl a mov _i a SDCC uses pattern matching on the parse tree to determine this operation Variations of this case will also be recognized as bit rotation i e i i gt gt 7 i lt lt 1 left bit rotation 8 1 10 Nibble and Byte Swapping Other special cases of the bit shift operations are nibble or byte swapping SDCC recognizes the following expres sions unsigned char i unsigned int jj i j i lt lt 4 i gt gt 4 Jj lt lt 8 j gt gt 8 99599 and generates a swap instruction for the nibble swapping or move instructions for the byte swapping The j example can be used to convert from little to big endian or vice versa If you want to change the endianness of a signed integer you have to cast to unsigned int first Note that SDCC stores numbers in little endian format i e lowest order f
74. e peep file lt filename gt option The rule language is best illustrated with examples replace mov 1 a mov a l by mov l a The above rule will change the following assembly sequence mov rl a mov a rl to mov rl a Note All occurrences of a n pattern variable must denote the same string With the above rule the assembly sequence mov rl a mov a r2 65 8 1 OPTIMIZATIONS CHAPTER 8 SDCC TECHNICAL DATA will remain unmodified Other special case optimizations may be added by the user via peep file option E g some variants of the 8051 MCU allow only ajmp and acall The following two rules will change all 1jmp and 1call to ajmp and acall replace lcall 1 by acall 1 replace ljmp 1 by ajmp 1 The inline assembler code is also passed through the peep hole optimizer thus the peephole optimizer can also be used as an assembly level macro expander The rules themselves are MCU dependent whereas the rule language infra structure is MCU independent Peephole optimization rules for other MCU can be easily programmed using the rule language The syntax for a rule is as follows rule replace restart lt assembly sequence gt n y by BF EN lt assembly sequence gt n if lt functionName gt n lt assembly sequence gt assembly instruction each instruction including labels must be on a separate line The optimizer will apply to th
75. e den Dateinamen und den umaute ste Dateityp angeben m ssen Bitte Dateityp Laufwerke nennen Sie das Programm Weite S gt E ERST SRC SRC steht f r Source engl f r Quelltext Der Dateityp ist schon auf Quelltext voreingestellt Abbildung 3 Datei Dialog Jetzt ist es an der Zeit das Programm zu assemblieren Das ist mit CESY ganz ein fach Mit dem Befehl Assembler Assemblieren startet der Assembler bersetzt und linkt das Programm und schreibt es schlie lich in den virtuellen Speicher von 15 2 Installation und erste Schritte CESY Fertig Am Ende bekommen Sie noch die Endadresse und die Anzahl der assemblierten Zeilen angezeigt Wenn ein Fehler im Programm gefunden wurde wird eine Fehlermeldung ausgegeben und im Editor wird die entsprechende Zeile hervorgehoben dargestellt Weitere Fehler k nnen per Men befehl angezeigt wer den Mit dem Monitor schau Monitor virtuell 1 Torx T 8000 2 97 C2 8C C2 SD 53 89 FO 43 89 01 20 90 FD 78 S C a en wit nun nach ob das 8010 64 D2 97 12 80 1F DS FB C2 97 30 90 ED 80 ED 75 d 0 fe zl 8020 8A FO 75 8C DS D2 8C 30 8D FD C2 8C C2 8D 22 FF u 0 a Programm auch m Spei 8030 FF FF FE FF FF FF FF FE FF FF FF FF FF FF FF FE 7 8040 EF FF FE FF FF FF FE FF FF FF FF FF FF FF FF FE cher angekommen 1st 8050 FE FF FF FF FE FF FF FF FF FF FF FF FF FF FE FE gi H H pA 806
76. e in Hexadecimal or Decimal format e g stack loc 0x20 or stack loc 32 Since the sp register is incremented before a push or call the initial sp will be set to one byte prior the provided value The provided value should not overlap any other memory areas such as used register banks or the data segment and with enough space for the current application data loc lt Value gt The start location of the internal ram data segment The value entered can be in Hexadecimal or Decimal format eg data loc 0x20 or data loc 32 By default the start location of the internal ram data segment is set as low as possible in memory taking into account the used register banks and the bit segment at address 0x20 For example if register banks 0 and 1 are used without bit variables the data segment will be set if data loc is not used to location 0x 10 idata loc lt Value gt The start location of the indirectly addressable internal ram of the 8051 default value is 0x80 The value entered can be in Hexadecimal or Decimal format eg idata loc 0x88 or idata loc 136 bit loc lt Value gt The start location of the bit addressable internal ram of the 8051 This is not implemented yet Instead an option can be passed directly to the linker W1 bBSEG lt Value gt out fmt ihx The linker output final object code is in Intel Hex format This is the default option The format itself is documented in the documentation of srecord out fmt s
77. e registers when calling these functions extra code need to be manually inserted at the entry amp exit for these functions to save amp restore the registers used by these functions this can SUBSTANTIALLY reduce code amp improve run time performance of the generated code In the future the compiler with inter procedural analysis may be able to determine the appropriate scheme to use for each function call If callee saves command line option is used the function names specified in pragma callee_saves is appended to the list of functions specified in the command line SDCPP supports the following pragma directives preproc_asm switch _asm _endasm block preprocessing on off Default is on The pragma s are intended to be used to turn on or off certain optimizations which might cause the compiler to generate extra stack data space to store compiler generated temporary variables This usually happens in large functions Pragma directives should be used as shown in the following example they are used to control options amp optimizations for a given function pragmas should be placed before and or after a function placing pragma s inside a function body could have unpredictable results pragma save save the current settings pragma nogcse turnoff global subexpression elimination pragma noinduction turn off induction optimizations int foo large code pragma restore turn the op
78. e rules one by one from the top in the sequence of their appearance it will terminate when all rules are exhausted If the restart option is specified then the optimizer will start matching the rules again from the top this option for a rule is expensive performance it is intended to be used in situations where a transformation will trigger the same rule again An example of this not a good one it has side effects is the following rule replace restart pop 1 push 1 by 7 nop Note that the replace pattern cannot be a blank but can be a comment line Without the restart option only the innermost pop push pair would be eliminated i e pop arl pop ar2 push ar2 push arl would result in pop arl nop push arl with the restart option the rule will be applied again to the resulting code and then all the pop push pairs will be eliminated to yield 7 nop 7 nop A conditional function can be attached to a rule Attaching rules are somewhat more involved let me illustrate this with an example 66 8 2 ANSI COMPLIANCE CHAPTER 8 SDCC TECHNICAL DATA replace ljmp 5 sjmp 5 2 if labelInRange The optimizer does a look up of a function name table defined in function callFuncByName in the source file SDCCpeeph c with the name labellnRange If it finds a corresponding entry the function is called Note there can be no parameters specified for these functions in this case the use
79. e subexpressions are not as obvious as the above example e g a gt b i c 10 a gt b i d 11 In this case the address arithmetic a gt b i will be computed only once the equivalent code in C would be iTemp a gt b i iTemp c 10 iTemp d 11 The compiler will try to keep these temporary variables in registers 8 1 2 Dead Code Elimination int global void f inti i dead store global 1 dead store global 2 return global 3 unreachable will be changed to 60 8 1 OPTIMIZATIONS int global void f global 2 return 8 1 3 Copy Propagation int int i Jy i 10 j 1 return j will be changed to int f int i Jy i 10 j 10 return 10 CHAPTER 8 SDCC TECHNICAL DATA Note the dead stores created by this copy propagation will be eliminated by dead code elimination 8 1 4 Loop Optimizations Two types of loop optimizations are done by SDCC loop invariant lifting and strength reduction of loop induction variables In addition to the strength reduction the optimizer marks the induction variables and the register allocator tries to keep the induction variables in registers for the duration of the loop Because of this preference of the register allocator loop induction optimization causes an increase in register pressure which may cause unwanted spilling of other temporary variables into the stack data space The com
80. e the L lt library path gt option to tell the linker where to look for these files if they are not in the current directory Here is an example assuming you have the source file foomain c and a library foolib lib in the directory mylib if that is not the same as your current project sdcc foomain c foolib lib L mylib Note here that mylib must be an absolute path name The most efficient way to use libraries is to keep separate modules in separate source files The lib file now should name all the modules rel files For an example see the standard library file libsdcc lib in the directory lt installdir gt share lib small 3 1 4 Using sdcclib to Create and Manage Libraries Alternatively instead of having a rel file for each entry on the library file as described in the preceding section sdeclib can be used to embed all the modules belonging to such library in the library file itself This results in a larger library file but it greatly reduces the number of disk files accessed by the linker Additionally the packed library file contains an index of all include modules and symbols that significantly speeds up the linking process To display a list of options supported by sdcclib type sdcclib To create a new library file start by compiling all the required modules For example sdcc c _divsint c sdcc c _divuint c sdcc c _modsint c sdcc c _moduint c sdcc c _mulint c This will create files _divsint rel _divuint rel _modsi
81. eassemblieren kann nur eine Fehlermeldung auftreten Speicher berlauf Dabei wird der Reassemblerlauf abgebrochen Sie sollten dann den Bereich verklei nern Reassemblieren Sie nicht mehr als 8 kB auf einmal Schon aus 8 kB Code werden schnell mehrere Tausend Zeilen Quelltext 3 8 3 Zu erwartende Probleme Wenn am Ende des Programms eine Tabelle steht diese aber dem CESY nicht als Tabelle bekanntgemacht wurde und in dieser Tabelle ein relativer Sprungbefehl steht der auf eine Adresse au erhalb des Programms steht so zeigt der Sprung auf ein Label das jedoch nicht deklariert wird wie auch wenn es au erhalb des Pro gramms stehen m sste Eine eventuelle Assemblierung des erzeugten Textes w rde nat rlich einen Fehler anzeigen Es ist durchaus normal wenn sich der erhaltene Quelltext nicht auf Anhieb assemb lieren l sst Eine berarbeitung ist meistens unumg nglich 40 3 9 Der Monitor 3 9 Der Monitor berblick ber die 64 kByte virtuellen Speicher und wenn Sie den PC mit einem 80x51 System verbunden haben auch ber die Speicherb nke des Zielsystems ver schafft Ihnen der Monitor Er wird aus dem Dateimen mit dem Befehl Neu Mo nitor aufgerufen 0000 FE FE 0010 FE FE 0020 FE FE 0030 FE FE 0040 FE FE 0050 FE FE 0060 FE FE 0070 FE FE 0080 FE FE 0090 FE FE nann rg co Abbildung 13 Monitor Sie sollten den Monitor gut beherrschen denn er ist das m chtigste Instrument des Entwickl
82. ebt sich die Anfangsadresse entsprechend SDCC Einstellungen x Speicherbereiche Gr enpr fung Speichersegmente Code segment hex Code hex bytes XRAM segment hex a hey Bytes Data hex bytes pep an man a Stack hex bytes iData Segment hex IV Auto Memory Modell Stack hex I Auto Small Large l Externen Stack verwenden Ordner f r zus tzliche Include Dateien h Ordner f r zus tzliche Bibliotheken Zus tzliche Compiler Linker Definitionen Log Datei anzeigen immer nach Fehler nie OK Abbruch Abbildung 20 SDCC Optionen 81 6 Der C Compiler o Wenn Bit Variablen verwendet werden so werden diese im bit addressierbaren Speicher von 20h bis 27h abgelegt Variablen werden dann dahinter abgelegt e iData Segment bezeichnet den internen Datenspeicher der nur indirekt ad ressierbar ist Dieser liegt eigentlich immer bei 80h Eine eigene Einstellung macht nur Sinn wenn aus irgendwelchen Gr nden ein Bereich freigehalten werden soll e Stack der Stack wird in der automatischen Einstellung hinter den Variablen in das Daten Segment gelegt Ferner kann noch eine Gr enpr fung der einzelnen Segmente eingeschaltet wer den Wichtig ist das Speichermodell Im Modus small werden alle deklarierten Variab len im internen Datenbereich abgelegt sofern dies nicht in der Deklaration anders bestimmt wird Dies erm glicht einen sehr effizienten
83. efinition of macros Passed to the preprocessor M Tell the preprocessor to output a rule suitable for make describing the dependencies of each object file For each source file the preprocessor outputs one make rule whose target is the object file name for that source file and whose dependencies are all the files include d in it This rule may be a single line or may be continued with newline if it is long The list of rules is printed on standard output instead of the preprocessed C program M implies E C Tell the preprocessor not to discard comments Used with the E option MM Like M but the output mentions only the user header files included with include file System header files included with include lt file gt are omitted Aquestion answer Assert the answer answer for question in case it is tested with a preprocessor conditional such as if question answer A disables the standard assertions that normally describe the target machine Umacro Undefine macro macro U options are evaluated after all D options but before any include and imacros options dM Tell the preprocessor to output only a list of the macro definitions that are in effect at the end of preprocessing Used with the E option dD Tell the preprocessor to pass all macro definitions into the output in their proper sequence in the rest of the output d
84. ei Startadressen auf volle xx00h und bei Endadressen auf volle xxFFh Das hilft Probleme zu vermeiden Die Zieladresse sollte mit der Startadresse identisch sein Die Download Adressen k nnen brigens auch automatisch eingesetzt werden Das stellen Sie bei Optionen Assembler ein Starten Sie nun Ihr Programm mit Im Export Programm starten und testen Sie es auf korrekte Funktion Wenn Sie bis hier gefolgt sind wissen Sie wie man mit CESY schnell und einfach ein Programm editiert assembliert auf das Zielsystem l dt und startet CESY kann jedoch noch viel mehr Es stellt z B einen leistungsf higen und komfortablen De bugger einen Reassembler und einen BASIC Compiler zur Verf gung Letzter wird im n chsten Kapitel beschrieben alle anderen Informationen finden Sie in der Onli ne Hilfe 2 5 3 BASIC Beispiel Das gleiche Programm soll jetzt in BASIC geschrieben werden Sie werden lernen dass die Programmierung erheblich einfacher ist jedoch auch erheblich mehr Res sourcen verbraucht werden Wenn Sie beispielsweise die beliebten ATMEL Controller mit eingebautem FLASH PROM verwenden sto en Sie schnell an die Speicher Obergrenze Bei gr eren Systemen mit echten 8031 oder 80535 o spielt es jedoch heutzutage keine Rolle mehr ob Ihr Programm zwei oder 32 kB verbraucht dann sollten Sie wirklich die Benutzung einer Hochsprache wie BASIC in Erw gung ziehen Dank des Compilers und der schnellen 24 bit Integer Arithme
85. eige der aktuellen Programmzeile im Debugger Wenn Sie zum Erstellen Ihrer Programme lieber einen etwas komfortabler ausges tatteten Editor verwenden m chten so steht dem nichts im Wege er sollte nur wie auch der CESY Editor reinen ASCII Code erzeugen Der CESY Editor unterst tzt Sie bei der Eingabe eines Assembler Quelltextes ganz besonders indem er die Eingaben automatisch formatiert Die Funktion ist bei der Eingabe eines BASIC oder C Programmes nat rlich eher hinderlich und l sst sich daher mit STRG Return abschalten Der Editor ist intuitiv bedienbar Die Funktionen im einzelnen e Cursorsteuerung mit den Cursortasten e Wortweise links rechts mit STRG Cursor links rechts e Posl Ende bef rdert den Cursor ans linke bzw rechte Zeilenende e Bild auf ab bl ttert eine Seite nach oben unten e STRG Pos1 Ende bringt den Cursor an den Anfang bzw das Ende des Textes e TAB springt zur n chsten Tabulator Position e Einf gen und L schen wie gewohnt mit Entf und Einfg Tasten e STRG Y l scht die Zeile in der der Cursor steht 21 3 CESY Referenz 28 e Einfg schaltet zwischen Einf ge und berschreibmodus um e STRG Return schaltet die automatische Formatierung ein oder aus Textbl cke werden mit den Cursortasten bei gehaltener Shift Taste oder mit der Maus markiert Mit Hilfe der Zwischenablage k nnen Sie Textausschnitte zwi schen verschiedenen Anwendungen oder zwischen verschiedenen Editor Fenstern
86. einfacher zu programmieren Nun zum Programm Zun chst definieren wir die Variablen und setzen den Ausga bepin auf null brigens brauchen wir f r diese einfache Programm kein stdio h oder weitere Bibliotheken sbit at 0x90 P1 0 sbit at 0x97 P1 7 int i 7 void main void while P1 7 Q Dann wird auf die gedr ckte Taste an P1 0 gewartet while P1_0 1 Einschalten verz gern und ausschalten P17 1 for i 0 i lt 10000 i Ga Pl 7 0 Jetzt noch darauf warten dass die Taste wieder losgelassen wird und dann wieder von vorne anfangen while P10 0 Fertig Sie sollten das Programm nun abspeichern Stellen Sie bitte den Dateityp auf C ein Wenn Sie das Programm das n chste Mal laden wird das automatische Einriicken sofort deaktiviert Das Compilieren des Programms erfordert auch fiir den C Compiler einige Einstel lungen die im Dialogfenster Optionen C angegeben werden miissen Die meis 19 2 Installation und erste Schritte ten Einstellungen betreffen die Speicherverwaltung Zumeist sind die Vorgaben aus reichend Stellen Sie als Startadresse 0x8000 und als Datenadresse 0xC000 ein Wenn Sie unser LAB 537 verwenden stellen Sie als Startadresse bitte 0000h ein da dieser Bereich von der CESY Firmware f r Benutzerprogramme freigeschal tet ist Die Interruptvektoren liegen dann auch auf jeden Fall richtig Das XRAM Segment sollte noch auf 8000h gesetzt wer
87. embedded in the library file itself Library files created using sdcclib are used as described in the preceding sections 3 2 Command Line Options 3 2 1 Processor Selection Options mmcs51 mds390 mds400 mhc08 mz80 mgbz80 mavr Generate code for the Intel MCS51 family of processors This is the default processor target Generate code for the Dallas DS80C390 processor Generate code for the Dallas DS80C400 processor Generate code for the Motorola HC08 family of processors added Oct 2003 Generate code for the Zilog Z80 family of processors Generate code for the GameBoy Z80 processor Not actively maintained Generate code for the Atmel AVR processor In development not complete AVR users should prob ably have a look at avr gcc http savannah nongnu org download avr libc snapshots 20 3 2 COMMAND LINE OPTIONS CHAPTER 3 USING SDCC mpicl4 Generate code for the Microchip PIC 14 bit processors p16f84 and variants In development not complete mpicl6 Generate code for the Microchip PIC 16 bit processors p18f452 and variants In development not complete mtlcs900h Generate code for the Toshiba TLCS 900H processor Not maintained not complete mxa51 Generate code for the Phillips XA51 processor Not maintained not complete 3 2 2 Preprocessor Options I lt path gt The additional location where the pre processor will look for lt h gt or h files D lt macro value gt Command line d
88. emikolon verbunden Beispiel a 13 print Freitag der a te 5 BASIC Compiler 5 3 7 Programm starten Nach dem Compilieren und anschlie endem Download kann das BASIC Programm gestartet werden Wenn Ihr Programm ber die serielle Schnittstelle kommuniziert sollten Sie vor dem Start Befehl ein Terminalfenster ffnen bzw anklicken und es aktivieren Geben Sie aber nichts ein denn ein eingegebenes Zeichen w rde das Monitorprogramm durcheinanderbringen Starten Sie dann Ihr Programm Der erste Befehl sollte ein delay 10 Befehl sein der eine Sekunde wartet Solange ben tigt der Start Befehl zum Umschalten in das Terminalfenster 5 4 BASIC Referenz 5 4 1Ein Ausgabe Befehle e PRINT druckt einen airthmetischen Ausdruck oder einen konstanten Text aus Arithmetische Ausdr cke werden ohne Formatierungsangaben rechtsb ndig mit neun Stellen ausgegeben Mehrere Ausdr cke oder Texte sind durch Kommata zu trennen Mit dem Doppelkreuz wird der folgende Ausdruck auf n Stellen formatiert Mit dem Prozent Zeichen wird das Platzhalter Zeichen festgelegt Beispiel Ausgabe A 2 PRINT 123456789 123456789 PRINT A 4 A 2 2 PRINT 2 0 A 02 PRINT TEST TEST PRINT TEXT TEXT Die Ausgabe erfolgt zun chst ber die serielle Schnittstelle Zum Testen Ihrer Pro gramme ist daher das in CESY eingebaute Terminal Programm sehr n tzlich Mit Hilfe des DEVICE Befehls kann die Ausgabe jedoch auf ein LCD Display oder di rekt in ein
89. en Speicherbereich umgeleitet werden 58 5 4 BASIC Referenz e INPUT variable Einlesen numerischer Variablen vom Benutzer Wird ein Text angegeben so wird dieser gefolgt von einem Doppelpunkt ausgegeben Danach wartet der Befehl auf eine Eingabe e Beispiel INPUT A INPUT Text B e Ausgabe Text Die Ausgaben des Befehle erfolgen wie beim PRINT Befehl Die Eingaben werden ausschlieBlich von der seriellen Schnittstelle geholt Daher macht dieser Befehl nur Sinn wenn ein Terminal an das Zielsystem angeschlossen ist e OUTCHAR wert gibt ein ASCII Zeichen aus Auch dieser Befehl wird gem DEVICE Anordnung auf der seriellen Schnittstelle auf einem LCD Display oder in einen Speicherbereich ausgegeben wobei letzteres nicht viel Sinn macht Beispiel OUTCHAR 65 e INCHAR holt ein Zeichen von der seriellen Schnittstelle Beispiel A INCHAR PRINT A e OUTSTR adresse gibt einen String der ab der durch adresse bestimmten Stelle im Speicher steht aus Der String ist nullterminiert das hei t erkann belie big lang sein und wird durch eine bin re Null beendet Um die Speicherverwal tung muss sich das BASIC Programm k mmern Ausf hrliche Erkl rung und Beispiele siehe Kapitel String Verarbeitung e INSTR adresse funktioniert hnlich wie der INPUT Befehl nur dass anstatt eines numerischen Wertes ein String von der seriellen Schnittstelle geholt wird Jedes eingegebene Zeichen wird geechot Der String wir
90. en eines BASIC Programmes wichtig denn die Echtzeituhrfunktion ben tigt den TIMER Interrupt Wenn Sie also mit den voreingestellten Werten arbeiten k nnen m ssen Sie nur noch das Programm assemblieren und k nnen dann sofort loslegen 4 2 1 Ressourcen Von der CES Y Firmware verwendete Ressourcen e Data 50h 56h e Stack 30h 4Fh oder weniger je nach Programm e Registerbank RB3 18h 1Fh f r das Betriebssystem e Registerbank RBO 00h 17h f r Programme im Einzelschrittbetrieb e Registerbank RB3 18h 1Fh fiir Programme die mit Start gestartet werden Ihr Programm darf nat rlich seine Registerbank frei ausw hlen denn beim R ck sprung in CESY wird RB3 wieder hergestellt Auch der Stackpointer darf neu initia lisiert werden aber ein R cksprung zu CESY ist in diesem Fall nicht m glich au Ber mit LIMP 0 52 4 2 Die CESY Firmware 53 5 BASIC Compiler 5 BASIC Compiler Bei weniger zeitkritischen Anwendungen ist es meist bequemer wenn das Projekt in einer Hochsprache entwickelt werden kann Die professionellste Hochsprache f r Mikrocontroller ist sicherlich C aber die Sprache C gilt nicht ganz zu unrecht als schwierig zu erlernen und viele Anwender f hlen bevorzugen die weniger formelle Sprache BASIC Fr here CESY Versionen 2 x besa en einen BASIC Interpreter mit dem sich zwar ordentlich programmieren lie der aber doch sehr langsam war Der nun in CESY enthaltene Compil
91. en und Besonderheiten An dieser Stelle sollen die Erweiterungen und Besonderheiten des SDCC Compilers beschrieben werden die ber den Sprachumfang von ANSI C hinausgehen bzw die dazu im Widerspruch stehen 6 7 1 Speicherklassen data near Dies ist die Vorgabe f r die Benutzung des small Speichermodells Daten die als data oder synonym near deklariert wurden finden im internen Speicher Platz Beispiel data unsigned char test data xdata far Umgekehrt ist dies die Vorgabe f r das large Speichermodell Daten die als xdata oder far deklariert wurden werden im XRAM abgelegt Beispiel xdata unsigned char test _Xdata idata Variablen die als idata deklariert wurden platziert der Linker im indirekt adressierbaren internen Datenspeicher 85 6 Der C Compiler code Diese Speicherklasse ist praktisch wenn Konstanten im Code Speicher abgelegt werden sollen Beispiel code char test_vektor a r wet I FEN bit Dies ist zugleich eine Deklaration von Datentyp und Speicherklasse Eine als bit deklarierte Variable wird im bit adressierbaren Speicher des Controllers abgelegt Beispiel bit test bit test_bit 1 if test_bit 1 then sfr sbit Zugriff auf Special Function Registers und zugeh rige Bit Variablen Beispiel sfr at 0x80 PO sbit at 0xd7 CY 6 7 2 Zeiger Werden Zeiger benutzt so muss sichergestel
92. ende Unterpunk Abbildung 21 Compiler Men s te e Compilieren Das Programm das sich im Editor befindet wird bersetzt und gelinkt Nach dem bersetzen wird im Erfolgsfall der erzeugte Code in den virtuellen Speicher geladen Je nachdem wie CESY konfiguriert ist Optio 82 6 5 Projekt Manager nen Eigenschaften wird eine BIN und eine HEX Datei erzeugt Im Fal le eines Fehlers wird die vom Compiler erzeugte LOG Datei angezeigt Kli cken auf eine Fehlermeldung springt in das Editorfenster auf die entspre chende Zeile e Compilieren ohne Linker Hier findet kein Link Vorgang statt und es werden keine bin ren Daten erzeugt Dieser Befehl dient zum Testen von Unterpro grammen die in ein Projekt eingebunden werden und nur im Zusammenhang mit einem Hauptprogramm das eine main Routine enth lt funktionsf hig ist e Comp Down Start bersetzt und linkt das Programm Wenn erfolgreich wird das Programm zum Zielsystem geschickt und dort gestartet Hierzu muss in den CESY Eigenschaften die Option Setze Download Adressen au tomatisch aktiviert sein e Projekt Befehle f r den Projekt Manager Der Linker gibt Meldungen dass er aufgerufene Funktionen nicht gefun den hat lediglich als Warnung aus Das Programm wird trotzdem er zeugt und in den virtuellen Speicher geladen Im Falle mysteri ser Pro srammfehler schauen Sie bitte in die Log Datei 6 5 Projekt Manager Ein gr eres Projekt
93. ent zur Kompatiblit t mit fr heren BASIC Versionen in denen die Pseu dovariablen nicht setzbar waren Beispiel SETDATE 28 02 e DELAY zehntelsekunden h lt das Programm f r die spezifizierte Zeit gege ben in Zehntelsekunden an Beispiel DELAY 40 wartet vier Sekunden e OPENCLEK initialisiert die Echtzeituhr Wenn im BASIC Optionen Fenster die Checkbox Echtzeituhr initialisieren angeklickt wurde wird die Uhr automa tisch zu Anfang des Programms initialisiert e CLOSECLK Stoppt die Echtzeituhr indem der damit verbundene TimerO ge stoppt wird Dieser Timer steht nun f r andere Aufgaben zur Verf gung 5 BASIC Compiler 5 4 9 Analog Digital Wandler e GETAD MUX RefLow RefHigh Liest den ADC des 80C535 80C537 C552 C509 aus Auch andere Controller die einen ADC eigebaut haben der auf dieselbe Weise angesprochen wird wie der 80C535 k nnen benutzt werden Der erste Parameter selektiert im Multiplexer den gew nschten Eingang Bei Benut zung eines 80C537 k nnen vom BASIC alle 12 Eing nge benutzt werden Der zweite und dritte Parameter legen zusammen den Wertebereich fest und zwar in Prozent der Referenzspannung Vref die extern angelegt ist RefLow und Ref High d rfen sich um maximal 1V unterscheiden Bei echten 10 bit ADCs werden die Referenzspannungen nicht verwendet und m ssen auf 0 gesetzt werden Beispiel Ausgabe A GETAD 0 0 100 IFS A lt 64 THEN A GETAD 0 0 25 PRINT A 129
94. entuell eine serielle Schnittstelle Falls Probleme mit der bertragung auf treten sollten alle Monitorfenster und das Terminalfenster geschlossen das Zielsys tem zur ckgesetzt und das Monitorfenster erneut in der gew nschten Ansicht ge ff net werden Bei jedem Scrollen wird das Monitorfenster neu aufgebaut Ist eine andere Ansicht als die des virtuellen Speichers gew hlt so kann der Neuaufbau unter Umst nden einige Zeit dauern Eine schnelle Verbindung zum Zielsystem mindestens 4800 bit s ist w nschenswert 3 10 Der Debugger F r die Funktionen des Debuggers ist das CESY Systemprogramm im Zielsystem erforderlich dessen Beschreibung Sie im Abschnitt Hardware der Online Hilfe finden Au erdem muss die Leitung INTO auf Masse gezogen werden damit der Debugger nach jedem Programmschritt einen Statusbericht vom Zielsystem erh lt Auch dies ist genau im Hardware Kapitel nachzulesen 42 3 10 Der Debugger Der Debugger ist ausschlie lich f r das Testen von Assemblerprogrammen gedacht BASIC Programme k nnen auch getestet werden wenn man sie zun chst mit dem Pr compiler bersetzt und dann assembliert Man bleibt aber in jedem Fall auf As sembler Ebene C Programme k nnen zurzeit nicht im Debugger behandelt werden Dies ist jedoch in Arbeit 3 10 1 Debugger Men Das Debugger Man enth lt drei Men punkte e Assembler e Source Level e Breakpoint Der erste Men punkt ist zum Debuggen von Programmen vorgesehe
95. er bertrifft die Geschwindigkeit des Interpreters um das Hundertfache Insbesondere die extrem schnelle 24bit Integer Arithmetik mit einem Zahlenumfang von 8 388 607 macht den Compiler auch f r komplexe Aufgaben stellung hinsichtlich Datenaufnahme und analyse nutzbar Dennoch sollten Sie sich ein wenig auch in Assembler auskennen und mit den wich tigsten CESY Funktionen sowie den Funktionen Ihres Controllerboards vertraut sein 5 1 bersetzen Das BASIC men bietet zwei Befehle an e Compilieren startet den Compilerlauf gem den im Optionen BASIC Men festgelegten Einstellungen und legt den Code direkt im virtuellen Speicher ab Auf Wunsch k nnen die Start und Endadressen gleich ins Download Fenster bernom men werden Der Code ist fertig zum Ausf hren e Pr compilieren startet den Compilerlauf gem Einstellungen erzeugt aber kei nen Opcode sondern Assembler Quelltext und stellt ihn in einem Editorfenster dar Sie k nnen wenn es n tig ist jetzt selbst nderungen und Optimierungen am Code vornehmen 5 2 Einstellungen Sie m ssen im Assembler Men den Prozessortypen einstellen f r den Sie Ihr Pro gramm conpilieren m chten Der Compiler ben tigt folgende Einstellungen um ein funktionierendes Programm zu erstellen e Startadresse Hier startet das Programm dahinter folgt die Einsprungadresse f r den Timer Interrupt der die Echtzeituhr bedient Wenn hier 0000h angegeben wird ist das Programm
96. er f r kleine Prozessoren Die Referenz f r SDCC liegt separat bei Der SDCC ist komplett in CESY eingebunden d h Sie k nnen ein C Programm genauso bersetzen wie ein Assembler oder Basic Programm Der SDCC ben tigt eine 32 bit Version von Windows d h es l uft erst ab Windows 95 Der Compiler muss separat installiert werden Die Installation ist ganz einfach 11 2 Installation und erste Schritte e Starten Sie das Installationsprogramm Dieses heisst je nach Version etwa SDCC_2_4_0_SETUP EXE e Die Installation erfolgt nun automatisch Der Installationspfad sollte aller dings nicht wie vorgegeben im Programme Ordner liegen sondern etwa C SDCC Dies erleichtert den Umgang wenn SDCC ber die Eingabeauf forderung aufgerufen wird e F r den Betrieb mit dem CESY Monitorprogramm muss der Startup Code abge ndert werden Die ge nderten Dateien sind in der Archiv Datei ce systartup zip Kopieren Sie diese Datei in den SDCC Ordner und entpacken Sie ihn dort Es werden f nf Dateien die alle mit startup anfangen er setzt e Wichtig Starten Sie den PC neu auch wenn das Installationsprogramm Sie nicht dazu auffordert Damit ist der SDCC Compiler installiert Wenn ein Teil des Tests nicht funktionie ren sollte konsultieren Sie die C Dokumentation Im Notfall hilft eine e mail an uns Rufen Sie dazu den Compiler von der Eingabeaufforderung auf wie folgt sdcc print search dirs und sch
97. erbreitete SAB C517 bzw 80C537 von Infineon und seine Ableger z B SAB C509 verf gen ber einige Besonderheiten die vom BASIC unterst tzt werden Insbesondere sind dies der Arithmetik Koprozessor und der flexible Baudraten Generator Der 537 Modus wird eingeschaltet indem im Assembler Men die entsprechende Option 80x537 C517A C509 aktiviert wird 5 6 1 Baudraten Generator Der Baudraten Generator wird standardm ig benutzt Damit er brigt sich der Befehl SERCLOSE Die Baudrate fiir den SERBAUD Befehl errechnet sich wie folgt hardwarerate 256 Quarzfrequenz in Hz 32 Baudrate in bit s 76 5 7 Fehlermeldungen Man rechnet nach dass f r einen 11 0592 MHz Quarz und 9600 bps der Wert von 220 n tig ist Der Timer 1 der sonst f r die serielle Schnittstelle benutzt wird ist frei 5 6 2 Arithmetik Unit MDU Dieser arithmetische Coprozessor wird f r Multiplikation und Division benutzt F r Multiplikation bringt dies aufgrund des sowieso schon schnellen Multiplikations Algorithmus nicht viel Bei Division dagegen betr gt der Geschwindigkeitsvorteil etwa einen Faktor von 15 Beachten Sie bitte dass die MDU nicht benutzt werden kann wenn der Divisor gr er ist als 65535 In diesem Falle wird auf den Standard Algorithmus zur ckgegriffen 5 7 Fehlermeldungen Der Compiler meldet jeweils den ersten Fehler den er findet und bricht danach den Compiliervorgang ab Folgende Fehlermeldungen k nnen auftreten
98. erden musste Leider funktioniert die Ausgabe per printf sprintf Befehl noch nicht 6 8 Weitere Dokumentation Weitere Dokumentation z B zur Inline Assembler Programmierung und zu den Standardbibliotheken gibt es in der englischsprachigen Original Anleitung zum SDCC in Ausz gen ab Seite 96 in diesem Handbuch 90 6 8 Weitere Dokumentation 91 7 Diverses 7 Diverses 7 1 Ei gensc haften Einstellungen f r alle bersetzer E x Im Men Optionen Eigenschaften k nnen Sie einige automatische Funkti 7 Signalton bei Fehler onen konfigurieren die Ihnen das Leben etwas erleichtern sollen IV Setze Download Adressen automatisch IV Setze Datei Adressen automatisch Die Adressbereiche f r den Download 7 Hox Datei nach beratan erzeugen oder f r das Speichern des erzeugten Codes k nnen automatisch auf Start und Endadresse des Assemblier bzw Compilierablaufes gesetzt werden IV Bin rdatei nach bersetzen erzeugen IV Editor Autosave IV Editor Block berschreiben J Verschachtelte Includes Assember BETA Nach dem Assemblieren Compilieren kann wahlweise direkt eine Hex OK Abbruch Bin rdatei erzeugt werden Diese fin De En den Sie in dem Ordner in dem auch der Quelltext steht Abbildung 23 Einstellungen f r alle bersetzer Editor Autosave sorgt daf r dass Ihre Texte vor dem Assemblieren auf Platte gespeichert werden Im Falle eines CESY Absturzes verlieren Sie keine
99. ereich aus dem virtuellen Speicher aus je nach dem ob der Befehl bei aktivem Editor oder Monitorfenster aufgerufen wird Bein Ausdrucken werden Zeilennummern und Zeilenschattierun gen mitgedruckt Drucken von Text Wurde vorher der Quelltext assembliert kann in das Listing der generierte Opcode eingebunden werden Knopf Assembler Info Dies ist u erst n tzlich da man nun zu jeder Zeile die Adresse im Code zu 26 3 5 Der Editor ordnen kann Wahlweise kann der gan ze Text oder nur der markierte Teil Knopf Nur Markierung gedruckt werden Hexdump drucken xi Drucken auf Standarddrucker HP LASERJET Ill HPPCL5MS LPT1 e Drucken eines Hexdumps Der Hex dump wird entweder mit 16 oder mit 32 Byte pro Zeile ausgedruckt Startadresse hex Endadresse hex Es ist nicht m glich aus dem Datei 1 32 Byte pro Zeile Men ein C Projekt zu speichern da dies bei jeder Anderung ohnehin auto matisch erfolgt i i Abbruch Abbildung 9 Hexdump drucken 3 5 Der Editor Sie k nnen ein Editorfenster im Men Datei mit den Optionen Neu Editor oder ffnen ffnen Bei ersterem Befehl wird die AutoFormat Funktion automa tisch gesetzt bei letzterem Befehl nur wenn die ge ffnete Datei vom Typ src oder inc ist Der Editor dient nicht nur zum Eingeben Ihres Programmes sondern auch zur An zeige der Position von gemeldeten Programmfehlern zum Setzen von Breakpoints sowie zur Anz
100. esse muss bei den Compiler Einstellungen angegeben werden e DEVICE wert schaltet die Ausgabe aller Ausgabebefehle zwischen serieller Schnittstelle LCD Display oder XRAM Speicher um DEVICE 0 schaltet auf die serielle Schnittstelle DEVICE 1 schaltet auf das LCD Display DEVICE v mit v gt 1 leitet die Ausgabe an den mit der Adresse v beginnenden Speicherbereich PRINT HALLO LCD DEVICE 0 PRINT HALLO TERMINAL DEVICE SA000 PRINT HALLO SPEICHER Die M glichkeit Ausgaben in den Speicher zu schreiben ist f r eine Stringverarbeitung sehr n tzlich und wird dort n her beschrieben e DISGO position legt die Position der n chsten Ausgabe auf dem LCD Display fest Bei zweizeiligen Displays beginnt die zweite Zeile ab der Position 64 Erste Zeile 64 Zweite Zeile 5 4 4 5 4 5 Speicherbefehle e POKE adresse byte schreibt ein Byte an die spezifizierte Adresse im XRAM Segment Beispiel POKE A000 80 PRINT PEEK SA000 63 5 BASIC Compiler e PEEK adresse liest ein Byte aus dem XRAM Segmant an der spezifizierten Adresse Beispiel POKE A000 80 PRINT PEEK SA000 e PEEKC adresse liest ein Byte aus dem Code Segmant an der spezifizierten Adresse Beispiel POKE 1000 80 PRINT PEEKC 1000 Da mit PEEK aus einer anderen Speicherbank gelesen wird als mit POKE beschrie ben werden kann ergibt sich ein anderes Ergebnis e POKED adresse byte schreibt ein Byte an die spezif
101. f Ihre Festplatte kopiert werden Ferner sind im Programm Manager Windows 3 1 bzw im Startmen ab Windows 95 Eintr ge auf das CE SY Programm und die Hilfedatei zu setzen Schlie lich muss noch der externe C Compiler SDCC installiert werden falls auch in C programmiert werden soll Dank des Installationsprogramms geschehen die ersten beiden Schritte vollautoma tisch Sie m ssen nur die gew nschten Verzeichnisse angeben den Rest bernimmt das Installationsprogramm Legen Sie nun bitte Ihre CES Y Installationsdiskette oder CD ein und starten Sie Ihr Windows Betriebssystem 2 1 1 Windows 3 1 NT 3 W hlen Sie im Programmanager den Men punkt Ausf hren und starten Sie das Installationsprogramm SETUP EXE auf der Installationsdiskette bzw CD 2 1 2 Windows NT 4 95 98 ME 2000 XP Klicken Sie auf den Start Schalter Ihres Systemmen s und w hlen Sie Ausf hren Starten Sie das Installationsprogramm SETUP EXE auf der Installationsdiskette bzw CD Das Installationsprogramm startet nun und fragt nach folgenden Informationen e Programmordner C PROGRA I WINCESY ist hier die Vorgabe Verwenden Sie Windows 95 so brauchen Sie nichts zu ver ndern CESY unterst tzt aus Kompatiblit tsgr nden keine langen Dateinamen daher sieht der Pfad so ver k rzt aus Falls Sie unter Windows 3 1 arbeiten geben Sie hier das Verzeichnis ein unter dem Sie CESY installieren m chten z B C WINCESY e Quelltexte Verze
102. fach deklariert Labels sind Konstanten und k nnen nicht ber schrieben werden e Syntax Fehler Der Befehl wurde nicht erkannt e Fehler bei Pseudo Befehl Der Pseudo Befehl wurde nicht erkannt oder falsch angewendet e Speicher berlauf Diese Fehlermeldung kann bei Systemen mit weniger als 16 MB Speicherplatz auftreten Dann hilft nur eins aufr sten e Label nicht gefunden Das aufgerufene Labels wurde nicht deklariert Beach ten Sie dass Konstanten im Quelltext oberhalb des Aufrufes definiert werden m ssen e Bit falsch adressiert Nur Speicherstellen im internen Datenspeicher von 20h 2fh und 80h 88h f8h sind bitadressierbar e Sprungbereich iiberschritten Der SJMP Befehl und die bedingten Sprungbe fehle erlauben nur einen Sprungbereich von 127 Byte e Falsche Adressierungsart Diese Adressierungsart ist f r den verwendeten Be fehl nicht g ltig e Block bergang bei AJMP CALL Diese Befehle sind nur in einem 2k Block g ltig Block berg nge sind nicht m glich e Nicht abgeschlossener Text Ein Text in einer DB Anweisung muss an beiden Seiten mit einfachen Anf hrungszeichen abgeschlossen werden e Falsche Labeldefinition Das Label ist ung ltig Ein Label muss immer mit ei nem Buchstaben beginnen und darf nur aus Buchstaben Ziffern und dem _ Zeichen bestehen e Pseudo Befehl zu lang Pseudo Befehle d rfen eine L nge von 32 Elementen nicht berschreiten 37 3 CESY Referenz e Makro nicht def
103. few milliseconds might be tolerable whereas a much smaller jitter will be very audible You can reenable interrupts within an interrupt routine and on some architectures you can make use of two or more levels of interrupt priorities On some architectures which don t support interrupt priorities these can be implemented by manipulating the interrupt mask and reenabling interrupts within the interrupt routine Don t add complexity unless you have to 3 10 Functions using private register banks mcs51 ds390 Some architectures have support for quickly changing register sets SDCC supports this feature with the using attribute which tells the compiler to use a register bank other than the default bank zero It should only be applied to interrupt functions see footnote below This will in most circumstances make the generated ISR code more efficient since it will not have to save registers on the stack The using attribute will have no effect on the generated code for a non interrupt function but may occasionally be useful anyway pending I don t think this has been done yet An interrupt function using a non zero bank will assume that it can trash that register bank and will not save it Since high priority interrupts can interrupt low priority ones on the 8051 and friends this means that if a high priority ISR using a particular bank occurs while processing a low priority ISR using the same bank terrible and bad things can happen
104. float h gt Fem Testprg f r 4x4 Matrix a delay 1 xdata unsigned char at Oxff80 lcd_ command include tast pruef2 inc xdata unsigned char at Oxff62 lcd data run 0O tast 0 m1 void delay unsigned int d run O tast 1 unsigned int i device 0 for i O i lt dsit print t delay 10 goto M1 void _ Sm Yr str B D PASCAL CESY801 CESYCOMP SRC TOE ia a ae ee ie eas f f CESYS OO c 5 Rakers Basic Compiler Output Generated 12 08 2004 14 15 lcd_cor bef equ F400h delay 4 dat equ F402h lcd_comdly equ Oih lcd_cor VarExt equ 4000h 8000 02 88 49 32 FF FF FF FF FF FF FF 32 FE FE FF FF Geter aivarDer equ sh 8010 FF FF FF 32 FF FF FF FF FF FF FE 32 FF FF FF FF 8020 FF FF FF 32 FF FF FF FE FF FF FF 32 12 80 E2 80 org 8000h 8030 FE AA 82 AB 83 7C 00 7D 00 C3 EC 9A ED 9B 50 07 I CLIB SRC 8040 0C BC 00 E5 OD 80 F2 22 90 FF 80 74 38 FO 90 10 essbasas see seinen 8050 04 12 80 31 90 FF 80 74 OC FO 90 10 04 12 80 31 1 mov haudrate F h 8060 90 FF 80 74 01 FO 90 10 04 12 80 31 22 AR 82 90 t LCALL SerInit 8070 FE 80 74 80 4A FO 90 00 64 12 80 31 90 FF 82 E5 t J d 1 8080 22 FO 90 00 64 12 80 31 22 AA 82 7B 00 85 23 82 8090 85 24 83 85 25 FO CO 02 CO 03 12 87 9A AC 82 AD 80A0 83 DO 03 DO 02 8B 06 EB 33 95 EO FF C3 EE 9C EF 7 Line No 0 label 8080 64 80 8D FO 63 FO 80 95 FO 50 26 EB 25 23 EC E4 Y_LABEL 80C0 35 24 FD AE 25 8C 82 8D 83 8E FO 12 87 C2 F5 22 8000
105. g mitlau fende Protokoll zum PC wird Ihr Programm um einen Faktor in der Gr enordnung 1000 langsamer Zeitkritische Programme k nnen daher nicht debuggt werden Nat rlich ben tigt der Debugger auch die serielle Schnittstelle ber die er mit CE SY in Verbindung steht Das zu debuggende Programm sollte also auch nicht auf die Schnittstelle zugreifen Diese Einschr nkungen sind in der Praxis normalerweise von untergeordneter Bedeutung da eher Algorithmen als ganze Programme getestet werden 3 10 5 Troubleshooting Der Debugger teilt sich mit den anderen Programmteilen eventuell eine serielle Schnittstelle Falls Probleme mit der bertragung auftreten sollten alle Monitor fenster das Terminalfenster und das Debugfenster geschlossen das Zeilsystem zu r ckgesetzt und das Debugfenster erneut ge ffnet werden Bedenken Sie dass der Text im Assembler mit einer leeren Zeile enden sollte An sonsten kann eine Fehlermeldung wie Bitte assemblieren Sie erst Ihren Quelltext auftreten wenn nach dem letzten Befehl im Text auch wenn das ein Sprungbefehl ist die Adresse einer weiteren Zeile gesucht wird Erscheint beim Debuggen ein Timeout Fehler obwohl der Download und der Moni tor in XRAM Ansicht funktionieren so erh hen Sie das Timeout Limit unter Op tionen I O Parameter z B auf einen Wert von 30 50 Dieser Wert gibt die War tezeit an die CESY auf die R ckmeldung vom Board wartet Leider h ngt diese Zeit von der Arbe
106. gef hrt 50 us F r die Wartezeit tr gt das BASIC Programm Verantwortung 5 4 11 Diverses e REM kennzeichnet eine Zeile als Kommentar Alles was hinter dem REM Befehl folgt wird bersprungen Beispiel Ausgabe REM PRINT Kommentar PRINT Kein Kommentar Kein Kommentar PRINT Mit Kommentar REM Kommentar Mit Kommentar e LET Variablenzuweisung Der Befehl LET wird zumeist weggelassen und die Vari ablenzuweisung steht allein 69 5 BASIC Compiler e ABS wert stellt die mathematische Betragsfunktion dar Beispiel Ausgabe A 200 PRINT ABS A 200 PRINT ABS 200 200 e RND grenze liefert eine Pseudo Zufallszahl zwischen 0 und grenze 1 Die erhaltenen Zahlen sind nat rlich nicht wirklich zuf llig sondern werden ber einen speziellen Algorithmus aus dem Programmcode generiert Daher wiederholen sie sich irgendwann Beispiel A 0 FOR I 1 TO 1000 A A RND 10 NEXT I PRINT A Ausgabe 4505 e HEX wert wert wandelt einen Hexadezimalwert in einen vom BASIC Programm verarbeitbaren Integer Wert um Beispiel Ausgabe PRINT A000 40960 PRINT HEX A000 40960 o BIN wert amp wert wandelt einen Bin rwert in einen vom BASIC Programm ver arbeitbaren Integer Wert um Beispiel Ausgabe PRINT 111001110 462 PRINT BIN 1000 8 e Quotation Oftmals kommt es vor dass etwa einer Variablen ein ASCII Code zugewiesen werden muss Dieses kann mit einem einfachen Anf hrungsze
107. gister Variable db Text 0 nebenstehende Abbildung Die Syn en rem BASIC tax Hervorhebung ist auf lteren C ASCliZeichen 0 Kommentare Rechnern recht langsam Sie kann je doch ebenfalls im Textfarben Men abgeschaltet werden C brige Zeichen Vorgaben Abbruch 3 5 1 Gesch tzter Editor Abbildung 10 Farbauswahl Dateien die vor versehentlicher nde rung gesch tzt werden sollen k nnen im Dateimen mit der Option Gesch tzt ff nen ge ffnet werden In dem nun ge ffneten Editorfenster kann der Text zwar an gezeigt aber nicht ver ndert werden ffnet man hier eine Hex Datei so wird nicht der Code in den virtuellen Speicher geladen sondern man kann den Dateiinhalt ein sehen 3 6 Der Assembler Das Assembler Men enth lt die Befehle zum As semblieren und Reassemblieren zum Anzeigen der Labeldefinitionen sowie zur Einstellung des Controller typs Sobald in diesem Men der Befehl Assemblieren angew hlt wird beginnt der Assemblerlauf In einem Fenster wird die Nummer der gerade assemblierten Zeile angezeigt Au erdem werden bei der Assemblie rung gefundene Fehler mitgez hlt Die ersten zehn Feh lermeldungen werden mit Position gespeichert Sie k nnen im Editor angesprungen werden Nat rlich k nnen unsinnige Fehlermeldungen dadurch entstehen dass der Assembler nach einem Fehler nicht wieder gut Assemblieren F9 Reassemblieren Labels anzeigen Listing Ass Dow
108. har c if head tail 1 buf head c If the code snippet assume it is saved in buffer c is compiled with SDCC then a corresponding buffer asm file is generated We define a new function to_buffer_asm in file buffer c in which we cut and paste the generated code removing unwanted comments and some Then add _asm and _endasm to the beginning and the end of the function body With a cut and paste from the asm file we have something to start with The function is not yet OK registers aren t saved void to_buffer_asm unsigned char c _asm mov r2 dpl buffer c if head tail 1 mov a _tail dec a mov r3 a mov a _head cjne a ar3 00106 ret 001068 buffer c buf headt c access to a 256 byte aligned array 35 3 12 INLINE ASSEMBLER CODE CHAPTER 3 USING SDCC mov r3 _head inc _head mov dpl r3 mov dph _buf gt gt 8 mov a r2 movx dptr a 00103 ret _endasm The new file buffer c should compile with only one warning about the unreferenced function argument c Now we hand optimize the assembly code and insert an define USE_ASSEMBLY 1 and finally have unsigned char far at 0x7f00 buf 0x100 unsigned char head tail define USE_ASSEMBLY 1 if USE_ASSEMBLY void to_buffer unsigned char c if head tail 1 buf head c telse void to_buffer unsigned char c c to avoid warning unreferenced function argument _asm
109. he result is not 4 int unsigned char 12 int signed char 3 int unsigned char 0xf4 int signed char Oxfd int 0x00 4 int Oxfffd int int int int Ox00f4 int Oxfffd 244 int 3 81 int Oxffaf Don t complain that gcc gives you a different result gcc uses 32 bit ints while SDCC uses 16 bit ints Therefore the results are different From comp lang c FAQ If well defined overflow characteristics are important and negative values are not or if you want to steer clear of sign extension problems when manipulating bits or bytes use one of the correspond ing unsigned types Beware when mixing signed and unsigned values in expressions though Although character types especially unsigned char can be used as tiny integers doing so is sometimes more trouble than it s worth due to unpredictable sign extension and increased code size e Use unsigned when it is known in advance that the value is not going to be negative This helps especially if you are doing division or multiplication bit shifting or are using an array index 55 6 1 TOOLS INCLUDED IN THE DISTRIBUTION CHAPTER 6 TIPS 6 1 6 2 NEVER jump into a LOOP Declare the variables to be local whenever possible especially loop control variables induction Since the compiler does not always do implicit integral promotion the programmer should do an explicit cast when integral promotion is required
110. hrt danach zum Debugger Abbildung 14 Debugger Fenster 43 3 CESY Referenz zur ck Alle Register Felder werden aktualisiert e Bis Breakpoint startet ein Programm mit bergabe aller Register und kehrt erst nach Erreichen eines Breakpoints zum Debugger zur ck Die Funktion kann falls das Programm den Breakpoint nicht erreicht mit der Funktion Abbruch abgebro chen werden Eine Weiterarbeit ist erst nach Verlassen des Debuggers und anschlie Bendem Reset des Zielsystems m glich e berspringen f hrt den n chsten Befehl aus Falls dieser Befehl ein Unterpro grammaufruf war wird das Unterprogramm komplett abgearbeitet erst danach wird das Debugger Fenster aktualisiert und Sie k nnen weiterarbeiten Die Funktion kann falls das Programm den Breakpoint nicht erreicht mit der Funktion Ab bruch abgebrochen werden Eine Weiterarbeit ist erst nach Verlassen des Debug gers und anschlie endem Reset des Zielsystems m glich e Abbruch bricht die Funktionen Bis Breakpoint und berspringen ab und kehrt zum Debugger Fenster zur ck Eine Weiterarbeit ist erst nach Verlassen des De buggers und anschlie endem Reset des Zielsystems m glich e Ende beendet den Debugger 3 10 3 Watches Der rechte Teil des Fensters ist fiir die Watches d h Uberwachung von SFR und Datenspeicherzellen zust ndig In einer Listbox werden die bereits definierten Ad ressen angezeigt Nach jedem Einzelschritt oder Erreichen eine
111. ibt nur eine 0 zur ck F r die Verwendung mit CESY wurde die Routine angepasst sie setzt das Prozessor Status Word PSW auf 0 um zur Registerbank 0 zu schalten Die Routine _sdec_external_startup kann vom Programm berschrieben wer den um weitere Initialisierungen vorzunehmen bevor die Standard Initialisierung der Datenbereiche erfolgt Denken Sie aber daran immer als erstes einen psw 0 Befehl einzuf gen Wenn die Routine etwas anderes als Null zur ckgibt so wird die standardm ige Variablen Initialisierung bersprungen 6 7 9 Integer Arithmetik Der Compiler verwendet drei Integer Typen o char 8 bit Nicht n tigerweise ein ASCII Zeichen o int 16 bit o long 32 bit Alle Typen gibt es mit oder ohne Vorzeichen unsigned Multiplikation und Divisi on bei den 16 und 32 bit Typen erfolgen ber externe C Funktionen die wie be reits beschrieben als nicht reentrant bersetzt sind N heres hierzu siehe die SDCC Originaldokumentation 6 7 10 Float Arithmetik SDCC kann mit Flie kommazahlen arbeiten diese Eigenschaft ist aber noch expe rimentell Die n tige Standard Bibliothek float ist in C programmiert und ist da her nicht so schnell wie sie sein k nnte w re sie in Assembler programmiert Au Berdem ist zu beachten dass die Bibliothek f r das richtige Speichermodell ber setzt wird Wir haben die Flie komma Arithmetik im small Speichermodell getestet ohne dass irgendetwas neu bersetzt w
112. ichen geschehen Beim PRINT Befehl ist diese Funktion au er Kraft gesetzt Beispiel Ausgabe a I A I print a 65 print a a e LENGTH adresse ermittelt die L nge des Strings der ab der angegebenen Ad resse im XRAM Speicher steht Beachten Sie bitte dass zus tzlich zur L nge der Nutzinformation auch noch die Speicherstelle die die terminierende Null in An 70 5 4 BASIC Referenz spruch nimmt ber cksichtigt werden muss Im Abschnitt Stringverarbeitung der Online Hilfe wird diese Funktion ausf hrlicher erl utert Beispiel Eingabe Ausgabe PRINT Eingabe INSTR a000 PRINT Lange 3 LENGTH a000 Eingabe Test_ Lange 4 e EQSTR adressel adresse2 vergleicht die Strings die an den gegebenen Adressen im XRAM Speicher stehen Die Funktion gibt 1 aus wenn beide Strings gleich lang sind und aus den gleichen Zeichen bestehen Weiteres im Kapitel Stringverarbeitung Beispiel PRINT Eingabe 1 INSTR a000 PRINT Eingabe 2 INSTR a010 IF EQSTR Sa000 a010 PRINT Gleich Eingabe Ausgabe Eingabe 1 CESY_ Eingabe 2 CESY_ Gleich e INCLUDE filename Symbol dient zum Einbinden von Assembler Routinen in BASIC Programme Er sollte nur von erfahrenen Benutzern verwendet werden Das Assemblerprogramm mit dem angegebenen Dateinamen filename wird beim Compilieren hinter dem Programm angeh ngt Es erh lt den angegebenen Symbolnamen unter dem es f r den
113. ichnis Hier werden die mitgelieferten Quelltexte z B f r das 8051 Systemprogramm abgespeichert Wenn Sie eigene Programme schreiben werden auch diese zun chst dort abgelegt e Systemverzeichnis Dorthin wird eine Datei BWCC DLL kopiert die zum Be trieb von CESY notwendig ist Diese Datei geh rt der Firma BORLAND Inc und wird von allen Programmen benutzt die mit einem Compiler dieser Firma er stellt wurden ACHTUNG Von dieser Datei gibt es verschiedene Versionen Wenn Sie nicht die mitgelieferte Version benutzen kann es vorkommen dass CESY beim Compilieren abstiirzt e Name der Programmgruppe in der die CESY Dateien zusammengefasst werden sollen 10 2 2 Installation des C Compilers Zum Start der Installation klicken Sie bitte auf Installieren Darauf werden Sie noch ge ay Programmordner Hierher werden die A CESY Programmdateien kopiert C PROGRA 1 WINCESY Systemordner Hierher wird die Datei BWCC DLL kopiert fragt ob CESY die ben tigten Verzeichnisse f r Sie erstellen soll Zuletzt ffnet sich ein weiteres Fenster mit dem Sie das Kopieren der Dateien starten Zus tzlich werden in die CAMINSSISYSTEM sem Fenster Statusinformationen zum Stand Teenie ne der Installation angezeigt Quelitexte kopiert C PROGRA 1 WINCESY SOURCE Als letztes erstellt SETUP die Programmgrup pe f r CESY Hier finden Sie Verweise auf te a ES CESY und auf die CESY Referenz Online CESY professional 7 0
114. icken Sie uns die ausgegebenen Meldungen 2 3 Deinstallation Vielleicht m gen Sie irgendwann nicht mehr mit CESY arbeiten und wollen das Programm von Ihrer Platte entfernen Dazu ist nur der CESY Ordner mit allen Pro grammdateien zu l schen Au erdem sollten die Programmgruppen gel scht wer den Die BWCC Datei im SYSTEM Ordner sollten Sie nicht l schen da auch ande re Programme darauf zugreifen k nnten Weitere Dateien werden von CESY nicht installiert Der SDCC Compiler kommt mit einem eigenen Deinstallationsprogramm 12 2 4 Starten von CESY 2 4 Starten von CESY Starten Sie nun CESY mit einem Doppelklick auf das CESY Symbol im Startmen Nach einer kurzen Information die nur beim ersten Starten angezeigt wird pr sen tiert sich CESY mit einem leeren Fenster und seinem Men Innerhalb dieses Fensters werden Unterfenster z B f r Editoren Monitor oder Terminal angezeigt Sie k nnen mit Datei neu diese Unterfenster aufrufen Es ist m glich beliebig viele Editor und Monitorfenster zu ffnen aber es kann nur ein Terminalfenster aufgerufen werden WINCESY pr ofessional V 8 00 Datei Bearbeiter Arsicht BASIC C Assembler Debugger Im Export Optionen Fenster Hilfe CEM elel IReIRRERER FOR FIT lolx Winclude lt atring h gt Hinclude lt stdio h gt B 0 PASCAL WINCESY PRUEF2 BAS Winclude lt loat b gt flew Testprg f r 4x4 Matrix PS detay t xdata unsigned char at Oxrtr
115. iese Adresse sie ist wie ein EQU Kommando im Assembler zu sehen F r den Fall dass sich der Inhalt der Variable durch externe Ereignisse ndern kann sollte eine Deklaration als volatile erfolgen volatile xdata at 0xf401 unsigned int lcd status Damit optimiert der Compiler wiederholte Zugriffe auf eine Speicherstelle nicht weg Volatile Deklarationen sind natiirlich auch niitzlich wenn es um die Programmierung von Interrupts geht und eine Interrupt Service Routine eine globale Variable ver ndert Nat rlich gilt die absolute Adressierung auch f r Bit Variablen 6 7 4 Parameter lokale Variablen und reentrante Funktionen Im Unterschied zu blichen C Compilern f r PC Programmierung o werden automatische lokale Variablen und Parameter vorzugsweise im Datensegment abgelegt und zwar je nach Speichermodell im internen oder externen Datenspeicher Dies entspricht einer Deklaration als static d h eine Funktion kann sich zwischen zwei Aufrufen eine Variable merken da diese statisch an die Funktion gebunden ist und nie freigegeben wird Soll jedoch eine Funktion reentrant sein d h sie ruft sich selbst auf oder wird m glicherweise durch eine Interrupt Service Routine aufgerufen d h der Prozessor befindet sich quasi simultan mehrere Male in dieser Routine so muss daf r gesorgt werden dass lokale Variablen und Parameter im Stack gespeichert werden Dies geschieht ber das reservierte Wort reentrant
116. independent Local variables can be assigned storage classes and absolute addresses e g unsigned char foo xdata unsigned char i bit bvar data at 0x31 unsigned char j In the above example the variable i will be allocated in the external ram bvar in bit addressable space and j in internal ram When compiled with stack auto or when a function is declared as reentrant this should only be done for static variables Parameters however are not allowed any storage class storage classes for parameters will be ignored their allocation is governed by the memory model in use and the reentrancy options 3 7 Overlaying For non reentrant functions SDCC will try to reduce internal ram space usage by overlaying parameters and local variables of a function if possible Parameters and local variables of a function will be allocated to an overlayable segment if the function has no other function calls and the function is non reentrant and the memory model is small If an explicit storage class is specified for a local variable it will NOT be overlayed Note that the compiler not the linkage editor makes the decision for overlaying the data items Functions that are called from an interrupt service routine should be preceded by a pragma nooverlay if they are not reentrant Also note that the compiler does not do any processing of inline assembler code so the compiler might incor rectly assign local variables and parameters of a funct
117. iniert Das Makro ist in dieser Form Schreibweise nicht defi niert worden Wie bei Labels gilt dass die Definition im Quelltext oberhalt des Aufrufes stehen muss e Parameterzahl falsch Das Makro muss mit exakt der gleichen Zahl an Para metern aufgerufen werden wie es definiert wurde 3 7 10 Bemerkung zum SDCC Compiler Der SDCC Compiler erzeugt nat rlich aus dem C Code erst einmal ein Assembler programm das in einem zweiten Schritt bersetzt wird Dieser intermedi re Code ist nie in CESY sichtbar steht aber in den erzeugten Dateien SDCC benutzt zum bersetzen dieses Codes einen anderen Assembler als den CESY Assembler so dass hier Inkompatibilit ten auftreten Wenn Sie sich einfach nicht um den Zwischenco de k mmern werden Sie keine Probleme haben 38 3 8 Der Reassembler 3 8 Der Reassembler Zu einem Crossassembler Entwicklungssystem sollte immer auch ein Reassembler geh ren denn h ufig befindet man sich in der Situation dass man ein Programm hat von dem kein Quelltext mehr vorhanden ist CESY besitzt einen komfortablen und schnellen Reassembler der sich auch von Tabellen und ASCII Zeichenfolgen nicht aus dem Konzept bringen l sst Der Reassembler arbeitet 100 symbolisch das hei t absolute und relative Spr nge sowie Ladezugriffe auf Tabellen werden automatisch an Sprung und Zieladresse mit Labels versehen Auch Spr nge die nicht auf das erste Byte eines Befehls springen werden erkannt Das Label wird vor
118. into 24 bitmode although rinibios in the ds390 libraries will do that for you If you don t use finibios the boot loader or similar code must ensure that the processor is in 24 bit contiguous addressing mode before calling the SDCC startup code Like the model large option variables will by default be placed into the XDATA segment Segments may be placed anywhere in the 4 meg address space using the usual loc options Note that if any segments are located above 64K the r flag must be passed to the linker to generate the proper segment relocations and the Intel HEX output format must be used The r flag can be passed to the linker by using the option WI r on the SDCC command line However currently the linker can not handle code segments gt 64k 3 18 Pragmas SDCC supports the following pragma directives e save this will save all current options to the save restore stack See restore e restore will restore saved options from the last save saves amp restores can be nested SDCC uses a save restore stack save pushes current options to the stack restore pulls current options from the stack See save e nogcse will stop global common subexpression elimination 42 3 18 PRAGMAS CHAPTER 3 USING SDCC noinduction will stop loop induction optimizations nojtbound will not generate code for boundary value checking when switch statements are turned into jump tables dangerous For more details see section
119. ion im Quelltext definiert ist w hrend sich gldefine unabh ngig von der Position auf den gesamten Text auswirkt Mit einer if else endif Konstruktion lassen sich die Symbole auswerten Symbole sind Case sensitiv das hei t Sie m ssen auf Gro und Kleinschreibung achten Beispiel Sdefine Reg3 MOV A 0 Sif Reg3 MOV R3 A Selse MOV RO a Sendif RET 35 3 CESY Referenz Dieses Beispiel wird im Assembler zu MOV A 0 MOV R3 A RET Ferner geben die automatisch erzeugten Symbole PRxxx den eingestellten Pro zessortypen an Diese Symbole gelten ab der Stelle an der ein P Kommando ge funden wird Findet der Assembler kein solches Kommando so wird ein globales Symbol definiert das dem per Men selektierten Prozessortypen entspricht Beispiel LP 537 MOV A 0 Sif PR537 MOV R3 A Selse MOV RO A Sendif RET Bemerkungen e Schachtelung ist nicht erlaubt e else kann weggelassen werden e Befehle sind klein zu schreiben e In INCLUDE Dateien bitte nur globale Deklarationen 3 7 8 Fehlermeldungen des Assemblers Der Assembler beschr nkt sich auf wenige eindeutige Fehlermeldungen Nach dem Auftreten eines Fehlers und Best tigung durch den Benutzer wird im Editor automa tisch die Fehlerstelle angesprungen Nicht immer ist ein Fehler auch dort zu finden wo er auftritt Besondere Vorsicht lassen Sie bitte bei mehr als einer Fehlermeldung walten Es kann sein dass der As semb
120. ion into the overlay segment if the inline assembler code calls other c functions that might use the overlay In that case the pragma nooverlay should be used Parameters and local variables of functions that contain 16 or 32 bit multiplication or division will NOT be overlayed since these are implemented using external functions e g 31 3 8 INTERRUPT SERVICE ROUTINES CHAPTER 3 USING SDCC pragma save pragma nooverlay void set_error unsigned char errcd P3 errcd pragma restore void some_isr interrupt 2 set_error 10 In the above example the parameter errcd for the function set_error would be assigned to the overlayable segment if the pragma nooverlay was not present this could cause unpredictable runtime behavior when called from an interrupt service routine The pragma nooverlay ensures that the parameters and local variables for the function are NOT overlayed 3 8 Interrupt Service Routines 3 8 1 General Information SDCC allows interrupt service routines to be coded in C with some extended keywords void timer_isr void interrupt 1 using 1 The optional number following the interrupt keyword is the interrupt number this routine will service When present the compiler will insert a call to this routine in the interrupt vector table for the interrupt number specified If you have multiple source files in your project interrupt service routines can be present in any of them but a pr
121. irst Usually 8 bit processors don t care much about endianness This is not the case for the standard 8051 which only has an instruction to increment its dptr datapointer so little endian is the more efficient byte order 64 8 1 OPTIMIZATIONS 8 1 11 Highest Order Bit CHAPTER 8 SDCC TECHNICAL DATA It is frequently required to obtain the highest order bit of an integral type long int short or char types SDCC recognizes the following expression to yield the highest order bit and generates optimized code for it e g unsigned int gint foo unsigned char hob hob gint gt gt 15 amp 1 will generate the following code 61 000A E5 01 62 000C 23 63 000D 54 01 64 000F F5 02 65 hob c 7 mov rl anl mov a _gint 1 a a 0x01 _foo_hob_1_l a Variations of this case however will not be recognized It is a standard C expression so I heartily recommend this be the only way to get the highest order bit it is portable Of course it will be recognized even if it is embedded in other expressions e g xyz gint gint gt gt 15 amp 1 will still be recognized 8 1 12 Peephole Optimizer The compiler uses a rule based pattern matching and re writing mechanism for peep hole optimization It is inspired by copt a peep hole optimizer by Christopher W Fraser cwfraser microsoft com A default set of rules are compiled into the compiler additional rules may be added with th
122. itsgeschwindigkeit Ihres Rechners ab Bei schnellen PCs kann eine Erh hung auf ca 100 notwendig sein 45 3 CESY Referenz 3 11 Kommunikation mit dem Zielsystem Das Import Export Men besitzt folgende Be fehle Download F8 e Download kopiert einen Speicherbereich vom Upload XRam Strg F8 virtuellen Speicher in den XRAM Speicher des Upload Code Zielsystems Die Start und Endadresse sowie die Startadresse im Zielsystem m ssen in einem er scheinenden Pop Up Fenster angegeben werden Strg F9 Programm starten SFR Kontrolle a ge T Batterie Backup RAM gt F r die Ubertragung ist ein Zielsystem mit CE pee iai N SY Betriebssystem erforderlich Direktausgabe e Upload XRAM kopiert einen Speicherbreich vom XRAM Speicher des Zielsystems in den virtuellen Speicher Die Start und Endadresse im Zielsystem sowie die Startadresse im virtuellen Speicher m ssen in einem er scheinenden Pop Up Fenster angegeben werden F r die bertragung ist ein Ziel system mit CESY Betriebssystem erforderlich Abbildung 15 Import Export Men e Upload CROM kopiert einen Speicherbreich vom Code ROM Speicher des Ziel systems in den virtuellen Speicher Die Start und Endadresse im Zielsystem sowie die Startadresse im virtuellen Speicher m ssen in einem erscheinenden Pop Up Fenster angegeben werden F r die bertragung ist ein Zielsystem mit CESY Betriebssystem erforderlich eProgramm starten startet ein
123. izierte Adresse im DATA Segment Beispiel POKED A0 80 PRINT PEEKD A0 128 Beachten Sie bitte dass das BASIC im DATA Segment in der Grundeinstellung den gesamten Adressbereich von Oh bis 7fh ben tigt Sie sind also auf einen Cont roller mit mehr als 128 Byte internem RAM angewiesen oder Sie miissen den Vari ablenspeicher ab38h benutzen Siehe dazu auch CALL Ausgabe e PEEKD adresse liest ein Byte aus dem DATA Segmant an der spezifizierten Adresse e Beispiel POKED A0 80 PRINT PEEKD SAO e Ausgabe 128 e CALL adresse ruft ein Maschinenprogramm auf das an der spezifizierten Ad resse im Code Segment steht Das Programm muss den Stackpointer wiederher stellen und mit dem RET Befehl enden Beispiel CALL 8146 Nachdem ein Maschinenprogramm aufgerufen wurde muss es auf irgendeine Art und Weise mit dem BASIC Programm wechselwirken k nnen Dazu kann falls vorhanden die XRAM Bank dienen die von BASIC aus mit PEEK und POKE zu lesen und zu schreiben ist Falls jedoch kein XRAM vorhanden oder frei ist muss 64 5 4 BASIC Referenz ber den internen Datenspeicher kommuniziert werden Dies kann per PEEKD und POKED geschehen Alternativ bietet sich der elegante Weg der Variablen Manipulation an Dazu muss man wissen dass die Variablen A Z der Reihe nach ab der in den BASIC Einstellungen gegebenen Adresse abgelegt werden Die Vorein stellung dazu ist 38h Das Format ist ein 24bit Integer in der
124. l Eine einfache an C angelehnte String Verarbeitung vereinfacht eine eventuelle Benutzerf hrung z B ber die serielle Schnittstelle oder ber ein ebenfalls unterst tztes LCD Display Das Konzept des BASIC lehnt sich stark an die Maschine an z B durch fest an Speicherstellen gebundene Variablen Dadurch wird der Austausch von Da ten zwischen BASIC und eingebundenen Assemblerroutinen wesentlich erleichtert Unser Tip schreiben Sie den Programmrahmen die Benutzerf hrung und arithme tik intensive Routinen in BASIC und den Rest in Assembler Sie werden staunen welch professionelle Programme das Ergebnis sein werden Damit ein reibungsloses Zusammenspiel von CESY und unserem Flaggschiff LAB 537 m glich ist wurden spezielle BASIC Kommandos f r ADC und das FLASH EPROM in CESY aufgenommen Als Neuheit in Version 8 ist der beliebte Freeware C Compiler SDCC in CESY aufgenommen worden Der Compiler ist voll in CESY integriert so dass der Benut zer wie in Basic oder Assembler gewohnt seine C Programme und Projekte nach dem bersetzen sofort im virtuellen Speicher zur Verf gung hat Au erdem gibt es einen Projektmanager mit dem komplexe Programme aus mehreren Dateien effi zient verwaltet werden k nnen a 2 1 Installation 2 Installation und erste Schritte 2 Installation und erste Schritte 2 1 Installation Zur Installation m ssen die CESY Programmdateien die Beispiele und Quelltexte sowie eine DLL Datei au
125. l beim Assembler als auch beim BASIC Programm die Startadresse auf 0000h festlegen bersetzen Sie Ihr Programm neu und speichern Sie es bin r ab Das Bin rformat sollte jeder EPROM oder FLASH Programmer lesen k nnen Ansonsten steht noch das Intel Hex Format zur Verf gung 22 2 7 Programme in ein EPROM brennen 23 3 CESY Referenz 3 CESY Referenz Dieses Kapitel gibt eine detailliertere Einf hrung in die Bedienung und Konzepte von CESY Insbesondere wird der Monitor und die Arbeit mit dem Assembler und Debugger behandelt Die BASIC und C Compiler sind Gegenstand der folgenden zwei Kapitel 3 1 Die Benutzeroberfl che Die CESY Oberfl che fasst alle ben tigten Werkzeuge zusammen Beliebig viele Editor und Monitorfenster k nnen gleichzeitig ge ffnet werden Dagegen ist das ffnen nur eines Terminalfensters m glich Wie in allen Windows Programmen k nnen die einzelnen Fenster verschoben maximiert und minimiert werden Bei Bedarf ffnen sich weitere PopUp Fenster z B f r den Debugger oder Einstellun gen Men optionen die gerade unm glich sind werden schattiert dargestellt Mit der Toolbar k nnen die wichtigsten Funktionen direkt angesprungen werden gt WinGESY professional Y 8 00 Datei Bearbeiten Ansicht BASIC C Assembler Debugger Im Export Optionen Fenster Hilfe CMe Se See Tee B D PASCAL CESY801 LCD C include lt string h gt include lt stdio h gt include lt
126. labels each case label adds one to the complexity level The complexity level is by no means an absolute measure of the algorithmic complexity of the function it does however provide a good starting point for which functions you might look at for further optimization 8 4 Retargetting for other Processors The issues for retargetting the compiler are far too numerous to be covered by this document What follows is a brief description of each of the seven phases of the compiler and its MCU dependency e Parsing the source and building the annotated parse tree This phase is largely MCU independent except for the language extensions Syntax amp semantic checks are also done in this phase along with some initial optimizations like back patching labels and the pattern matching optimizations like bit rotation etc e The second phase involves generating an intermediate code which can be easy manipulated during the later phases This phase is entirely MCU independent The intermediate code generation assumes the target machine has unlimited number of registers and designates them with the name iTemp The compiler can be made to dump a human readable form of the code generated by using the dumpraw option e This phase does the bulk of the standard optimizations and is also MCU independent This phase can be broken down into several sub phases Break down intermediate code iCode into basic blocks Do control flow amp data flow analysis on the
127. ler nach einem Fehler nicht wieder gut aufsetzt und sich mit Fehlermeldungen beschwert obwohl es dazu keinen Grund gibt Die Fehlermeldung Label nicht ge funden kann auch bei einem Tippfehler auftreten z B wenn eine Hexadezimalzahl nicht gekennzeichnet wurde Wenn ein Fehler beim Einbinden eines Makros auftritt kann nur die Stelle der Ein binde Anweisung angezeigt werden Der Fehler ist dann irgendwo im Makro zu finden Hier ist eine Fehlersuche oftmals schwierig denn man sieht nur schwer wenn lokale und globale Labels durcheinanderkommen 36 3 7 Assembler Syntax Wenn Sie Include Dateien benutzen werden auch die Fehler die dort auftreten an gezeigt Es erscheint ein Fenster in dem die ersten 10 gefundenen Fehler jeweils mit Zeilennummer und Namen der Datei in der sie aufgetreten sind angezeigt wer den In Dateien die bereits ge ffnet sind werden die fehlerhaften Zeilen automa tisch markiert Sie k nnen von der Fehlerliste aus die entsprechenden Fenster ankli cken Falls die Datei noch nicht ge ffnet war k nnen Sie sie auch von dem Fehler listen Fenster aus ffnen Die Fehlerliste l sst sich auch vom Bearbeiten Men aus anzeigen Bedenken Sie aber dass jede Stelle nur einmal angesprungen werden kann obwohl sie weiterhin in der Fehlerliste erscheint Es ist m glich eine Datei ein zweites Mal zu ffnen obwohl bereits ein entsprechendes Fenster offen ist 3 7 9 Die einzelnen Fehlermeldungen e Label mehr
128. lieren ohne Linker e Bei erfolgreicher bersetzung wird der Bin rcode des gesamten Programms in den virtuellen Speicher geladen und kann dort weiterverarbeitet werden e Header Dateien m ssen mit include unter h und nicht mit inclu de lt unter h eingebunden werden Der Linker gibt Meldungen dass er aufgerufene Funktionen nicht gefunden hat lediglich als Warnung aus Das Programm wird trotzdem erzeugt und in den virtuellen Speicher geladen Im Falle mysteri ser Programmfehler schau en Sie bitte in die Log Datei 84 6 6 Die Programmiersprache C 6 5 5 Projekt speichern Das Projekt wird bei jeder nderung automatisch gespeichert so dass es daf r kei nen Befehl gibt 6 6 Die Programmiersprache C Der SDCC Compiler enth lt eine 80 seitige Dokumentation auf Englisch Diese liegt als PDF Datei im Ordner sdec doc Die wichtigsten Aspekte werden in die sem Handbuch auf Deutsch besprochen Fortgeschrittene Anwender sollten sich die Originaldokumentation aber zu Gem te f hren Wichtige Ausz ge darauf finden Sie ab Seite 96 Der Compiler versteht ANSI C 95 mit einigen Erg nzungen f r den Betrieb auf Mikrocontrollern Eine kosteng nstige Dokumentation des ANSI C Sprachum fanges und der Standardbibliotheken ist im Verlag O Reilly erschienen Peter Prinz und Ulla Kirch Prinz C kurz amp gut O Reillys Taschenbibliothek 120 Seiten 8 Euro in jeder Buchhandlung 6 7 Spracherweiterung
129. llersockels 8031 Pins 10 und 11 miteinander und schalten Sie den Strom wieder ein ff nen Sie ein Terminalfenster und geben Sie einige Zeichen ein Diese sollten nun doppelt erscheinen wenn die Pins verbunden sind ansonsten einfach Ist das nicht der Fall berpr fen Sie bitte Ihr Kabel Dieser Standard Test sollte in der Anleitung Ihres Boards genau beschrieben sein e Assemblerprogramme funktionieren aber BASIC Programme wollen nicht lau fen gt Steht Ihr Programm an einer Einsprungadresse die in der Firmware f r die In terruptquellen festgelegt ist Label D_start Haben Sie den Controllertyp 8031 32 80535 80537 im Men richtig einge stellt Wenn Sie einen anderen Controller verwenden sollten Sie 8031 oder 8032 einstellen Eventuell m ssen Sie in der Datei CLIB51 SRC nderungen vor nehmen Verzichten Sie auf die Benutzung und Initialisierung der Uhr und der seriellen Schnittstelle So werden keine internen Hardwareresourcen des Controllers be nutzt Wenn das funktioniert nehmen Sie die Peripherie schrittweise wieder in Betrieb Steht die Datei CLIB SRC im selben Verzeichnis wie CESY EXE Wenn dies nicht der Fall ist kann es sehr seltsame Fehlermeldungen geben Kopieren Sie die Dateien dann an die richtige Stelle 21 2 Installation und erste Schritte 2 7 Programme in ein EPROM brennen Vielleicht m chten Sie Ihre soeben erstellten Programme in ein EPROM brennen Dazu m ssen Sie sowoh
130. losschleife am Programmende ben tigen eine Verz gerungs zeit nach einem Display Kommando Diese muss unter Abbruch LCD Delay angegeben werden Es sind Zahlenwerte von 1 bis 15 erlaubt Was f r ein be stimmtes Display ben tigt wird muss ausprobiert werden Einstellungen von 1 bis 4 sind f r alle uns bekannten Displays ausreichend ule IV Initialisiere Serielle Schnittstelle IV Initialisiere Echtzeituhr Abbildung 19 BASIC Einstellungen Der Compiler unterstiitzt auch Displays die an einem I O Port angeschlossen sind Dazu ist sowohl fiir die Befehls als auch fiir die Datenadresse die Portadresse an zugeben Am gleichen Wert fiir beide Felder erkennt der Compiler dass es sich um ein Port Display handelt Genaueres im Hardware Kapitel e Quarzfrequenz und Ubertragungsgeschwindigkeit Die Quarzfrequenz muss fiir den genauen Gang der Echtzeituhr angegeben werden und ist au erdem fiir die se rielle Schnittstelle wichtig Die bertragungsgeschwindigkeit f r die serielle Schnittstelle muss korrekt angegeben werden damit das BASIC ber den PRINT Befehl mit einem Terminal programm kommunizieren kann Weiter muss noch angegeben werden ob das Programm die serielle Schnittstelle oder die Echtzeituhr braucht Falls nicht k nnen die Ressourcen anderweitig ge nutzt werden 55 5 BASIC Compiler Als letztes geben Sie bitte an ob nach Ausf hrung des Programms ein eine Endlos schleife gesprungen oder o
131. lt werden dass der Zeiger auf das richtige Speichersegment zeigt Dies geschieht dadurch dass ein normaler generischer Zeiger aus drei Bytes besteht von denen ein Byte spezifiziert auf welches Segment die Adresse zeigt Um einen effizienteren Code zu erzeugen kann dem Zeiger aber auch explizit sein Speichersegment zugewiesen werden Ein generischer Zeiger wird wie folgt deklariert char xdata p Der Zeiger p liegt physikalisch im XRAM Segment Er kann je nach seiner sp teren Zuweisung auf beliebige Datentypen in beliebigen Speichersegmenten zeigen Wird der Deklaration eine weitere Speicherklassen Deklaration vorangestellt so hat man keinen generischen Zeiger mehr sondern der Zeiger weist explizit in das angegebene Segment data char xdata p deklariert einen Zeiger der auf eine 8 bit Datenstruktur im Data Segment zeigt Der Zeiger selbst ist im XRAM gespeichert 86 6 7 Spracherweiterungen und Besonderheiten 6 7 3 Absolute Adressierung Neben der Adressierung von SFR interessiert den Mikrocontroller Programmierer nat rlich besonders wie Speicherstellen im XRAM angesprochen werden k nnen um z B Memory Mapped Peripherie zu steuern Zu diesem Zweck dient das reservierte Wort at Beispiel xdata at 0x7ffe unsigned int chksum Die 16 bit Variable chksum wird ab Adresse 7FFEh im XRAM abgelegt Der Compiler reserviert freilich keinen Platz f r d
132. m der damit verbundene Ti merl gestoppt wird Dieser Timer steht nun f r andere Aufgaben zur Verf gung e SERBAUD hardwarerate setzt eine neue Baudrate Der Parameter ist nicht die Baudrate in bit s sondern berechnet sich aus der ben tigten Baudrate und der Quarzfrequenz wie folgt hardwarerate 256 Quarzfrequenz in Hz 192 Baudrate in bit s e SERSTAT liefert den momentanen Zustand der seriellen Schnittstelle Wenn SERSTAT 0 ist so wurde kein Zeichen empfangen ist SERSTAT 1 so liegt ein Zeichen zum Abholen z B mit INCHAR bereit Bitte beachten Sie dass die Schnittstelle nicht gepuffert wird Beispiel A 256 IF SERSTAT A INCHAR PRINT A Beachten Sie bitte einige Besonderheiten die fiir 80x537er Prozessoren gel ten siehe unten 66 5 4 BASIC Referenz 5 4 8 Echtzeituhr e SECOND MINUTE HOUR DAY MONTH Diese Pseudovariablen enthalten wenn die Software Echtzeituhr aktiviert ist die aktuelle Zeit sowie das aktuelle Datum Sie k nnen wie normale Variablen gesetzt und ausgelesen werden Beispiel Ausgabe SECOND 0 PRINT 2 0 HOUR 2 MINUTE 2 SECOND 17 10 00 e SETTIME stunde minute sekunden setzt die Uhrzeit Er wird eigentlich nicht ben tigt sondern dient zur Kompatiblit t mit fr heren BASIC Versionen in de nen die Pseudovariablen nicht setzbar waren Beispiel SETTIME 23 50 20 e SETDATE tag monat setzt das Datum Er wird eigentlich nicht ben tigt son dern di
133. may be advantageous for small interrupt service routines which have low register usage If the interrupt service routine is defined to be using a specific register bank then only a b dptr amp psw are saved and restored if such an interrupt service routine calls another function using another register bank then the entire register bank of the called function will be saved on the stack This scheme is recommended for larger interrupt service routines 3 8 3 HC08 Interrupt Service Routines Since the number of interrupts available is chip specific and the interrupt vector table always ends at the last byte of memory the interrupt numbers corresponds to the interrupt vectors in reverse order of address For example interrupt 1 will use the interrupt vector at Oxfffc interrupt 2 will use the interrupt vector at Oxfffa and so on However interrupt 0 the reset vector at Oxfffe is not redefinable in this way instead see section 3 11 for details on customizing startup 3 9 Enabling and Disabling Interrupts 3 9 1 Critical Functions and Critical Statements A special keyword may be associated with a block or a function declaring it as critical SDCC will generate code to disable all interrupts upon entry to a critical function and restore the interrupt enable to the previous state before returning Nesting critical functions will need one additional byte on the stack for each call int foo critical The critical attribute maybe
134. mediate Dump Options The following options are provided for the purpose of retargetting and debugging the compiler These provided a means to dump the intermediate code iCode generated by the compiler in human readable form at various stages of the compilation process More on iCodes see chapter 9 1 The anatomy of the compiler dumpraw This option will cause the compiler to dump the intermediate code into a file of named lt source filename gt dumpraw just after the intermediate code has been generated for a function i e before any optimizations are done The basic blocks at this stage ordered in the depth first number so they may not be in sequence of execution dumpgcse Will create a dump of iCode s after global subexpression elimination into a file named lt source filename gt dumpgcse dumpdeadcode Will create a dump of iCode s after deadcode elimination into a file named lt source file name gt dumpdeadcode dumploop Will create a dump of iCode s after loop optimizations into a file named lt source file name gt dumploop dumprange Will create a dump of iCode s after live range analysis into a file named lt source file name gt dumprange dumlrange Will dump the life ranges for all symbols dumpregassign Will create a dump of iCode s after register assignment into a file named lt source file name gt dumprassgn dumplrange Will create a dump of the live ranges of iTemp s
135. n Geben Sie in den zugeh rigen Eingabefeldern Start und Endadresse an und klicken Sie auf den entsprechenden Hinzuf gen Knopf Die Informatio nen werden automatisch sortiert Achten Sie bitte darauf dass es keine ber schneidungen gibt 39 3 CESY Referenz e Tragen Sie danach Start und Endadresse des zu reassemblierenden Codes ein e W hlen Sie ob der Code symbolisch reassembliert werden soll und ob der erzeugte Text in ein neu es Editorfenster oder in Tabellen Adressbereich hex Bytes gt pooo forFF Text gt lt Entfernen L schen In Editor C In Datei JV Symbolisch B 0000 OOFF T 0100 O2FF eine Datei geschrieben werden soll 3 8 2 Tipps e M glicherweise m ssen Sie mehrfach versuchen Ihren Co de zu reassemblieren Ihre Antworten werden jeweils zwischengespeichert so dass beim n chsten Mal das Fenster schon die n tigen Parameter enth lt Abbildung 12 Tabellen Editor des Reassemblers e Symbolisch reassemblieren sollten Sie immer denn im entstehenden Text l sst sich nicht verfolgen wo ein Sprung wie LJMP 146Fh tats chlich hinzielt e Wenn der entstehende Programmtext so lang wird dass er nicht mehr in den Edi torspeicher passt ber 12000 Zeilen K nnen Sie ihn in eine Datei schreiben lassen die Sie mit einem anderen Editor bearbeiten k nnen Sie k nnen diese Datei auch als Include Datei assemblieren lassen e beim R
136. n von denen kein Quelltext vorliegt oder die nicht in der aktuellen Sitzung assembliert und zum Zielsystem bertragen wurden Hier wird nur der jeweils als n chstes auszuf hrende Befehl angezeigt Der zweite Men punkt dagegen ruft den Debugger als Source Level Debugger auf Dazu muss des zum Code geh rende Editorfenster ge ffnet und der Quelltext as sembliert worden sein Der Vorteil dieses Debug Modus ist dass die betreffende Zeile im Editor farblich gekennzeichnet wird so dass sich das Programm auf Quell textebene verfolgen l sst Schlie lich gibt es die M glichkeit Breakpoints zu setzen Dieser Befehl wird aus dem Editorfenster aufgerufen 3 10 2 Benutzung Im Folgenden wird der Debugger im Source Level Modus erkl rt Der Assembler Modus funktioniert mit Ausnahme der Quelltextanzeige genauso Das Debug Fenster ist in zwei Bereiche aufgeteilt In dem linken Debug Bereich werden die Register A B RO R7 DPTR SP ST PC owe Te der n chste Befehl angezeigt und Di EEE k nnen auch ver ndert werden ACC B DPTR ST CAFRRVP SP wi Es gibt folgende Funktionen die a a TRAE a durch die entsprechenden Kn p fo p2 feo pF Jo fos foo foo fe aufgerufen werden pc Befehl HOP e Finzelschritt f hrt den Pro grammschritt ab der im Eingabe 7 Oooo E feld PC angegebenen Adresse Bis Breakpoint berspringen Hinzuf gen Entfernen mit bergabe aller Register aus ende nerven _ al und ke
137. n Start 80x51 80x52 80x535 80x537 80x552 v 517A Abbildung 11 Assembler Men aufsetzt Wenn z B bei einer Labeldefinition ein Fehler auftrat werden alle Befeh le die auf dieses Label Bezug nehmen auch als Fehler erkannt und gespeichert Nach dem Assemblieren steht der erzeugte Code im virtuellen Speicher Sie k nnen ihn als Hexdump mit dem Monitor einsehen Beachten Sie bitte dass der Code noch nicht in einer Datei steht oder sich bereits im Zielsystem befindet Benutzen Sie zu diesem Zweck den Download Befehl 29 3 CESY Referenz Die erzeugten Labels werden automatisch in eine Datei des Typs LAB geschrie ben Diese k nnen Sie mit dem Befehl Labels anzeigen in einen gesch tzten Edi tor laden Mit dem Men punkt Listing erzeugen Sie eine Datei die den Quellcode zusam men mit dem generierten Objektcode bersichtlich enth lt Solche Dateien sind zur Dokumentation eines Projektes oder zur Fehlersuche sinnvoll Die generierte Datei wird gleich in einem neuen gesch tzten Edit Fenster ge ffnet Dieser Befehl ist b rigens nur f r Assembler Programme gedacht und funktioniert nicht mit BASIC Eingebundene Include Dateien werden ebenfalls nicht mitausgegeben Die Prozessor Einstellungen dienen zur Wahl der vordefinierten Labels Sie m ssen eine dieser Optionen verwenden k nnen aber selbstverst ndlich weitere Labels de finieren falls Sie einen anderen Controller verwenden als die hier m glichen Ein
138. n can be used when the code generated is called by a monitor program The compiler will generate a ret upon return from the main function The default setting is to lock up i e generate a sjmp nostdincl This will prevent the compiler from passing on the default include path to the preprocessor nostdlib This will prevent the compiler from passing on the default library path to the linker verbose Shows the various actions the compiler is performing V Shows the actual commands the compiler is executing no c code in asm Hides your ugly and inefficient c code from the asm file so you can always blame the compiler 3 24 3 2 COMMAND LINE OPTIONS CHAPTER 3 USING SDCC i code in asm Include i codes in the asm file Sounds like noise but is most helpful for debugging the compiler itself less pedantic Disable some of the more pedantic warnings jwk burps please be more specific here please If you want rather more than less warnings you should consider using a separate tool dedicated to syntax checking like splint www splint org print search dirs Display the directories in the compiler s search path VC Display errors and warnings using MSVC style so you can use SDCC with visual studio use stdout Send errors and warnings to stdout instead of stderr Wa asmOption asmOption Pass the asmOption to the assembler See file sdcc as doc asxhtm html for as sembler options 3 2 9 Inter
139. ng point usage it is recommended that the large model be used Also notice that you don t have to call this routines directly The compiler will use them automatically every time a floating point operation is required convert unsigned char to floating point 3 16 Library Routines lt pending this is messy and incomplete a little more information is in sdcc doc libdoc txt gt 3 16 1 Compiler support routines _gptrget _mulint etc 3 16 2 Stdelib functions puts printf strcat etc 3 16 2 1 lt stdio h gt As usual on embedded systems you have to provide your own getchar and putchar routines SDCC does not know whether the system connects to a serial line with or without handshake LCD keyboard or other device You ll find examples for serial routines f e in sdcc device lib If you re short on memory you might want to use printf_small instead of printf For the mcs51 there is an assembly version printf_fast which should fit the requirements of many embedded systems by unsetting defines it can be customized to not support long variables and field widths 3 16 3 Math functions sin pow sqrt etc 3 16 4 Other libraries Libraries included in SDCC should have a license at least as liberal as the GNU Lesser General Public License LGPL If you have ported some library or want to share experience about some code which f e falls into any of these categories Busses ac CAN Ethernet Profibus Modbus USB SPI JTA
140. ngjmp for now e Old K amp R style function declarations are NOT allowed foo i j this old style of function declarations int i j are valid in ANSI but not valid in SDCC 67 8 3 CYCLOMATIC COMPLEXITY CHAPTER 8 SDCC TECHNICAL DATA e functions declared as pointers must be dereferenced during the call int foo has to be called like this foo ANSI standard allows calls to be made like foo 8 3 Cyclomatic Complexity Cyclomatic complexity of a function is defined as the number of independent paths the program can take during execution of the function This is an important number since it defines the number test cases you have to generate to validate the function The accepted industry standard for complexity number is 10 if the cyclomatic complexity reported by SDCC exceeds 10 you should think about simplification of the function logic Note that the complexity level is not related to the number of lines of code in a function Large functions can have low complexity and small functions can have large complexity levels SDCC uses the following formula to compute the complexity complexity number of edges in control flow graph number of nodes in control flow graph 2 Having said that the industry standard is 10 you should be aware that in some cases it be may unavoidable to have a complexity level of less than 10 For example if you have switch statement with more than 10 case
141. nload 7 Starten 3 4 Das Datei Men ber das Datei Men wird wie bei Windows Programmen blich die Kommunika tion des Programmes mit der Peripherie also Datentr gern und Drucker geregelt Eine Ausnahme bildet die serielle Schnittstelle sie wird vom Debugger Monitor und Terminalprogramm zur Laufzeit verwaltet e Neu ffnet ein neues Editor Monitor oder Terminalfenster F r letztere ist dies die einzige M glichkeit aktiv zu werden Sie k nnen beliebig viele Editor und Mo nitorfenster aber nur ein einziges Terminal oder Projektfenster ffnen e ffnen dient zum ffnen einer Textdatei also Quelltext BASIC oder C Programm und zum Laden von Bin r oder Intel Hex Dateien in den virtuellen Speicher Abh ngig von der Wahl des Dateityps wird ein Editorfenster ge ffnet und der Text angezeigt oder der Code in den virtuellen Speicher geladen e Gesch tzt ffnen ffnet ein gesch tztes Editorfenster in dem nicht editiert wer den kann Dient auch zum Kontrollieren von Intel Hex Dateien denn diese werden hier als Textdatei ge ffnet und nicht in den virtuellen Speicher geschrieben e Speichern speichert den Text im aktiven Fenster Nicht zum Speichern von Bin r code e Speichern unter speichert je nach gew hltem Dateityp Text Hex oder Bin rda ten Bei letzteren ffnet sich ein Dialogfenster in dem nach Start und Endadresse gefragt wird e Drucken druckt den Quelltext oder einen Speicherb
142. ns callee saves be Force a called function to always save BC no std crt0 When linking skip the standard crtO o object file You must provide your own crt0 o for your system when linking 3 2 7 Optimization Options nogese Will not do global subexpression elimination this option may be used when the compiler creates un desirably large stack data spaces to store compiler temporaries A warning message will be generated when this happens and the compiler will indicate the number of extra bytes it allocated It is recom mended that this option NOT be used pragma nogcse can be used to turn off global subexpression elimination for a given function only noinvariant Will not do loop invariant optimizations this may be turned off for reasons explained for the pre vious option For more details of loop optimizations performed see section Loop Invariants It is recommended that this option NOT be used pragma noinvariant can be used to turn off invariant optimizations for a given function only noinduction Will not do loop induction optimizations see section strength reduction for more details It is recommended that this option is NOT used pragma noinduction can be used to turn off induction optimizations for a given function only nojtbound Will not generate boundary condition check when switch statements are implemented using jump tables See section 8 1 7 Switch Statements for more details It is recommended that this option is
143. nt rel _moduint rel and _mulint rel The next step is to add the rel files to the library file 3 2 COMMAND LINE OPTIONS CHAPTER 3 USING SDCC sdcclib libint lib _divsint rel sdcclib libint lib _divuint rel sdcclib libint lib _modsint rel sdcclib libint lib _moduint rel sdcclib libint lib _mulint rel If the file already exists in the library it will be replaced To see what modules and symbols are included in the library options s and m are available For example sdcclib s libint lib _divsint rel __divsint_a_1_1 divsint_PARM_2 __divsint _divuint rel __divuint_a_1_1 divuint_PARM_ 2 divuint_reste_1_1 divuint_count_1_1 _ divuint _modsint rel __modsint_a_1 1 __modsint_PARM_2 __modsint _moduint rel __moduint_a_1_1 __moduint_PARM_2 __moduint_count_1_1 __moduint _mulint rel mulint_PARM_ 2 _mulint If the source files are compiled using debug the corresponding debug information file adb will be include in the library file as well The library files created with sdcclib are plain text files so they can be viewed with a text editor It is not recomended to modify a library file created with sdcclib using a text editor as there are file indexes numbers located accross the file used by the linker to quickly locate the required module to link Once a rel file as well as a adb file is added to a library using sdcclib it can be safely deleted since all the information required for linking is
144. o gramm explizit initialisiert wird kann die auto matische Initialisierung abgeschaltet werden sehr komfortable Timer Programmierung allerdings nur mit einer Aufl sung von 100 ms Das d rfte jedoch Compiler Einstellungen xi Startadresse hex Data Segment hex ExtendedData Segment hex A000 Anz Variablen im Data Segment fs LCD Befehlsregister hex LCD Datenregister hex LCD Delay dez ho Quarz Frequenz MHz Baudrate bit s IV Initialisiere Serielle Schnittstelle IV Initialisiere Echtzeituhr IV Setze Download Adressen automatisch I Endlosschleife am Programmende Au erdem m ssen noch einige Einstellungen zur Speicherverwaltung gemacht werden Stel en len Sie als Startadresse 8000h ein Diese Ein se stellung ist von h chster Wichtigkeit da hinter der Startadresse sofort die Interrupt Einspr nge liegen Die Echtzeituhr arbeitet intensiv mit Interrupts Wenn nun die Firmware die Interrupt Einspr nge nicht an die richtige Adresse weitergibt wird Ihr Programm sofort abst rzen Die Firmware ist auf Adresse 8000h voreingestellt Abbildung 5 BASIC Optionen Wenn Sie unser LAB 537 verwenden stellen Sie als Startadresse bitte OOOOh ein da dieser Bereich von der CESY Firmware f r Benutzerprogramme freigeschal tet ist Die Interruptvektoren liegen dann auch auf jeden Fall richtig Die Einstellungen f r Data und ExtendedData Segment brauchen Sie je
145. object in internal ram data unsigned char xdata p pointer physically in code rom pointing to data in xdata space xdata unsigned char code p pointer physically in code space pointing to data in code space code unsigned char code p the following is a generic pointer physically located in xdata space char xdata p Well you get the idea All unqualified pointers are treated as 3 byte 4 byte for the ds390 generic pointers The highest order byte of the generic pointers contains the data space information Assembler support rou tines are called whenever data is stored or retrieved using generic pointers These are useful for developing reusable library routines Explicitly specifying the pointer type will generate the most efficient code 3 4 1 9 Notes on MCS51 memory layout The 8051 family of microcontrollers have a minimum of 128 bytes of internal RAM memory which is structured as follows Bytes 00 1F 32 bytes to hold up to 4 banks of the registers RO to R7 Bytes 20 2F 16 bytes to hold 128 bit variables and Bytes 30 7F 80 bytes for general purpose use Additionally some members of the MCS51 family may have up to 128 bytes of additional indirectly address able internal RAM memory idata Furthermore some chips may have some built in external memory xdata which should not be confused with the internal directly addressable RAM memory data Sometimes this built in xdat
146. of 5 is crucial since the function la bellnRange expects to find the label in that particular variable the hash table containing the variable bindings is passed as a parameter If you want to code more such functions take a close look at the function labellnRange and the calling mechanism in source file SDCCpeeph c Currently implemented are labellnRange labelRefCount labellsReturnOnly operandsNotSame xramMovcOption 24bitMode portIsDS390 24bitModeAndPortDS390 and notVolatile I know this whole thing is a little kludgey but maybe some day we will have some better means If you are looking at this file you will see the default rules that are compiled into the compiler you can add your own rules in the default set there if you get tired of specifying the peep file option 8 2 ANSI Compliance Deviations from the compliance e functions are not always reentrant e structures cannot be assigned values directly cannot be passed as function parameters or assigned to each other and cannot be a return value from a function e g Struct SE vee struct s sl s2 foo sl s2 is invalid in SDCC although allowed in ANSI struct s fool struct s parms invalid in SDCC although allowed in ANSI struct s rets return rets is invalid in SDCC although allowed in ANSI long long 64 bit integers not supported double precision floating point not supported e No support for setjmp and lo
147. one byte parameter dptr for two bytes b dptr for three bytes and acc b dptr for a four bytes parameter The variable name for the second parameter will be _ lt function_name gt _PARM_2 Assemble the assembler routine with the following command asx8051 losg asmfunc asm Then compile and link the assembler routine to the C source file with the following command sdcc cfunc c asmfunc rel 3 13 3 Assembler Routine reentrant In this case the second parameter onwards will be passed on the stack the parameters are pushed from right to left i e after the call the leftmost parameter will be on the top of the stack Here is an example extern int asm_func unsigned char unsigned char int c_func unsigned char i unsigned char j reentrant return asm func i j int main return c_func 10 9 The corresponding assembler routine is globl _asm_func _asm_func push _bp mov _bp sp mov r2 dpl mov a _bp add a 0xfd mov r0 a add a 0xfc mov rl a mov a r0 39 3 14 INT 16 BIT AND LONG 32 BIT SUPPORT CHAPTER 3 USING SDCC add a r2 mov dpl a mov dph 0x00 mov sp _bp pop _bp ret The compiling and linking procedure remains the same however note the extra entry amp exit linkage required for the assembler code _bp is the stack frame pointer and is used to compute the offset into the stack for parameters and local variables 3 14 int 16 bit and long 32 bit Support For
148. ort 16 bit addresses in I O memory e g sfr banked at 0x123 IoPort Writing 0x01 to this variable generates the assembly code 01 23 01 ld bc _IoPort 3E 01 ld a 0x01 ED 79 out c a 3 4 2 3 sfr in0 out0 to 8 bit addresses on Z180 HD64180 The compiler option portmode 180 80 and a compiler pragma portmode z180 z80 is used to turn on off the Z180 HD64180 port addressing instructions in0 out0 instead of in out If you include the file z180 h this will be set automatically 3 4 3 HC08 Storage Class Language Extensions 3 4 3 1 data The data storage class declares a variable that resides in the first 256 bytes of memory the direct page The HC08 is most efficient at accessing variables especially pointers stored here 29 3 5 ABSOLUTE ADDRESSING CHAPTER 3 USING SDCC 3 4 32 xdata The xdata storage class declares a variable that can reside anywhere in memory This is the default if no storage class is specified 3 5 Absolute Addressing Data items can be assigned an absolute address with the ar lt address gt keyword in addition to a storage class e g xdata at 0x7ffe unsigned int chksum In the above example the variable chksum will located at Ox7ffe and Ox7fff of the external ram The compiler does not reserve any space for variables declared in this way they are implemented with an equate in the assembler Thus it is left to the programmer to make sure there are no overlaps with other variables that a
149. ototype of the isr MUST be present or included in the file that contains the function main The using keyword can be used to tell the compiler to use the specified register bank 8051 specific when generating code for this function Interrupt service routines open the door for some very interesting bugs If the interrupt service routines changes variables which are accessed by other functions these variables should be declared volatile If the access to these variables is not atomic i e the processor needs more than one instruction for the access and could be interrupted while accessing the variable the interrupt must disabled during the access to avoid in consistent data Access to 16 or 32 bit variables is obviously not atomic on 8 bit CPUs and should be protected by disabling interrupts You re not automatically on the safe side if you use 8 bit variables though We need an example here f e on the 8051 the harmless looking flags 0x80 is not atomic if flags resides in xdata Setting flags 0x40 from within an interrupt routine might get lost if the interrupt occurs at the wrong time counter 8 is not atomic on the 8051 even if counter is located in data memory Bugs like these are hard to reproduce and can cause a lot of trouble A special note here int 16 bit and long 32 bit integer division multiplication amp modulus and floating point operations are implemented using external support routines developed in AN
150. piler will generate a warning message when it is forced to allocate extra space either on the stack or data space If this extra space allocation is undesirable then induction optimization can be eliminated either for the entire source file with noinduction option or for a given function only using pragma noinduction Loop Invariant changed to itemp k 1 for i 0 i lt 100 i f itemp As mentioned previously some loop invariants are not as apparent all static address computations are also moved out of the loop Strength Reduction this optimization substitutes an expression by a cheaper expression for i 0 i lt 100 i ar i 5 i 3 changed to 8 1 OPTIMIZATIONS CHAPTER 8 SDCC TECHNICAL DATA itempl 0 itemp2 0 for i 0 i lt 100 i arlitempl itemp2 itempl 5 itemp2 3 The more expensive multiplication is changed to a less expensive addition 8 1 5 Loop Reversing This optimization is done to reduce the overhead of checking loop boundaries for every iteration Some simple loops can be reversed and implemented using a decrement and jump if not zero instruction SDCC checks for the following criterion to determine if a loop is reversible note more sophisticated compilers use data dependency analysis to make this determination SDCC uses a more simple minded analysis e The for loop is of the form for lt symbol gt lt expression gt lt sym gt
151. ptionen IO Parameter eingerichtet Sie k nnen zwischen COMI bis COM4 w hlen Baudraten von 300 bis 38400 bit s sind m glich Beachten Sie bitte dass Sie die Schnittstelle nur dann einrichten k nnen wenn kein Programmteil darauf zugreift Desweiteren ist zu beachten dass die Windows Unterst tzung der Schnittstelle nicht besonders schnell ist CESY benutzt aus Sicherheitsgr nden die Original Windows Routinen Bei einem P120 System ist oft schon 9600 bps das h chste aller Gef hle Langsamere Systeme k nnen unter Umst nden noch niedrigere Baudraten erfordern 4 1 5 Einrichtung des Terminals Auch das Terminalmodul benutzt eine serielle Schnittstelle die Sie im Men Opti onen Terminal konfigurieren k nnen Wenn das Terminal einen anderen Port die IO Funktionen von CESY benutzt gibt es keinerlei Probleme Andernfalls sollte das Termianlprogramm die gleichen bertragungsparameter und die gleiche Geschwin digkeit wie die IO Funktionen benutzen um Konflikte zu vermeiden 4 1 6 Troubleshooting Auch bei einem fertig gekauften Nullmodemkabel kann das Kreuzen der Leitungen 2 und 3 notwendig sein n mlich genau dann wenn das Zielsystem Modem Pinbelegung hat Au erdem gibt es Systeme die ein besonderes Kabel erfordern weil sie noch weitere Signale vom PC ben tigen Beachten Sie dass die bertragungsgeschwindigkeit des Zielsystems von der Quarzfrequenz abh ngt Konsultieren Sie daf r das Kapitel CESY Firmware Bei der S
152. ramm steht ab der durch die Sprungmarke bezeichneten Stelle und muss mit dem RETURN Befehl abgeschlossen werden Beispiel A 16 GOSUB Quadrat PRINT 4 A REM weiterer Text Quadrat A A A RETURN e FOR laufvariable anf TO end STEP schritt NEXT laufvariable Dies ist die Schleifenstruktur in BASIC Der Block zwischen FOR und NEXT wird wiederholt und die Laufvariable dabei mit der durch die STEP Anweisung definier ten Schrittweite hochgez hlt und zwar bis die Laufvariable gr er als end ist Wenn die STEP Anweisung weggelassen wird betr gt die Schrittweite 1 Beispiel Ausgabe FOR T 1 TO 9 1 2 32 578 92808 PRINT 2 T NEXT T Die FOR Schleife kann mit GOTO verlassen werden auch wenn sie noch nicht bis zum Ende durchlaufen wurde Das sollte man jedoch vermeiden da es das Pro gramm un bersichtlich macht e IF Vergleich THEN Programmblock lt ELSE Programmblock gt ENDIF ACHTUNG Dieser Befehl unterscheidet sich von V2 x Zur Erhaltung der Kompatiblit t gibt es den IFS Befehl Bedingung Nach IF folgt ein Vergleich Es sind die Vergleichsoperatoren lt lt gt gt und ungleich m glich Der Vergleichsausdruck sollte in Klammern stehen Wenn der Vergleich positiv war wird das Programm hinter THEN solange fortge f hrt bis es auf einen ELSE Befehl trifft Falls der Vergleich negativ war wird das Programm ab dem folgenden ELSE Befehl fortgef hrt Der ELSE Block wird mit EN
153. re declared without the absolute address The assembler listing file Ist and the linker output files rst and map are good places to look for such overlaps Variables with an absolute address are not initialized In case of memory mapped I O devices the keyword volatile should be used to tell the compiler that accesses might not be optimized away volatile xdata at 0x8000 unsigned char PORTA_8255 For some architectures mcs51 array accesses are more efficient if an xdata far array starts at a block 256 byte boundary section 3 12 1 has an example Absolute addresses can be specified for variables in all storage classes e g bit at 0x02 bvar The above example will allocate the variable at offset 0x02 in the bit addressable space There is no real advantage to assigning absolute addresses to variables in this manner unless you want strict control over all the variables allocated One possible use would be to write hardware portable code For example if you have a routine that uses one or more of the microcontroller I O pins and such pins are different for two different hardwares you can declare the I O pins in your routine using extern volatile bit SDI extern volatile bit SCLK extern volatile bit CPOL void DS1306_put unsigned char value unsigned char mask 0x80 while mask SDI value amp mask 1 0 SCLK CPOL SCLK CPOL mask 2 Then someplace in the code for the first hardware you would u
154. rend auf die Variable zugegriffen wird Dies ist schwer einzusch tzen da nicht klar ist wie der Compiler einen sol chen Zugriff bersetzt o Flie komma Arithmetik und int 16 bit und long 32 bit Multiplikation Division Modulo Operatinen sind als externe ANSI C Pro gramme implementiert Solche Aufrufe sollten wenn m glich nicht von ISR get tigt werden Mehr hierzu in der Original SDCC Dokumentation o Aufrufe von anderen Funktionen aus einer ISR sollten vermieden werden Ist das nicht m glich so sollte die Funktion reentrant dekariert oder mit prag ma nooverlay versehen werden Wird die ISR ohne das using Argument aufgerufen so speichert sie den Register satz auf dem Stack Verwendet man das using Argument so wird die angegebene Registerbank zerst rt 6 7 7 Kritische Routinen Um bequem Routinen vor dem Zerschie en durch eine ISR zu sch tzen gibt es die critical Umgebung Sie blockiert alle Interrupts vor dem Aufruf und stellt den alten Zustand nach Verlassen der Routine wieder her Beispiel int foo critical Das Attribut critical kann mit anderen Attributen wie reentrant kombiniert wer den Es kann ferner auch lokal angewandt werden critical i 89 6 Der C Compiler 6 7 8 Startup Code Der Compiler f gt einen Aufruf der Routine _sdcc_external_startup am Beginn des Codes ein Diese Routine enth lt normalerweise keinen Code sondern g
155. returns 0 if this routine returns a non zero value the static amp global variable initialization will be skipped and the function main will be invoked Otherwise static amp global variables will be initialized before the function main is invoked You could add a _sdcc_external_startup routine to your program to override the default if you need to setup hardware or perform some other critical operation prior to static amp global variable initialization On some mcs51 variants xdata has to be explicitly enabled before it can be accessed this is the place to do it See also the compiler option no xinit opt and section 4 1 about MCS51 variants 3 11 2 HC08 Startup Code The HC08 startup code follows the same scheme as the MCS51 startup code 3 11 3 Z80 Startup Code On the Z80 the startup code is inserted by linking with crt0 o which is generated from sdcc device lib z80 crt0 s If you need a different startup code you can use the compiler option no std crtO and provide your own crt0 o 3 12 Inline Assembler Code 3 12 1 A Step by Step Introduction Starting from a small snippet of c code this example shows for the MCS51 how to use inline assembly access variables a function parameter and an array in xdata memory The example uses an MCS51 here but is easily adapted for other architectures This is a buffer routine which should be optimized unsigned char far at 0x7f00 buf 0x100 unsigned char head tail void to_buffer unsigned c
156. rings gespeichert werden sollen Achten Sie darauf dass es keinen Konflikt mit den Adressen f r Variablen und Arrays gibt Danach wird ber ein Terminal der Name des Benutzers eingelesen Mit Hilfe dessen L nge ist dann die Adresse des n chsten Strings zu bestimmen Dort wird der Vorname abgelegt Wieder wird die Adresse des n chsten Strings bestimmt Jetzt soll der gesamte Name in richtiger Reihenfolge in den Speicher geschrieben werden Der DEVICE Befehl legt die Zieladresse C fest mit OUTSTR wird zuerst der Vorname der ab der Adresse B steht dann dahinter der Nachname geschrieben Zwischen diesen beiden Strings steht noch die Terminierung die zu guter Letzt mit einem Leerzeichen berschrieben wird Dadurch sind nun die Strings verbunden 74 5 4 BASIC Referenz Print Eintrag Nr Eintrag Nr Eintrag Eintrag 1 i 0 Nr 1 Nr 2 Print Name Name Name Name Angela_ Gerhard_ Hans _ Instr A i A A A LENGTH A 1 Print Telefon Telefon Telefon Telefon 23756_ 110573_ 856739 _ Instr A A A LENGTH A 1 Next i Print print Suche Namen Suche Namen Gerhard_ instr a000 for i 0 to 4 if EOSTR a000 i print Telefon Telefon OUTSTR i 110573 LENGTH i 1 endif next i Dieses Beispiel demonstriert wie leicht eine Suchfunktion implementiert werden kann Die Namen und Telefonnummern werden direkt hintereinander in den Speicher geschrieben Die Adresse eines jeden Datenblo
157. ro 100 delay lcall wait_10ms djnz r0 delay clr play Der Ausgabepin ist nun ausgeschaltet Wenn die Taste noch gedriickt ist soll der Pin aber nicht wieder eingeschaltet werden Daher muss noch ein weiteres Mal die Taste gepriift werden poll keyl jnb p1 0 poll_key1 sjmp poll_key Bis auf das Unterprogramm das die eigentliche Verz gerung macht ist unser Test programm fertig Das Verz gerungs Unterprogramm startet den Timer mit einem Startwert Dieser Wert wird vom Timer in lus Abst nden inkrementiert bei 12 Mhz Quarzfrequenz Wenn ein berlauf stattfindet wird vom Controller das TF0 Flag gesetzt Wir pollen also dieses Flag bis es gesetzt ist Danach stoppen wir den Timer und kehren ins Hauptprogramm zur ck wait _10ms mov t10 lo reload mov tho hi reload setb tro poll wait jnb tf0 poll_wait clr tro clr tfO ret Noch eine Bemerkung zum Editor wie Sie sicherlich schon bemerkt haben r ckt der Editor Ihre Programmzeilen automatisch ein Das ist meistens h chst n tzlich kann aber auch nerven Mit STRG RETURN k nnen Sie diese Eigenschaft ab schalten Ein zweiter Druck dieser Kombination schaltet das automatische Einr cken wieder an Das Programm ist nun fertig und E AE sollte abgespeichert werden Da Dateiname Ordner zu rufen Sie bitte den Datei er Abbrechen Speichern unter Befehl auf Es un a no Netzwerk ffnet sich ein Dialogfenster in syd C backup dem Si
158. rpose area If your microcontroller has additional indirectly addressable internal RAM idata you can place the stack on it You may also need to use xdata loc to set the start address of the external RAM xdata and xram size to specify its size Same goes for the code memory using code loc and code size If in doubt don t specify any options and see if the resulting memory layout is appropriate then you can adjust it The linker generates two files with memory allocation information The first with extension map shows all the variables and segments The second with extension mem shows the final memory layout The linker will complain either if memory segments overlap there is not enough memory or there is not enough space for stack If you get any linking warnings and or errors related to stack or segments allocation take a look at either the map or mem files to find out what the problem is The mem file may even suggest a solution to the problem 3 4 2 Z80 Z180 Storage Class Language Extensions 3 4 2 1 sfr in out to 8 bit addresses The Z80 family has separate address spaces for memory and input output memory I O memory is accessed with special instructions e g sfr at 0x78 IoPort define a var in I O space at 78h called IoPort Writing 0x01 to this variable generates the assembly code 3E 01 ld a 0x01 D3 78 out _IoPort a 3 4 2 2 banked sfr in out to 16 bit addresses The keyword banked is used to supp
159. s Breakpoints zeigt der Debugger nicht nur alle Register neu an sondern aktualisiert auch die Listbox eHinzuf gen f gt eine im zugeh rigen Eingabefeld angegebene Adresse zur Watch Liste hinzu Wenn die Adresse im Bereich von 0 bis 7Fh liegt wird angenommen dass es sich um eine Adresse im Datenspeicher handelt andernfalls wird die Adres se als SFR Register interpretiert Die Adresse kann komfortabel als Label angege ben werden in der Liste erscheint sie dann zus tzlich in hexadezimaler Form e Entfernen entfernt den Markierten Eintrag aus der Liste eL schen l scht alle Eintr ge in der Liste eAktualisieren aktualisiert die Eintr ger der Liste 3 10 4 Tipps Der Debugger ben tigt den externen Interrupt INTO Falls Ihr Programm diesen auch ben tigt ist kein Arbeiten mit dem Debugger m glich wie berhaupt auftre tende Interrupts den Debugger st ren Sie k nnen den Debugger auch dazu benutzen ein Programm mit definierter Regis ter bergabe in Echtzeit zu starten Dazu muss die INTO Leitung von Masse ge nommen werden Das Programm wird dann mit dem Knopf Einzelschritt gestartet Wenn Ihr Programm mit dem RET Befehl endet kehrt es zum Debugger zur ck und die Register und Watches werden angezeigt Das Programm sollte nicht l nger 44 3 10 Der Debugger als einige Millisekunden brauchen sonst meldet der Debugger einen Timeout Fehler Zeitverhalten Der Debugger arbeitet nicht in Echtzeit Durch das st ndi
160. s Festlegen der Hauptdatei ndern 6 5 2 Hauptdatei festlegen Der Befehl zum Festlegen der Hauptdatei ist ber das C Projekt Men oder direkt ber den MAIN Knopf im Projektmanager Fenster erreichbar Dies sollte der ers te Schritt in jedem Projekt sein brigens muss wenn man mit dem Projektmanager arbeitet nicht unbedingt jede Datei in einem Editorfenster ge ffnet sein ffnen Sie nur die Dateien f r die das sinnvoll ist meist die Hauptdatei 6 5 3 Dateien zum Projekt hinzuf gen oder entfernen Diese Befehle sind ber das C Projekt Fenster oder ber die Kn pfe und aus dem Projektmanager Fenster erreichbar Zum Entfernen muss die entsprechende Datei im Projektmanager Fenster angeklickt werden Die Datei wird nat rlich nicht auf dem Datentr ger gel scht sondern nur aus der Projektliste entfernt 6 5 4 Projekt bersetzen Der bersetzungsprozess f r ein Projekt aus mehreren Dateien wird traditionell Build sprich Bild genannt Dieser Begriff soll auch in der deutschen CESY Version verwendet werden Gestartet wird die Projekt bersetzung wieder ber das Popup Men oder ber den Build Knopf Hier gibt es einige Besonderheiten e Nur die LOG Datei des Hauptprogramms wird angezeigt Die LOG Dateien der Unterprogramme werden zwar erzeugt aber nicht geladen e Unterproramme sollten also vorher auf offensichtliche bersetzerfehler ge testet werden Dazu dient der Befehl Compi
161. s Zielsystem bertragen werden Dazu sollte auf dem Zielsystem die CESY Firmware laufen Wie dieses angepasst wird finden Sie in der Online Hilfe im Kapitel Das CESY Betriebssystem Dazu eine Anmerkung La den Sie einfach die ben tigte Datei in den Editor assemblieren Sie und schreiben Sie sich die Endadresse auf die nach dem Assemblieren angezeigt wird Speichern Sie dann das Programm in bin rer Form ab Startadresse ist 0000h Endadresse wie aufgeschrieben Alles wie bisher beschrieben Programmieren Sie dann ein EPROM mit dem Firmware Programm und setzen Sie es in Ihrem Mikrocontrollersystem ein Nach dem Stromeinschalten und dem Verbinden mit dem PC sind Sie bereit f r den Download Ihres gerade erstellten Programms Pr fen Sie bitte zun chst ob das Zielsystem korrekt arbeitet und mit dem PC kom munizieren kann Starten Sie dazu einen neuen Monitor Datei neu Monitor und schalten Sie die Ansicht auf XRAM um Jetzt sollte z gig ein Hexdump er scheinen Das ist der Inhalt Ihres Firmware EPROMs Falls das Hexdump unvoll st ndig oder sehr langsam erscheint oder gar eine Fehlermeldung klappt irgendet 16 2 5 Kennenlernen von CESY was mit der Verbindung nicht Lesen Sie dazu das Kapitel Hardware der Online Hilfe Nachdem die Verbindung steht k nnen Sie mit dem Download starten Nach Im Export Download erscheint ein Dialogfenster in dem Sie den ben tigten Adressbereich angeben m ssen Bitte runden Sie b
162. s default when using mds390 See section Memory Models for more details protect sp update disable interrupts during ESP SP updates stack 10bit Generate code for the 10 bit stack mode of the Dallas DS80C390 part This is the one and only that the ds390 code generator supports right now and is default when using mds390 In this mode the stack is located in the lower 1K of the internal RAM which is mapped to 0x400000 Note that the support is incomplete since it still uses a single byte as the stack pointer This means that only the lower 256 bytes of the potential 1K stack space will actually be used However this does allow you to reclaim the precious 256 bytes of low RAM for use for the DATA and IDATA segments The compiler 22 3 2 COMMAND LINE OPTIONS CHAPTER 3 USING SDCC will not generate any code to put the processor into 10 bit stack mode It is important to ensure that the processor is in this mode before calling any re entrant functions compiled with this option In principle this should work with the stack auto option but that has not been tested It is incompatible with the xstack option It also only makes sense if the processor is in 24 bit contiguous addressing mode see the model flat24 option stack probe insert call to function __stack_probe at each function prologue tini libid lt nnnn gt LibraryID used in mTININative use accelerator generate code for DS390 Arithmetic Accelerator 3 2 6 Z80 Optio
163. save used registers here If we were still using r2 r3 we would have to push them here if head tail 1 mov a _tail dec a xrl a _head we could do an ANL a 0x0f here to use a smaller buffer see below jz t_b_end i buf headt c mov a dpl dpl holds lower byte of function argument mov dpl _head buf is 0x100 byte aligned so head can be used directly mov dph _buf gt gt 8 movx dptr a inc _head we could do an ANL _head 0x0f here to use a smaller buffer see above t_b_end restore used registers here _endasm endif The inline assembler code can contain any valid code understood by the assembler this includes any assembler di rectives and comment lines The compiler does not do any validation of the code withinthe_asm _endasm 3 9 3The assembler does not like some characters like or in comments You ll find an 100 pages assembler manual in sdcc as doc asxhtm html 36 3 12 INLINE ASSEMBLER CODE CHAPTER 3 USING SDCC keyword pair Specifically it will not know which registers are used and thus register pushing popping has to be done manually It is recommended that each assembly instruction including labels be placed in a separate line as the example shows When the peep asm command line option is used the inline assembler code will be passed through the peephole optimizer There are only a few if any cases where this option makes sense it might cause some unexpected
164. se bit at 0x80 SDI I O port 0 bit 0 bit at 0x81 SCLK I O port 0 bit 1 bit CPOL This is a variable let the linker allocate this one Similarly for the second hardware you would use 30 3 6 PARAMETERS amp LOCAL VARIABLES CHAPTER 3 USING SDCC bit at 0x83 SDI 1 0 port 0 bit 3 bit at 0x91 SCLK I O port 1 bit 1 bit CPOL This is a variable let the linker allocate this one and you can use the same hardware dependent routine without changes as for example in a library This is somehow similar to sbit but only one absolute address has to be specified in the whole project 3 6 Parameters amp Local Variables Automatic local variables and parameters to functions can either be placed on the stack or in data space The default action of the compiler is to place these variables in the internal RAM for small model or external RAM for large model This in fact makes them similar to static so by default functions are non reentrant They can be placed on the stack either by using the stack auto option or by using the reentrant keyword in the function declaration e g unsigned char foo char i reentrant Since stack space on 8051 is limited the reentrant keyword or the stack auto option should be used sparingly Note that the reentrant keyword just means that the parameters amp local variables will be allocated to the stack it does not mean that the function is register bank
165. sed for a library function the appropriate library function needs to be recompiled with the same option If the project consists of multiple source files then all the source file should be compiled with the same callee saves option string Also see pragma callee_saves debug When this option is used the compiler will generate debug information The debug information col lected in a file with cdb extension can be used with the SDCDB For more information see documen tation for SDCDB Another file with no extension contains debug information in AOMF or AOMF51 format which is commonly used by third party tools S Stop after the stage of compilation proper do not assemble The output is an assembler code file for the input file specified int long reent Integer 16 bit and long 32 bit libraries have been compiled as reentrant Note by default these libraries are compiled as non reentrant See section Installation for more details cyclomatic This option will cause the compiler to generate an information message for each function in the source file The message contains some important information about the function The number of edges and nodes the compiler detected in the control flow graph of the function and most importantly the cyclomatic complexity see section on Cyclomatic Complexity for more details float reent Floating point library is compiled as reentrant See section Installation for more details main return This optio
166. see section 3 2 9 and section 9 1 Anatomy of the compiler 3 1 2 Projects with Multiple Source Files SDCC can compile only ONE file at a time Let us for example assume that you have a project containing the following files fool c contains some functions foo2 c contains some more functions foomain c contains more functions and the function main 18 3 1 COMPILING CHAPTER 3 USING SDCC The first two files will need to be compiled separately with the commands sdcc c foo1 c sdcc c foo2 c Then compile the source file containing the main function and link the files together with the following command sdcc foomain c foo1 rel foo2 rel Alternatively foomain c can be separately compiled as well sdcc c foomain c sdcc foomain rel foo1 rel foo2 rel The file containing the main function MUST be the FIRST file specified in the command line since the linkage editor processes file in the order they are presented to it The linker is invoked from SDCC using a script file with extension Ink You can view this file to troubleshoot linking problems such as those arising from missing libraries 3 1 3 Projects with Additional Libraries Some reusable routines may be compiled into a library see the documentation for the assembler and linkage editor which are in lt installdir gt share sdcc doc for how to create a lib library file Libraries created in this manner can be included in the command line Make sure you includ
167. signed amp unsigned int 16 bit and long 32 bit variables division multiplication and modulus operations are implemented by support routines These support routines are all developed in ANSI C to facilitate porting to other MCUs although some model specific assembler optimizations are used The following files contain the described routines all of them can be found in lt installdir gt share sdcc lib Function Description unsigned 32 division signed 32 bit modulus calls _modulong unsigned 32 bit modulus Since they are compiled as non reentrant interrupt service routines should not do any of the above operations If this is unavoidable then the above routines will need to be compiled with the stack auto option after which the source program will have to be compiled with int long reent option Notice that you don t have to call these routines directly The compiler will use them automatically every time an integer operation is required signed 32 division calls _divulong 3 15 Floating Point Support SDCC supports IEEE single precision 4 bytes floating point numbers The floating point support routines are derived from gcc s floatlib c and consist of the following routines 40 3 16 LIBRARY ROUTINES CHAPTER 3 USING SDCC These support routines are developed in ANSI C so there is room for space and speed improvement Note if all these routines are used simultaneously the data space might overflow For serious floati
168. ss auch der Speicherverbrauch entspre chend steigt Abbildung 6 C Compiler Optionen Zum Ausprobieren des Programms muss es wie gehabt per Download ans Zielsys tem geschickt und gestartet werden Danach sollte es problemlos laufen 20 2 6 Probleme erkennen und l sen 2 6 Probleme erkennen und l sen Oft gibt es bei der ersten Benutzung von CESY ein paar Probleme Die blichen Fehlerquellen seien hier kurz aufgelistet e Download und Programmstart funktionieren nicht Dr cken Sie die RESET Taste Ihres Zielsystems ffnen Sie ein Monitorfens ter und stellen Sie die Ansicht auf XRAM Jetzt sollte ein Hexdump z gig er scheinen Wenn dies nicht der Fall ist stimmt etwas mit der Firmware oder der bertragung nicht Beachten Sie dass f r h here Baudraten als 19200 ein eini germa en aktueller Rechner P IH 1GHz o erforderlich ist e Im Monitorprogramm funktioniert die Ansicht von XRAM CROM oder Data nicht Ist ein funktionsf higes Betriebssystem vorhanden Sind die bertragungsparameter in der CESY Firmware richtig insbesondere Quarzfrequenz Benutzen Sie einen Quarz der pr zise Baudraten erm glicht z B 11 0592 MHz oder 12 MHz bei Systemen mit Baudratengenerator gt Funktioniert Ihr serielles Kabel Dies kann man leicht pr fen schalten Sie die Stromversorgung Ihres Zielsystems ab und entnehmen Sie den Controllerbau stein Verbinden Sie die RxD und die TxD Leitung des leeren Contro
169. startet dann das Pro gramm Diese Funktion mach nur Sinn wenn das Zielsystem mit einem nicht fl chtigen Programmspeicher ausgestattet ist ACHTUNG Ihr Programm sollte eine M glichkeit besitzen die Autostart marke selbst zu l schen oder das Betriebssystem mit der Einsprungadresse Oeh zu starten Sonst k nnen Sie die Autostartmarkierung n mlich nicht 16 schen und Ihr Programm startet bis in alle Ewigkeit von selber Sollte es den noch passiert sein ist ein kleiner Trick n tig Legen Sie die CE Leitung Ihres NVRAM Bausteins auf 5V und dr cken Sie RESET Damit ist das RAM nicht lesbar und das Betriebssystem kann normal starten e Autostart l schen l scht die Autostart Markierung so dass nach einem Reset des Zielsystems das CESY Betriebssystem startet e LAB 537 enthalt ebenfalls weitere Unterpunk te die die Arbeit mit dem LAB 537 seinem FLASH Speicher und dem Bankswitch System erleichtern Flash Download Flash Sektorloschen e Flash Download l dt einen Speicher Flash Boot bereich in den Flash Speicher des LAB BSL setzen 537 herunter Dabei werden nicht zu Abbildung 17 LAB537 Spezialbefehle g ngliche Bereiche automatisch ber sprungen und die Adressen korrigiert Beachten Sie dass das Flash ein EPROM ist ein zweites Beschreiben also erst nach vorhergehendem L schen m glich ist e Flash Komplettl schen l scht das Flash komplett W hrend des Vorgangs leuchtet die LED D3 am LAB 537 auf Das
170. stellungen Nehmen Sie dann den 80x51 als Grundtyp und definieren Sie die Labels f r die Erweiterungen Die Prozessor Einstellungen sind auch f r den BASIC Compiler g ltig und m ssen in jedem Fall in diesem Men vorgenommen werden 3 7 Assembler Syntax 3 7 1 Quelltextformat Zeilen d rfen beliebig einger ckt werden Benutzen Sie daf r den Tabulator im Edi tor er ist genau passend f r 80x51 Befehle eingerichtet Gro und Kleinschrei bung wird ignoriert soweit die Zeichenkette nicht quotiert d h in Anf hrungszei chen eingeschlossen ist Kommentare k nnen an jede Zeile angeh ngt werden Sie werden mit einem Semikolon gekennzeichnet Kommentare d rfen keine einfachen Anf hrungszeichen enthalten Die letzte Zeile im Text sollte eine Leerzeile sein 3 7 2 Label Verarbeitung Kompatibilit t mit dem ASM51 von Intel erfordert vier Typen von Labels DATA EQU BIT und CODE Labels mit verschiedenen Typen d rfen gleiche Namen ha ben bitte vermeiden Sie dieses aber denn einige Befehle arbeiten mit mehr als ei nem Labeltyp Verwechslungen sind dann vorprogrammiert Von den Labels werden die ersten 12 Zeichen ausgewertet Das d rfte den meisten Verwechslungen vorbeugen e CODE Alle Labels die als Sprungmarken im Quelltext stehen sind automa tisch vom Typ CODE Man kann Labels auch als Code definieren Spr nge und MOV DPTR arbeiten mit CODE e DATA Befehle die den internen Datenspeicher ansprechen verlangen den L
171. te0 lcd_command include tast pruet2 inc xdata unsigned char at Oxf 82 lcd_dataz zun 0 tast 0 Imr void delay unsigned int d zun O tast i unsigned ine is device 0 for 10 1 lt d i 1 print t delay 10 goto Mi void os ge j7 atr 5 0 PASCAL CESYOOL CESYCOMP SRE paw mli fy CESY8 00 c 3 Rakers Basic Compiler Output Generated 12 00 2004 14 15 a e nn annnann aan ananann nme nn led_comhet equ FA00h delay dat equ Fea02b lcd _ con dly equ Oih delay 4timeconse equ A600h lcd con VarExt equ A000h 9000 02 8 49 32 FE FF FF FF FF FF FF 32 FE FF FF FF deley iFexder u 30h ve FP uw a7 PE FP PP VP VE FP PP 37 PE FP PP PY FE FE ER 32 FE FE FF FF FE FE FE 32 12 0 E2 80 org 8000h FE AR 82 RE 3 7C 00 7B 00 C3 EC SR ED 9B 50 07 ajej i OC BC 00 PS OD 0 Fz 22 90 EY 00 24 39 FO 90 10 jonaaannnananncannannnnannnnnnnnnnnnanan 88 12 00 31 90 FP no 2a OC Fa 90 19 Os 17 mo 31 mov baudrate FAh 90 FE 80 74 01 FO 90 10 04 12 80 31 22 An 82 96 LCALL serinat FE 20 74 86 4a FO 90 08 4 1 20 31 0 FR 22 BS Bar OGAE 72 Fo 90 G8 cs 17 no 31 22 AR nz Im oo ms za mr j 5 24 83 85 25 FO CO 02 CO 03 12 8 9A AC 82 MB Stace 3 DO 03 DO 02 B 06 EB 33 95 EO FF C3 EE 9C EF z Line No O label i 4 20 3D FO 63 FO 80 95 FO 50 26 EB 25 23 FC B4 d Y_LABEL 35 24 FD RE 75 SC n2 mm S3 mn FO 17 07 CZ HS 27 5 4 R 2 CO 02 CO 02 12 06 CD BO 02 DO 02 OR OR co RC 22 74 OD
172. timizations back on The compiler will generate a warning message when extra space is allocated It is strongly recommended that the save and restore pragma s be used when changing options for a function 43 3 19 DEFINES CREATED BY THE COMPILER CHAPTER 3 USING SDCC 3 19 Defines Created by the Compiler The compiler creates the following defines spec SDCC_mcs51 or SDCC_ds390 or SDCC_z80 etc mesST 43390 _heO8 _z80 et SDCC_STACK_AUTO SDCC_MODEL_SMALL SDCC_MODEL_LARGE SDCC_USE_XSTACK SDCC_STACK_TENBIT SDCC_MODEL_FLAT24 Chapter 6 TIPS Here are a few guidelines that will help the compiler generate more efficient code some of the tips are specific to this compiler others are generally good programming practice e Use the smallest data type to represent your data value If it is known in advance that the value is going to be less than 256 then use an unsigned char instead of a short or int Please note that ANSI C requires both signed and unsigned chars to be promoted to signed int before doing any operation This promotion can be omitted if the result is the same The effect of the promotion rules together with the sign extension is often supprising unsigned char uc Oxfe if uc uc lt 0 this is true uc uc is evaluated as int uc int uc int Oxfe int Oxfe int Oxfc04 1024 Another one unsigned char 12 signed char 3 No t
173. tzt nicht da keine Variablen verwendet werden Genaueres dazu lesen Sie in der Online Hilfe Starten Sie nun den Compiler Eventuelle Programmfehler werden genauso ange zeigt wie im Assembler Wenn Sie die Endadresse beachten werden Sie bemerken dass Ihr Programm nun fast 4 kB lang ist Das ist der Preis der f r die Benutzung einer Hochsprache zu zahlen ist Das meiste ist allerdings die Standard Bibliothek die immer mitgeschleppt wird Wenn Ihr Programm doppelt so lang wird hei t das also nicht dass auch der Speicherverbrauch entsprechend steigt 18 2 5 Kennenlernen von CESY Daf r ist das BASIC Programm sehr viel bersichtlicher und schneller erstellt da man nicht st ndig nachschlagen muss wie z B der Timer richtig initialisiert wird Zum Ausprobieren des Programms muss es wie gehabt per Download ans Zielsys tem geschickt und gestartet werden Danach sollte es problemlos laufen 2 5 4 C Beispiel Schlie lich schreiben wir das gleiche Programm noch mal in C Im Vergleich zu BASIC ist die Programmierung etwas schwieriger da Befehle wie Delay nicht vor definiert sind Zu diesem Zweck benutzen wir hier einfach Leerschleifen Die bli chen Compiler Nachteile haben wir nat rlich auch unter C wie z B den h heren Resourcen Verbrauch C zahlt sich eigentlich erst aus wenn die Programme kom plex werden und eine Aufteilung in Bibliotheken erfordern Diese Funktion stellt unser BASIC nicht bereit Auch Interrupts sind in C
174. ungssystems mit dem Sie die Ergebnisse aller anderen Funktionen kontrol lieren und zusammenf gen k nnen Der Monitor stellt in seinem Fenster einen Speicherauszug als Hexdump dar Sie k nnen den Cursor mit der Maus auf eine beliebige Stelle setzen und auch mit den Cursortasten im Hexdump bewegen Mit der Tabulatortaste wechseln Sie von der Hex Darstellung zur ASCI Darstellung Durch die Eingabe eines Hex Wertes oder eines Zeichens editieren Sie den Speicher ber das Ansicht Men stellen Sie ein ob Sie den virtuellen Speicher oder eine der drei Speicherb nke Data XRAM Code im Zielsystem bearbeiten Es ist m glich mehrere Monitorfenster mit jeweils verschiedenen Ansichten gleichzeitig zu benut zen Beachten Sie bitte dass die Code Speicherbank nicht beschrieben werden kann und es daher beim Editierversuch eine Fehlermeldung gibt Damit der Zugriff auf das Zielsystem m glich ist muss es ber die serielle Schnitt stelle an den PC angeschlossen sein und das CESY Betriebssystem muss laufen N heres hierzu im Kapitel Hardware des Hilfesystems Falls aus irgendeinem Grund die Verbindung zum Zielsystem zusammenbricht wird eine Fehlermeldung Timeout angezeigt Im Bearbeiten Men finden Sie die notwendigen Befehle um mit dem Monitor den Speicher zu verwalten Sie k nnen Speicherbereiche die jeweils in einem Dia logfenster einzugeben sind in die Zwischenablage kopieren aus der Zwischenabla 41 3 CESY Referenz ge
175. ver be documented 3 4 Storage Class Language Extensions 3 4 1 MCS51 DS390 Storage Class Language Extensions In addition to the ANSI storage classes SDCC allows the following MCS51 specific storage classes 3 4 1 1 data near This is the default storage class for the Small Memory model data and near can be used synonymously Variables declared with this storage class will be allocated in the directly addressable portion of the internal RAM ofa 8051 e g data unsigned char test_data Writing 0x01 to this variable generates the assembly code 75 00 01 mov _test_data 0x01 3 4 1 2 xdata far Variables declared with this storage class will be placed in the external RAM This is the default storage class for the Large Memory model e g xdata unsigned char test_xdata Writing 0x01 to this variable generates the assembly code 90s00r00 mov dptr _test_xdata 74 01 mov a 0x01 FO movx dptr a 3 4 1 3 idata Variables declared with this storage class will be allocated into the indirectly addressable portion of the internal ram of a 8051 e g idata unsigned char test_idata Writing 0x01 to this variable generates the assembly code 78r00 mov r0 _test_idata 76 01 mov r0 0x01 Please note the first 128 byte of idata physically access the same RAM as the data memory The original 8051 had 128 byte idata memory nowadays most devices have 256 byte idata memory The stack is located in idata memory 26 3 4 STORAGE CL
176. wicklungsplattform um Programme f r Mikrocont roller der 80x51 Familie zu entwickeln Dazu stehen ein leistungsf higer Makroas sembler und ein Basic Compiler zur Verf gung Der besondere Clou ist dass CESY alle entstehenden Object Codes nicht in irgendwelche Dateien auf der Festplatte packt sondern einen 64 kB gro en sogenannten virtuellen Speicher emuliert der die entstehenden Programmst cke aufnimmt Den virtuellen Speicher k nnen Sie mit dem Monitor nach Herzenslust einsehen und editieren Das Zielsystem das Mikrocontroller System f r welches Ihr Programm geschrie ben wird ist dabei eng mit der Plattform verbunden Download bertragen von Programmcode vom Entwicklungssystem CESY an das Zielsystem und Upload bertragen von Programmcode vom Zielsystem zum Entwicklungssystem CESY sowie das Starten von Programmen erfolgen komfortabel und flexibel ber Men s Den Speicher des Zielsystems haben Sie mit dem Monitor voll unter Kontrolle Assembler Programme k nnen Sie bequem mit dem Debugger auf Fehlerfreiheit testen Dabei wird die entsprechende Zeile im Editor hervorgehoben und Daten sowie SFR Register kontinuierlich angezeigt Wer seine Programme lieber in einer Hochsprache erstellt hat mit dem BASIC Compiler ein m chtiges Werkzeug zur Hand Innerhalb von Minuten ist ein einfa ches Programm erstellt Kompiliert heruntergeladen und gestartet Das BASIC ist durch eine neuentwickelte 24 bit Integer Arithmetik extrem schnel
177. wie Register RO m glich sind die ja als Label verboten w ren In einem Makro d rfen auch Labels vorkommen Sie sind lokal wird innerhalb des Makros ein Label aufgerufen so wird zun chst versucht eine lokale Definition also innerhalb des Makros zu finden Erst dann wird nach drau en gesprungen Ein Makro darf nie ein anderes Makro aufrufen e Definition MAK Name Parl Par2 Par In der Definition d rfen au er nach dem MAK keine Leerzeichen vorkommen Die Parameter d rfen bis zu 6 Zeichen lang sein e Ende der Definition MAEND e Aufruf Name oder Name Parl Par2 34 3 7 Assembler Syntax Beispiel Der Befehl INC DPTR wird h ufig verwendet ein Befehl wie DEC DPTR fehlt jedoch im Befehlssatz Abhilfe schafft ein Makro MAK DECDPTR DEC DPL XCH A DPL A ffh end DPH ORG 1000h MOV DPTR 1000h DECDPTR RET Beachten Sie bitte dass falls keine Parameter ben tigt werden beim Aufruf den noch Klammern zu setzen sind Ansonsten wird das Makro nicht erkannt 3 7 7 Bedingte Assemblierung CESY bietet eine einfache Art bedingt zu assemblieren Dazu k nnen Symbole de finiert werden deren Existenz mit einem IF Konstrukt abgefragt werden k nnen Die Symbole stehen in keinem Zusammenhang mit Labels o sondern stehen vollkommen f r sich Eine Definition wird mit define oder gldefine gemacht Der Unterschied zwischen den Befehlen ist dass bei define das Symbol nur unterhalb der Definit
178. zur Ausf hrung im ROM EPROM geeignet und startet di rekt nach einem Reset e Data Segment Variablen werden im internen Datenspeicher abgelegt Da dieser jedoch recht beschr nkt ist passen in dem Datenspeicher eines 8031 8051 nur 15 Variablen Bei Controllern mit 256 Byte Datenspeicher kann als Adresse 128 ein 54 5 2 Einstellungen gegeben werden dann ist Platz f r alle 26 erlaubten Variablen Au erdem ist dann mehr Speicher f r den Prozessorstack vorhanden was die Programmschachtelungs Tiefe verbessert Achtung Sie m ssen mindestens 5 Variablen im Data Segment halten e Extended Data Segment Der Comaler Einstellungen x Rest der Variablen sowie das Array werden in der XRAM Speicherbank gespeichert Der Beginn dieses Segmentes muss festgelegt werden Werden nicht mehr als Variablen ben tigt als in den internen Datenspeicher passen so wird kein externer RAM Speicher ben tigt Startadresse hex Data Segment hex ExtendedData Segment hex 4000 Anz Variablen im Data Segment hs LCD Befehlsregister hex LCD Datenregister hex e Anz Variablen im Data LCD Delay dez Rh Segment siehe Data Segment Querz Frequenz Milz e LCD Register Wenn ein Baudrate bit s LCD Display am Bus ange schlossen ist kann es von BA SIC aus angesteuert werden Die Adressen daf r nur f r Schreibzugriff k nnen hier an IV Setze Download Adressen automatisch gegeben werden Fast alle LCDs J End

Download Pdf Manuals

image

Related Search

Related Contents

Seiko 7T32 Watch User Manual  Philips Shaving head retaining frame CRP352  Manual de Instalação  Tripp Lite UL 60601-1 User's Manual  Annexe verte «nAturA 2000» Au SchémA régionAl de geStion  COMFORT P70 & P70 H49 INSERT USER MANUAL  CBV-1000 取扱説明書  Agroverd  Endurecedor superficial para pisos sika chapdur  

Copyright © All rights reserved.
Failed to retrieve file