Handbuch www.c-control.
C-Control II Unit
Sehr geehrte Kundin, sehr geehrter Kunde, wir danken Ihnen für Ihr Interesse und Ihr Vertrauen in unsere C-Control II Unit. Für zahllose Anwender ist C-Control bereits seit Jahren ein Begriff für kompakte, zuverlässige und preiswerte Steuerungslösungen. Neben klassischen Applikationen, wie Heizungssteuerungen und Datenerfassungssystemen, sind uns auch erfolgreiche Einsätze in der Industrieautomation, der Laborforschung oder der Midi-Technik in Tonstudios bekannt.
C-Control II Unit Impressum Diese Bedienungsanleitung ist eine Publikation der Conrad Electronic GmbH, Klaus-Conrad-Straße 1, D-92240 Hirschau. Alle Rechte einschließlich Übersetzung vorbehalten. Reproduktionen jeder Art, z.B. Fotokopie, Mikroverfilmung oder die Erfassung in EDV-Anlagen, bedürfen der schriftlichen Genehmigung des Herausgebers. Nachdruck, auch auszugsweise, verboten. Diese Bedienungsanleitung entspricht dem technischen Stand bei Drucklegung, Änderung in Technik und Ausstattung vorbehalten.
Inhalt Inhaltsverzeichnis Seite 1. Einleitung 13 2. Wichtige Hinweise 15 2.1 Lesen dieser Anleitung 15 2.2 Handhabung 15 2.3 Bestimmungsgemäße Verwendung 16 2.4 Gewährleistung und Haftung 17 2.5 Service 18 3. Hardware 19 3.1 (entfällt) 19 3.2 Schaltungstechnik - intern 19 3.2.1 Mikrocontroller 19 3.2.2 Speicher 20 3.2.3 Referenzspannungserzeugung 20 3.2.4 Takterzeugung 21 3.2.5 (entfällt) 21 3.3 Schaltungstechnik - extern 22 3.3.
C-Control II Unit 4.3 Hostmodus 4.3.1 Systeminitialisierung und automatisches Starten von Anwenderprogrammen 37 4.3.2 Download von Anwenderprogrammen und anderen Host-Befehlen 38 4.4 Virtuelle Maschine 38 4.4.1 Grundlagen 38 4.4.2 Binärcodeinterpreter 39 4.4.3 Multithreading 40 4.4.4 Programm- und Konstantenspeicher 41 4.4.5 Datenspeicher 41 4.4.6 Stapelprozessor 42 4.4.7 Systemschnittstelle 42 5. Die Programmiersprache C2 43 5.1 Einleitung 43 5.
Inhalt 5.6.4 Unbenannte Stringkonstanten 58 5.6.5 Definition von benannten Konstanten 59 5.6.6 Benannte konstante Arrays 60 5.7 Operatoren 61 5.7.1 Rangfolge 61 5.7.2 Arithmethische Operatoren 62 5.7.3 Bitschiebeoperatoren 62 5.7.4 Vergleichsoperatoren 63 5.7.5 Logische Operatoren und Bitmanipulationen 63 5.7.6 Stringverkettung mit dem Operator + 65 5.8 Funktionen 66 5.8.1 Funktionskopf 66 5.8.2 Parameter und lokale Variablen 68 5.8.
C-Control II Unit 6. Softwareentwicklung 87 6.1 Installation und Start der Integrierten Entwicklungsumgebung 87 6.2 Quelltexte bearbeiten 87 6.3 Richtlinien zur Quelltextformatierung 88 6.3.1 Vorteile der einheitlichen Formatierung 88 6.3.2 Kommentare 88 6.3.3 Bezeichner 89 6.3.4 Ausdrücke 89 6.3.5 Funktionsdefinitionen 89 6.3.6 Threads 90 6.3.7 Anweisungsblöcke 90 6.3.8 Kombinationen mit Schlüsselworten zur Ablaufsteuerung 91 6.4 Automatischer Compiler 92 6.
Inhalt 7.2.5 Test auf Empfang 101 7.2.6 Lesen eines empfangenen Bytes 101 7.2.7 Empfang von Datenrahmen 101 7.2.8 Test auf Sendebereitschaft 102 7.2.9 Senden eines Bytes 102 7.2.10 Senden von Datenrahmen 102 7.3 i2c.c2 103 7.3.1 Initialisierung 103 7.3.2 Start der Übertragung 103 7.3.3 Senden der Stopbedingung 103 7.3.4 Schreiben eines Bytes 104 7.3.5 Lesen eines Bytes mit Acknowledge 104 7.3.6 Lesen eines Bytes ohne Acknowledge 104 7.3.
C-Control II Unit 7.7 mem.c2 110 7.7.1 Füllen mit einem Wert 110 7.7.2 Kopieren 111 7.7.3 Speichern von Zahlenwerten in einem Bytepuffer 111 7.7.4 Lesen von Zahlenwerten aus einem Bytepuffer 112 7.8 plm.c2 112 7.8.1 Setzen der Zeitbasis 113 7.8.2 Setzen des Portmodus 113 7.8.3 Einstellen der Periodenlänge 113 7.8.4 PLM-Ausgabe 113 7.8.5 Ausgabe von Tonfrequenzen 114 7.9 ports.c2 114 7.9.1 Abfrage von Digitalports 115 7.9.2 Setzen von Digitalports 116 7.
Inhalt 7.12.2 Abfrage auf Empfang des Antwortrahmens 125 7.12.3 Datenübertragung 125 7.13 constant.c2 und vmcodes.c2 126 8. Systemprogrammierung ✰✰✰ 127 8.1.1 TASKING C/C++ Tools 127 8.1.2 Ergänzungen der virtuellen Maschine und Änderungen am Betriebssystem 127 8.1.3 Implementierung eines eigenen Betriebssystem 128 9. Anhang 129 9.1 Technische Daten 129 9.1.1 Mechanik 129 9.1.2 Umgebungsbedingungen 129 9.1.3 Versorgungsspannung 129 9.1.4 Ports 129 9.
C-Control II Unit 12
1. Einleitung 1 Einleitung C-Control II ist ein kompakter Steuerungscomputer. Das System basiert auf einem Mikrocontroller des deutschen HiTech-Unternehmens Infineon Technologies. Dieser Mikrocontroller wird z.B. in großen Stückzahlen in einigen aktuellen Fahrzeugmodellen der deutschen Automobilindustrie eingesetzt. Dort übernimmt der Controller wichtige Steuerungsaufgaben der Bordelektronik. C-Control II bietet Ihnen diese hochmoderne Technologie zur Lösung Ihrer Steuerungsprobleme.
C-Control II Unit Teile dieser Anleitung können ohne Vorankündigung ungültig werden. Das ist bedingt durch eventuell notwendige technische Änderungen zur Verbesserung des Produktes oder zur Anpassung an die aktuelle Verfügbarkeit von Bauelementen. Wir werden die dann notwendigen Informationen im Internet unter www.c-control.de bereitstellen.
2 Wichtige Hinweise 2 Wichtige Hinweise 2.1 Lesen dieser Anleitung Bitte lesen Sie diese Anleitung, bevor Sie die C-Control II Unit in Betrieb nehmen. Während einige Kapitel nur für das Verständnis der tieferen Zusammenhänge von Interesse sind, enthalten andere wichtige Informationen, deren Nichtbeachtung zu Fehlfunktionen oder Beschädigungen führen kann. Kapitel und Absätze, die Themen mit gehobenem Schwierigkeitsgrad enthalten, sind durch das Symbol ✰✰✰ gekennzeichnet.
C-Control II Unit 2.3 Bestimmungsgemäße Verwendung Die C-Control II Unit ist ein elektronisches Bauelement im Sinne eines integrierten Schaltkreises. Die C-Control II Unit dient zur programmierbaren Ansteuerung elektrischer und elektronischer Geräte. Der Aufbau und Betrieb dieser Geräte muß konform zu geltenden europäischen Zulassungsrichtlinien (CE) erfolgen. Die C-Control II Unit darf nicht in galvanischer Verbindung zu Spannungen über Schutzkleinspannung stehen.
2 Wichtige Hinweise 2.4 Gewährleistung und Haftung Conrad Electronic bietet für die C-Control II Unit eine Gewährleistungsdauer von 24 Monaten ab Rechnungsdatum. Innerhalb dieses Zeitraums werden defekte Units kostenfrei umgetauscht, wenn der Defekt nachweislich auf einen Produktionsfehler oder Transportschaden zurückzuführen ist. Die Software im Betriebssystem des Mikrocontrollers sowie die PC-Software auf CD-ROM werden in der vorliegenden Form geliefert.
C-Control II Unit 2.5 Service Conrad Electronic stellt Ihnen ein Team von erfahrenen Servicemitarbeitern zur Seite. Sollten Sie Fragen zur C-Control II Unit haben, erreichen Sie unsere Technische Kundenbetreuung telefonisch, per Brief, Fax oder E-Mail. Telefon: 0180 / 53 12 116 FAX: 0180 / 53 12 119 Postanschrift: Conrad Electronic GmbH TKB Computer- und Meßtechnik Klaus-Conrad-Str. 1 92240 Hirschau E-Mail: webmaster@c-control.de Bitte nutzen Sie vorzugsweise die Kommunikation per E-Mail.
3 Hardware 3 Hardware In diesem Kapitel erfahren Sie die wichtigsten Grundlagen zur Hardware der C-Control II Unit. Auf den hinteren Umschlagseiten finden Sie den vollständigen Schaltplan der C-Control II Unit. Er dokumentiert den inneren Aufbau und die Funktionsweise der Unit. Die Schaltung wurde nach Applikationsvorschlägen aus den Datenblättern der verwendeten ICs entwickelt. Bei Fragen zu Details konsultieren Sie bitte diese Datenblätter.
C-Control II Unit Der Mikrocontroller verarbeitet Daten mit einer Breite von 16 Bit. Sein Adreßraum umfaßt 16MB - Speicheradressen bestehen aus einem Segment-Byte und einem Offset-Word. Die Kontrolle der umfangreichen Hardwareressouren des Controllers erfolgt über Einträge in die Special Function Registers (SFR). Diese befinden sich in einem Bereich des ersten Speichersegments im internen RAM des Controllers.
3 Hardware Referenzspannungs-IC erzeugt. Die Toleranz der Referenzspannung liegt unter einem Prozent. Die maximale Temperaturdrift über den gesamten zulässigen Betriebstemperaturbereich beträgt 50ppm (parts per million, 1ppm = 0,0001 Prozent). Eine Differenz von einem Bit des digitalisierten Meßwertes entspricht einer Spannungsdifferenz von 4mV. Ist x ein digitaler Meßwert, dann errechnet sich der entsprechende Spannungswert u wie folgt: u = x * 4,096V / 1024 oder einfach: u = x * 0,004V 3.2.
C-Control II Unit 3.3 Schaltungstechnik - extern 3.3.1 Anschlußbelegung - Überblick X3 POWER GND X2 5 Volt GND P1H.7 5 Volt GND GND GND LCD ADJ GND GND PLM 0 P1L.7 P1L.6 BEEP PLM 1 P1L.5 P1L.4 FRQ 1 DCF/FRQ 0 P1L.3 P1L.2 GND GND P1L.1 P1L.0 ADC 0 ADC 1 GND GND ADC 2 ADC 3 RSTOUT NMI ADC 4 ADC 5 RSTIN GND ADC 6 ADC 7 BOOT GND GND GND HOST GND I2C SCL I2C SDA CAN TxD CAN RxD GND n.c. CANL CANH n.c. n.c.
3 Hardware Allgemein: GND n.c. X1: X2: … ground (Masse, Bezugspotential) … not connected (nicht belegt, frei) TxD … serielle Schnittstelle (hwcom) - Sendeleitung, NRZ-Signal RxD … serielle Schnittstelle (hwcom) - Empfangsleitung, NRZ-Signal RTS … serielle Schnittstelle (hwcom) - Request To Send, NRZ-Signal CTS … serielle Schnittstelle (hwcom) - Clear To Send, NRZ-Signal 5 Volt … stabilisierte Ausgangsspannung des Schaltreglers LCD ADJ … Eingang für LCD-Kontrasteinstellung P1L.
C-Control II Unit Anmerkung zu “CAN_Rx” und “digital RxD”: an diesen Pins darf kein Signal eingespeist werden! Sie dienen ausschließlich zur Signalanalyse, z.B. mit Hilfe eines Speicheroszilloskopes. 3.3.2 Spannungsversorgung (POWER, 5 Volt, GND) In der Unit befindet sich ein kompaktes IC-Schaltnetzteil, das aus der am Pin POWER eingespeisten Versorgungsspannung die stabilisierte 5V-Betriebsspannung für den Mikrocontroller und alle anderen Schaltkreise erzeugt.
3 Hardware 3.3.4 Reset (RSTIN, RSTOUT) Ein Reset bewirkt die Rückkehr des Mikrocontrollersystems in einen definierten Anfangszustand. Die C-Control II Unit kennt grundsätzlich 3 Reset-Quellen • Power-On-Reset: wird automatisch nach dem Einschalten der Betriebsspannung ausgeführt. • Hardware-Reset: wird ausgeführt wenn der RSTIN-Pin der Unit “low” gezogen und wieder losgelassen wird, z.B. durch kurzes Drücken eines angeschlossenen Reset-Tasters.
C-Control II Unit RSTOUT ist ein Ausgangssignal des Mikrocontrollers. Es ändert seinen Pegel nach “low”, wenn eine Restbedingung eintritt. Es wird vom Betriebssystem erst nach Abschluß einiger Systeminitialisierungen wieder auf “high” gesetzt. Somit können externe Schaltungen rückgesetzt werden, die erst arbeiten dürfen, wenn C-Control II Unit nach dem Reset ihre Grundeinstellungen vorgenommen hat. Der RSTOUT-Pin sollte ohne interne Kenntnis des Betriebssystems nicht benutzt werden. 3.3.
3 Hardware gen SUB-D Buchse des PCs hergestellt. Der zweite Kanal des Pegelwandlers kann entweder für RTS/CTS-Handshake-Signale für die erste serielle Schnittstelle (hwcom) oder für die Datenleitungen der zweiten seriellen Schnittstelle (swcom) verwendet werden. Die NRZ-Seite des zweiten Kanals finden Sie an den Pins RTS und CTS. Wenn Sie die Pins “digital RTS” mit “µC RTS” und “digital CTS” mit “µC CTS” verbinden, dann arbeitet die erste serielle Schnittstelle (hwcom) mit HandshakeSignalen.
C-Control II Unit ☞ Verbinden Sie niemals die seriellen Sendeausgänge zweier Geräte miteinander! Sie erkennen die Sendeausgänge in der Regel an der negativen Ausgangsspannung im Ruhezustand. ☞ Wird die zweite serielle Schnittstelle ohne Pegelwandler betrieben, gilt wie für alle digitalen Ports eine maximal zulässige Leitungslänge von 0,25 Metern.
3 Hardware Nach dem Reset ist zunächst jeder Digitalport als Eingangsport konfiguriert. Ein Port wird automatisch zum Ausgangsport, wenn das Anwenderprogramm einen Ausgabewert an diesen schreibt. Durch Aufruf einer speziellen Funktion der Standardmodule kann ein Ausgangsport jedoch wieder deaktiviert werden, d.h. in den hochohmigen Zustand gebracht werden (7.9.4). 3.3.8 Sonderfunktionen der Digitalports Einige Digitalports stehen alternativ für spezielle Ein-/Ausgabe-Operationen zur Verfügung.
C-Control II Unit 3.3.8.2 Zweite serielle Schnittstelle (swcom) An den Digitalports P1H.1 und P1H.2 kann das Betriebssystem softwaremäßig eine zweite asynchrone Schnittstelle emulieren. Lesen Sie dazu die Kapitel 3.3.6 und 7.2. 3.3.8.3 Zweidrahtbus Conrad Electronic hat eine Familie von Sensor- und Aktuatormodulen entwickelt, mit denen ein Steuercomputer, wie die C-Control II Unit, um zusätzliche Ein- und Ausgabefunktionen erweitert werden kann.
3 Hardware Zur Ankoppelung der C-Control II Unit an den 2W-Bus benötigen Sie das 2W-BusModem. Dieses Modem hat einen Eingang für die unmodulierte 12V- Versorgungsspannung aus einem Netzteil sowie eine synchrone digitale Schnittstelle mit einer Daten-, einer Takt- und einer Masseleitung (DATA, CLOCK, GND). Ausgangsseitig befindet sich der 2W-Bus-Anschluß. Die Leitungslänge vom 2W-Bus-Modem zu einem 2W-Bus-Modul kann bis zu 20m betragen.
C-Control II Unit Signal C-Control II Pin SUB-D 25 Pin Datenbit 0 P1L.0 2 Datenbit 1 P1L.1 3 Datenbit 2 P1L.2 4 Datenbit 3 P1L.3 5 Datenbit 4 P1L.4 6 Datenbit 5 P1L.5 7 Datenbit 6 P1L.6 8 Datenbit 7 P1L.7 9 BUSY (Handshake) P1H.5 11 ACKNOWLEDGE (Handshake) P1H.6 10 STROBE (Handshake) P1H.7 1 Masse GND 18 … 25 Das Betriebssystem verfügt über eingebaute Routinen zur Datenausgabe an den Drucker über die genannten Ports.
3 Hardware benutzt werden, ebenso der zweite Frequenzmeßpin FRQ1. Die Frequenzmessung erfolgt nach dem Prinzip der Pulszählung in einer Torzeit von einer Sekunde. Dadurch ergeben die Zählwerte direkt eine Frequenz in Hz. Weitere Hinweise zu Funkuhrempfang und Frequenzmessung finden Sie in den Kapiteln 7.11 und 7.9.6. 3.3.11 PLM-Ports Die C-Control II Unit verfügt über drei Ports (“Kanäle”) zur Ausgabe pulslängenmodulierter Signale: PLM0, PLM1 und BEEP/PLM2.
C-Control II Unit PLM-Kanals ergibt sich aus 1 / (Zeitbasis * Periodenlänge). Hinweise zur Ausgabe von Tonfrequenzen finden Sie im Kapitel 7.8.5 Die PLM-Ports sind nach ihren elektrischen Eigenschaften Digitalports. Beachten Sie die technischen Randbedingungen für Digitalports (max. Strom). 3.3.12 CAN-Interface CAN - “Controller Area Network” - ist ein digitales Kommunikationssystem zur Vernetzung von mikrocontrollerbasierten Baugruppen.
3 Hardware unterstützt. Diese Bitrate erfordert besondere Maßnahmen zur Übertragungssicherheit und vor allem gegen die Störaussendung. Conrad Electronic geht nicht davon aus, daß die C-Control II Unit in Applikationen Einsatz findet, die derartige hohe Übertragungsraten erforderlich machen.
C-Control II Unit 4 Betriebssystem 4.1 Überblick Das Betriebssystem der C-Control II Unit übernimmt das gesamte Interrupt-Handling, die Konfiguration des Mikrocontrollers nach dem Reset, das Laden von Anwenderprogrammen in den FLASH-Speicher sowie den Start und die Ausführung von Anwenderprogrammen. Während des Programmablaufes steuert das System alle Ein- und Ausgabeoperationen im Hintergrund der Anwendung.
4 Betriebssystem RSTIN ca. 3s BOOT Starten Sie nun die Datenübertragung des Systems mit Hilfe des Boot-Tools. Dieses PCProgramm übernimmt die gesamte Steuerung des Boot-Vorganges: Die Übertragung beginnt mit einem Nullbyte (1 Startbit, 8 Datenbits = 0, 1 Stopbit) Der Mikrocontroller der C-Control II Unit empfängt das Nullbyte und benutzt es zur Messung der Übertragungsgeschwindigkeit (z.B. 9600 Baud). Dann initialisiert er seine eigene Schnittstelle entsprechend.
C-Control II Unit RSTIN ca. 3s HOST 4.3.2 Download von Anwenderprogrammen und andere Host-Befehle Im Hostmodus erwartet das System den Empfang von Kommandobytes über die serielle Schnittstelle, die es dann ausführt. Der wichtigste Befehl ist der zum Start des ProgrammDownload (CMD_LOAD_VMC). Beim Download wird ein kompiliertes Anwenderprogramm (VMC-Datei) vom PC zur C-Control II Unit übertragen und von dieser im FLASHSpeicher abgelegt.
4 Betriebssystem Architektur wird per Software auf einem existierenden Computersystem hergestellt.
C-Control II Unit 4.4.3 Multithreading Ein Hauptmerkmal der C-Control II Unit ist die Unterstützung von Multithreading in Anwenderprogrammen. Verschiedene Programmteile können quasi gleichzeitig und voneinander unabhängig abgearbeitet werden. Dadurch lassen sich komplexe, in der Applikation parallel und asynchron ablaufende Vorgänge auf einfache Weise behandeln.
4 Betriebssystem sinnvoll, allen Threads die Priorität 1 zu erteilen. Die Performance steigt mit der Vergabe von hohen Prioritäten. Das wird jedoch durch längere Reaktionszeiten erkauft. Im nicht zu empfehlenden Extremfall haben alle Threads die Priorität 255. Es hat sich bewährt, die meisten Threads mit einer eher niedrigen Standardpriorität (z.B. 32) laufen zu lassen.
C-Control II Unit 4.4.6 Stapelprozessor Die virtuelle Maschine der C-Control II Unit arbeitet als Stapelprozessor. Sie implementiert nicht wie viele Mikrocontroller und Mikroprozessoren spezielle Rechenregister oder einen Akkumulator. Statt dessen werden alle Operanden auf einen Stapel (Stack) geladen. Die Operationen des virtuellen Prozessors manipulieren stets den obersten Wert auf dem Stapel oder verknüpfen die zwei obersten Werte zu einem Ergebnis.
5 Programmiersprache C2 5 Die Programmiersprache C2 5.1 Einleitung Die Programmierung der C-Control II Unit erfolgt in der Programmiersprache C2. C2 ist syntaktisch ähnlich zu C, einige Details erinnern auch an PASCAL oder BASIC. Wie in C gibt es nur eine überschaubare Anzahl von Schlüsselworten. Einige Schlüsselworte dienen speziell der Unterstützung des Multithreading. Alle System- und Spezialfunktionen werden über Bibliotheksmodule zur Verfügung gestellt und können in Projekte eingebunden werden.
C-Control II Unit Ein C2-Projekt kann aus beliebig vielen Modulen bestehen. Ein Modul ist eine einfache ASCII-Textdatei mit der Dateierweiterung “c2”. Der Dateiname - ohne Pfad und Extension - ist der Modulname. Der Name eines Moduls muß ein gültiger C2-Bezeichner sein (siehe unten). Jeder Name darf nur einmal im Projekt vorkommen. Auf die Module verteilt steht der gesamte Quelltext eines Programms.
5 Programmiersprache C2 eingeleitet werden. Jeglicher Text bis zum Zeilenende, einschließlich der Schrägstriche, wird beim Compilieren überlesen. z.B.: a = 123; // das ist ein Kommentar Mehrzeilige Kommentare können in /* */ -Sequenzen eingebettet werden. z.B.: /* das alles ist ein Kommentar */ Verschachtelte mehrzeilige Kommentare sind nicht zulässig. 5.3.2 Zwischenräume Alle Zeichen mit den ASCII-Codes 0 … 32 werden als Zwischenräume (engl.
C-Control II Unit ohne Zwischenraum der Modulname und ein Punkt vorangestellt werden. Beispiel: Funktion fx, definiert in Moduldatei a.c2 function fx () { // ... } Aufruf der Funktion weiter unten in a.c2 fx(); Aufruf der Funktion in einem anderen Modul (in der Modulliste des Projektes nach a.c2) a.
5 Programmiersprache C2 Anweisungsblöcke sind Folgen von Anweisungen, die durch geschweifte Klammern { } zusammengefaßt sind. z.B.: { a = 123; b = a + 1; } Nach einem Anweisungsblock ist kein Semikolon erforderlich. Anweisungsblöcke können statt einer einzelnen Anweisung stehen, z.B. um mehrere Aktionen innerhalb einer Programmsteueranweisung auszuführen. z.B.: if x > 0 { a = 123; b = a + 1; } 5.3.
C-Control II Unit weitestgehend vorherzubestimmen und zusammenzufassen. So wird die Anweisung a = 1 + 2 + 1977 + c vom Compiler vorberechnet und intern umgewandelt in a = 1980 + c Funktionen (siehe 5.8) werden jedoch immer aufgerufen und ausgeführt, auch wenn deren Parameter und der Rückgabewert konstant sind. In konstanten Ausdrücken sind auch zuvor definierte benannte Konstanten (siehe 5.6) verwendbar. 5.3.6 Schlüsselworte Untenstehend finden Sie eine alphabetische Liste aller C2-Schlüsselworte.
5 Programmiersprache C2 Rechengenauigkeit gewählt werden. Operationen mit long- und float-Daten führen zu einem wesentlich höherem Bedarf an Speicherplatz und Rechenzeit. Die Ausführungsgeschwindigkeit von float-Operationen ist geringer als die von longOperationen. Diese wiederum dauern etwas länger als int-Berechnungen. Das Rechnen mit Bytes anstelle von Integerdaten bringt keinen Geschwindigkeitsvorteil, da Bytes vom Stapelprozessor der virtuellen Maschine immer zu Integern erweitert werden.
C-Control II Unit Beispiele: type Position { int x; int y; } type MyType { Position pos; float value; string text; } Vorteile eigener Typen sind z.B die bessere Lesbarkeit eines Programmes und die einfachere Übergabe zusammengehöriger Daten an Funktionen, also z.B. function fx ( MyType t ) … statt function fx ( int xpos, int ypos, float value, string text ) … 5.5 Variablen 5.5.1 Definition von Variablen Variablen dienen zur Zwischenspeicherung von Daten während des Programmablaufes.
5 Programmiersprache C2 z.B. int i; string s; Mehrere Variablen gleichen Typs können in einer gemeinsamen Anweisung definiert werden. Dabei sind mehrere Bezeichner jeweils durch ein Komma voneinander getrennt. Typ Name1, Name2, …; z.B. long x,y,z; Definierte Variablen können nachfolgend in Ausdrücken und Zuweisungen verwendet werden. z.B. int x, y; x = 18; y = 8 * x; 5.5.
C-Control II Unit 5.5.3 Definition und Indizierung von variablen Arrays C2 unterstützt die Definition von variablen eindimensionalen Arrays. Bei der Definition folgt dann nach dem Variablenbezeichner in eckigen Klammern [ ] ein konstanter Ausdruck. Der Ergebniswert des Ausdrucks legt die Anzahl der Arrayelemente fest. Typ ArrayName[konstanter Wert]; z.B. float coeff[10]; Der benötigte Speicherplatz errechnet sich aus der Größe eines einzelnen Elements, multipliziert mit der Anzahl der Elemente.
5 Programmiersprache C2 Type Matrix { Line line[10]; }; Matrix m; int x; int i,k; ... x = m.line[i].row[k]; Diese Syntax ist zwar etwas schreibaufwendiger als ein vergleichbares m[i][k] in anderen Programmiersprachen, dafür ist die Lesbarkeit von C2-Programmen an dieser Stelle wesentlich besser. 5.5.4 Initialisierung Der Wert einer Variablen nach der Definition ist zunächst unbestimmt. Bevor eine Variable zur Berechnung eines Ausdrucks herangezogen wird, sollte sie initialisiert werden.
C-Control II Unit MyType t; t.pos.x = 0; t.pos.y = 0; t.value = 0; t.text = ””; 5.5.5 Globale und lokale Variablen C2 und die virtuelle Maschine der C-Control II Unit unterscheiden zwischen globalen und lokalen Variablen. Globale Variablen werden auf Modulebene neben Threads, Funktionen, benannten Konstanten und zusammengesetzten Datentypen definiert. z.B. int i; function fx () { //...
5 Programmiersprache C2 z.B. function fx () { int i; //... } Lokale Variablen einer Funktion werden zur Programmlaufzeit auf dem Stack des aktuellen Threads angelegt und existieren nur innerhalb eines Speicherkontextes, d.h. während der Abarbeitung einer Funktion. Sie sind nur innerhalb dieses Kontextes sichtbar und zugreifbar. Beim Verlassen einer Funktion endet der Lebenszyklus einer lokalen Variable.
C-Control II Unit z.B. in Modul a.c2 int i; function fx () { int i; i = 0; // <- lokales i a.i = 0; // <- globales i } 5.6 Konstanten 5.6.1 Benannte und unbenannte Konstanten Unbenannte Konstanten werden sehr häufig verwendet. In der Anweisung a = 1; ist “1” eine unbenannte Zahlenkonstante. Benannte Konstanten repräsentieren einen Wert, der ihnen zuvor in der Konstantendefinition (siehe weiter unten) zugewiesen wurde.
5 Programmiersprache C2 5.6.2 Unbenannte Zahlenkonstanten Dezimalzahlen bestehen aus einer Folge der Ziffern 0 … 9 ohne Zwischenräume. Optional kann ein Minus als negatives Vorzeichen vorangestellt werden. Bei dezimalen Fließkommazahlen folgen ohne Zwischenraum ein Dezimalpunkt (kein Komma!) und die Nachkommastellen. Das Exponentialformat wird nicht unterstützt. Hexadezimalzahlen sind Folgen der Hexadezimalziffern 0 … 9, A … F bzw. a … f mit dem Präfix “0x” oder “0X” (vgl. C/C++).
C-Control II Unit Sondercodes mit Codezeichen: Codezeichen Bedeutung Vollständige Zeichenkonstante a Klingelton (bell) ‘\a’ b Backspace (ein Zeichen zurück) ‘\b’ f Steuerzeichen “form feed”, ‘\f’ Seitenvorschub auf einem Ausgabegerät n Steuerzeichen “new line”, ‘\n’ Zeilenvorschub auf einem Ausgabegerät r Steuerzeichen “carriage return”, ‘\r’ Wagenrücklauf auf einem Ausgabegerät t Tabulator (Zwischenraumzeichen) ‘\t’ \ Backslash ‘\\’ ‘ Hochkomma ‘\’’ “ Anführungszeichen ‘\”’ S
5 Programmiersprache C2 ☞ Das abschließende Anführungszeichen einer Stringkonstanten muß vor dem Zeilenende stehen. Längere Strings können gebildet werden, in dem zwei Stringkonstanten, jeweils in Anführungszeichen, hintereinander im Quelltext stehen. Zwischen den Teilstrings dürfen beliebige Zwischenraumzeichen stehen, auch Zeilenvorschübe. ”abc” ”xyz” wird vom C2-Compiler verkettet zu ”abcxyz” 5.6.5 Definition von benannten Konstanten Benannte Konstanten werden stets global auf Modulebene definiert.
C-Control II Unit Neben numerischen Konstanten können auch Stringkonstanten benannt werden. Statt des konstanten numerischen Ausdrucks muß dann eine Zeichenkette in Anführungszeichen nach dem Zuweisungsoperator stehen. const Name = ”Text”; z.B.: const GREETINGS = ”Hallo C2”; const TABLEHEAD = ”Nummer\tZeit\tWert”; Stringkonstanten belegen im Konstantenspeicher der C-Control II Unit nur so viele Bytes, wie sie Zeichen enthalten, zuzüglich eines Bytes zur Speicherung der Stringlänge.
5 Programmiersprache C2 z.B.: const menu[] = ”rice”, ”couscous”, ”potatos”; 5.7 Operatoren 5.7.1 Rangfolge Operatoren teilen numerische Ausdrücke in Teilausdrücke. Dabei werden die Operatoren in einer von ihrem Rang abhängigen Reihenfolge ausgewertet und die Teilausdrücke zur Programmlaufzeit nacheinander berechnet (vgl. Vereinbarung in der Mathematik “Punktrechnung vor Strichrechnung”). z.B.: a = 10 + 4 * 2; // a wird 18 Ausdrücke mit Operatoren gleichen Ranges werden von links nach rechts berechnet.
C-Control II Unit Rangfolge der Operatoren in C2: Rang Operator 8 ( ) 7 - (negatives Vorzeichen) 6 * / 5 4 << 3 == != 2 1 | or % mod + - >> shr < >= <= and !| not shl > & ! !& nor nand ^ xor Zu einigen Operatoren existiert neben einem Symbol eine alternative Schlüsselwortform, z.B. stehen % und mod für die Modulodivision. Wählen Sie selbst, welche Form Sie bevorzugen, das Ergebnis bleibt gleich. 5.7.
5 Programmiersprache C2 5.7.4 Vergleichsoperatoren Vergleichsoperatoren liefern den Wert -1, (minus 1, nicht 1!), falls der Ausdruck wahr ist. Ist der Ausdruck falsch, wird das Vergleichsergebnis 0. Der Wert -1 entspricht hexadezimal dem Integerwert 0xFFFF bzw. dem Longinteger 0xFFFFFFFF.
C-Control II Unit Operator & !& | !| ^ Bedeutung and und nand und mit anschließender Bitinvertierung or oder nor oder mit anschließender Bitinvertierung xor exklusiv-oder Beispielausdruck Ergebnis 1 & 1 1 1 and 0 0 14 & 3 2 (1<2)&(2<3) -1 (1<2)&(3<2) 0 1 !& 1 -2 1 nand 0 -1 14 !& 3 -3 (1<2)!&(2<3) 0 (1<2)!&(3<2) -1 1 | 1 1 1 or 0 1 0 or 0 0 14 or 1 15 (1<2)|(2<3) -1 (1<2)|(3<2) -1 (2<1)|(3<2) 0 1 !| 1 -2 1 nor 0 -2 0 nor 0 -1 14 nor 1 -16 (1<2)|(2<3)
5 Programmiersprache C2 Das gilt jedoch nicht für konstante float-Ausdrücke, die keinen “echten” Fließkommawert haben, z.B. 2.0, da diese vom Compiler als int- oder longKonstanten betrachtet werden. z.B.: float x; int result; x = 2; result = not x; // result wird 0 result = not 2.0; // result wird -3 5.7.6 Stringverkettung mit dem Operator + Bei Zuweisungen an string-Variablen kann auf der rechten Seite des Zuweisungsoperators ein verketteter Stringausdruck stehen.
C-Control II Unit s1 = ”bbb”; sa[0] = ”uuu”; sa[1] = ”vvv”; sa[2] = ”www”; // Stringzuweisung mit Verkettung: s = s1 + sa[2] + S + SA[0] + ”ccc” + (’A’+3); Nach dieser Anweisung enthält s den Text ”bbbwwwAAAXXXXcccD”. 5.8 Funktionen Die virtuelle Maschine der C-Control II Unit unterstützt die Programmierung mit Unterfunktionen. Blöcke von Anweisungen, die im Programm mehrfach benutzt werden, können in Funktionen zusammengefaßt werden. Beim Aufruf einer Funktion können Parameter übergeben werden.
5 Programmiersprache C2 Funktionen in C2 können nur numerische Ergebnisse zurückgeben, also die Datentypen byte, int, long und float. Die Rückgabe von Strings, Arrays oder zusammengesetzten Typen ist nicht möglich.
C-Control II Unit 5.8.2 Parameter und lokale Variablen Im Anweisungsblock einer Funktion können lokale Variablen definiert werden (siehe 5.5.5) Die im Funktionskopf definierten Parameter können ebenso wie Variablen verwendet werden. Numerische Parameter (byte … float) sind echte lokale Variablen der Funktion. Sie werden beim Aufruf der Funktion auf dem Stack des aktuellen Threads gespeichert und mit dem übergebenen Wert initialisiert.
5 Programmiersprache C2 5.8.3 Ende einer Funktion und Ergebnisrückgabe Eine Funktion endet automatisch, wenn die Programmausführung zur schließenden geschweiften Klammer des Anweisungsblocks gelangt. Eine Funktion mit Rückgabewert liefert dann das Ergebnis 0. z.B.
C-Control II Unit 5.8.4 Aufruf Der Aufruf einer Funktion erfolgt durch Angabe ihres Bezeichners, gefolgt von einer öffnenden und einer schließenden runden Klammer. Wenn im Kopf der Funktion formale Parameter definiert wurden, so müssen beim Funktionsaufruf innerhalb der runden Klammern genau so viele aktuelle Parameter aufgelistet werden, jeweils durch ein Komma getrennt. z.B.: function fx ( int a, int b ) // zwei Parameter { //...
5 Programmiersprache C2 5.8.5 Typenprüfung Der C2-Compiler führt zu jedem Aufruf einer Funktion eine Prüfung durch, ob neben der Anzahl der Parameter auch deren jeweiliger Typ der Funktionsdefinition entspricht. Ein Bezeichner einer string-Variablen kann z.B. nicht übergeben werden, wenn laut Definition an dieser Stelle ein numerischer Ausdruck erwartet wird.
C-Control II Unit Rekursionen führen ab einer gewissen Tiefe immer zur Überschreitung des Stackbereiches, der für einen Thread reserviert ist. Dann werden Daten anderer Threads ungewollt überschrieben. Das kann von lokalem Fehlverhalten bis zum Absturz des gesamten Systems der C-Control II Unit führen! 5.8.7 Inline-Funktionen und -Anweisungen Die Bibliotheksmodule zum Zugriff auf die Ressourcen der C-Control II Unit (z.B. hwcom.
5 Programmiersprache C2 Beispiel: thread blink2 { ports.set(2,-1); sleep 200; ports.set(2,0); sleep 800; } 5.9.2 main-Threads Ein Thread, dessen Bezeichner nicht “main” ist, hat zum Programmstart die Priorität 0, d.h. er befindet sich im Stillstand, seine Anweisungen werden nicht ausgeführt. Jedes Modul kann einen main-Thread enthalten, also einen Thread mit dem Bezeichner “main”. Dieser hat bei Programmstart die Standardpriorität 32. Seine Anweisungen werden von Beginn an ausgeführt.
C-Control II Unit Komplexere Anweisungen sind entsprechend umfangreicher. Das System kann einen Thread durchaus auch innerhalb einer Anweisung unterbrechen, z.B. vor der Addition im obigen Beispiel. Da jeder Thread mit seinem eigenen Stack arbeitet, gibt es dabei keine Probleme. Zur Änderung der Priorität eines Threads gibt es in C2 verschiedene Schlüsselworte. • run Das Schlüsselwort run wird in zwei Formen verwendet. Form 1 setzt die Priorität des angegebenen Threads auf den Standardwert 32.
5 Programmiersprache C2 z.B.: halt blink2; Form 2: halt; Angehaltene Threads können nur durch andere Threads wieder gestartet werden. • resume Die resume-Anweisung setzt die Priorität eines Threads auf den Wert vor der letzten run- oder halt-Anweisung in Bezug auf diesen Thread. Es gibt ebenfalls zwei Formen. Form 1 bezieht sich auf den angegebenen Thread, Form 2 auf den aktuell laufenden. Form 1: resume ThreadName; z.B.
C-Control II Unit 5.9.4 Warten auf Ereignisse In bestimmten Situationen soll ein Thread auf das Eintreten eines Ereignisses warten und in der Wartephase möglichst wenig Rechenkapazität belegen. Dafür dient in C2 die wait-Anweisung. Die wait-Anweisung prüft den Wert eines angegebenen numerischen Ausdrucks. Ist der Wert gleich 0, dann gibt der aktuelle Thread die Programmausführung, unabhängig von seiner Priorität, sofort an den nächsten Thread ab (vgl. yield).
5 Programmiersprache C2 Ist die Pause noch nicht vorüber, dann gibt der aktuelle Thread die Programmausführung sofort an den nächsten Thread ab (vgl. yield). 5.9.6 Synchronisation In Computersystemen mit parallelen Prozessen kann es zu folgenden problematischen Situationen kommen: • Aliasing von Speicherzugriffen • Konkurrenz mehrerer Prozesse um eine Ressource Konkurrenz um eine Ressource entsteht beispielsweise, wenn zwei Threads gleichzeitig Daten über dieselbe serielle Schnittstelle senden wollen.
C-Control II Unit Wie in 5.9.3 bereits gezeigt, wird eine C2-Anweisung in mehreren Einzeloperationen der virtuellen Maschine ausgeführt. Die Anweisung check(a, b) führt etwa zu folgender Befehlskette: 1. a auf den Stack laden 2. b auf den Stack laden 3. Funktion check aufrufen Wie in 5.9.3 ebenfalls erläutert wurde, kann diese Befehlskette jederzeit von einem Threadwechsel unterbrochen werden, also auch zwischen dem 1. und 2. Befehl im obigen Beispiel.
5 Programmiersprache C2 besteht aus 4 virtuellen Maschinenoperationen. Angenommen ein Thread bekommt hier das Freizeichen, dann erfolgt ein Threadwechsel, bevor er free auf 0 setzen kann. Ein zweiter Thread, der ebenfalls auf dieses Freizeichen wartet, erhält nun Rechenzeit.
C-Control II Unit Das Setzen des “Freisignals” erfolgt durch das Schlüsselwort release. Da sich ein Thread merkt, welche byte-Variable er besetzt hat, steht die release-Anweisung ohne weitere Angaben. release; Ein Thread sollte release sofort aufrufen, wenn er den synchronisierten Bereich verläßt. Andere, vor capture wartende Threads werden sonst unnötig blockiert. ☞ Ein Thread darf niemals zwei capture-Anweisungen ohne zwischenzeitliches release ausführen. Der C2-Compiler kann das nicht nachprüfen.
5 Programmiersprache C2 float a, b; // Messwerte byte flag; // Synchronisationsvariable thread measure { capture flag; a = get_channel_a(); b = get_channel_b(); release; //... } thread watch { capture flag; check(a, b); release; // ... } 2.) Synchronisation von Ressourcenzugriffen durch implizites capture in einer Funktion function send ( byte buf[], int length ) { capture; wait ressource.ready(); ressource.
C-Control II Unit 5.10 Anweisungen zur Ablaufsteuerung Unentbehrlicher Teil einer strukturierten Programmiersprache sind Anweisungen zur Steuerung des Programmflusses. Erst dadurch können Algorithmen realisiert werden, die über die bloße rechnerische Verknüpfung von Werten hinausgehen. 5.10.1 if … else … - Bedingte Ausführung Mit der if-Anweisung wird die Abarbeitung von Programmabschnitten an eine Bedingung geknüpft.
5 Programmiersprache C2 fx1(); else fx2(); // fx2 wird aufgerufen 5.10.2 loop - Endlosschleife Programmschleifen ermöglichen das wiederholte Ausführen von Anweisungen. Die einfachste Form ist die bedingungslose Endlosschleife. Dafür kann in C2 das Schlüsselwort loop verwendet werden. Nach diesem steht eine einzelne Anweisung oder ein Anweisungsblock. loop Anweisung; loop { //.. } 5.10.
C-Control II Unit Nach dem Schlüsselwort do folgt die Anweisung bzw. der Anweisungsblock, danach das Schlüsselwort while und abschließend der numerische Bedingungsausdruck. do Anweisung while Ausdruck; do { //... } while Ausdruck; 5.10.5 for - Schleife Die for-Schleife führt eine Anweisung oder einen Anweisungsblock solange aus, bis eine Schleifenvariable eine Vergleichsbedigung nicht mehr erfüllt. for Variable=Wert ... Operator Endwert step Wert Anweisung; for Variable = Wert ...
5 Programmiersprache C2 } for i = 0 ... <10 // 10 Läufe { //... } for i = 9 ... >=0 step -1 // 10 Läufe rückwärts { //... } 5.10.6 Vorzeitiger Abbruch Wird eine loop-, while-, do- oder for-Schleife mit einem Anweisungsblock verwendet, kann es erwünscht sein, die Schleife unter bestimmten Sonderbedingungen vorzeitig abzubrechen - also ohne eventuelle weitere Anweisungen des Blocks auszuführen und ohne die Schleifenabbruchbedingung nochmals zu testen. Dafür kann die breakAnweisung benutzt werden.
C-Control II Unit z.B. for i = 0 ... 9999 { if not (i mod 13) continue; //... } Im obigen Beispiel führen alle i, die ohne Rest durch 13 teilbar sind, zu einer Auslassung der Anweisungen, die ab //… folgen würden. 5.10.8 Programmende Die gesamte Programmabarbeitung der virtuellen Maschine kann durch die quitAnweisung beendet werden. Dazu muß nach dem quit-Schlüsselwort ein numerischer Ausdruck stehen, dessen berechneter Wert ungleich 0 ist. Mit diesem Wert kehrt das System in den Hostmodus zurück (siehe 4.
6 Softwareentwicklung 6 Softwareentwicklung 6.1 Installation und Start der Integrierten Entwicklungsumgebung Mit der C-Control II Unit haben Sie eine Utility-CD erhalten. Auf dieser CD befindet sich u.a. die Integrierte Entwicklungsumgebung, die Sie zur Programmierung der Unit benötigen. Die Integrierte Entwicklungsumgebung läuft unter den 32Bit-Betriebssystemen Microsoft Windows95/98/NT/2000. Zur Installation legen Sie die CD in das CD-Laufwerk Ihres PC.
C-Control II Unit 6.3 Richtlinien zur Quelltextformatierung 6.3.1 Vorteile der einheitlichen Formatierung Für die syntaktische und funktionale Korrektheit eines Programms ist die Formatierung eines Quelltextes ohne Bedeutung. Im Interesse der Übersichtlichkeit und der Verständlichkeit sollten Quelltexte jedoch auch “optisch” korrekt sein.
6 Softwareentwicklung 6.3.3 Bezeichner 1. Bezeichner sollen selbstbeschreibend sein. Abkürzungen sind möglich, solange die Bedeutung im Kontext ohne zusätzliche Kommentare erkennbar bleibt. Zum Beispiel “getMaxTemp” statt “getMaximumTemperature” ist zulässig. Nur primitive Funktionen, temporäre Variablen zur Speicherung von Zwischenergebnissen, Indizes oder Schleifenvariablen, dürfen aus einzelnen Buchstaben oder kurzen Zeichenkombinationen bestehen. 2.
C-Control II Unit 5. Erstreckt sich eine Definition über mehrere Zeilen, so sind die zweite und weitere Zeilen linksbündig unter dem Typen des ersten Parameters fortzusetzen, z.B. //----------------------------------------------------function getMaxTemp ( int deviceID, int channel ) returns int //----------------------------------------------------6.3.6 Threads 1. Die Definitionszeilen sind wie bei Funktionen durch “//-----” -Kommentarzeilen gerahmt. 2. Threads stehen stets am Ende eines Modulquelltextes.
6 Softwareentwicklung } return result; } 6.3.8 Kombinationen mit Schlüsselworten zur Ablaufsteuerung 1. Einzelne Anweisungen in Kombinationen mit Schlüsselworten zur Ablaufsteuerung (if, else, loop, while, do, for) stehen in derselben Zeile wie das Schlüsselwort oder vorzugsweise um zwei Leerzeichen eingerückt in der nächsten Zeile. 2. Die geschweiften Klammern von Anweisungsblöcken nach Schlüsselworten zur Ablaufsteuerung stehen linksbündig unter dem Schlüsselwort. 3.
C-Control II Unit 6.4 Automatischer Compiler Bereits während der Eingabe des Quelltextes läuft im Hintergrund die Syntaxanalyse und Übersetzung durch den C2-Compiler. Im Ergebnis wird direkt im Editorfenster angezeigt, ob eine Programmzeile fehlerhaft ist (Kreuzsymbol) oder zu ausführbarem Code führt (Punktsymbol). Das entsprechende Symbol wird vor der Zeile angezeigt. Leere Zeilen oder solche, die nicht unmittelbar zu ausführbarem Code führen, haben kein Symbol.
6 Softwareentwicklung · “Füttern” Sie Ihre Funktionen zum Test mit allen möglichen Eingabedaten, nicht nur mit den für Ihre Anwendung “normalen” Werten. Früher oder später kommt es zu “unnormalen” Situationen, an die Sie im Moment vielleicht nicht denken. · Bauen Sie in Ihr Programm Statusausgaben auf das Mini-LCD ein, auch wenn Ihre Anwendung das LCD nicht benötigt, nutzen Sie freie Digitalports zur Ausgabe von Statussignalen. Beobachten Sie das Programmverhalten anhand der Statusausgaben und -signale.
C-Control II Unit 6.6 Programmübertragung in die Unit Schließen Sie die Control II Unit an einer seriellen Schnittstelle Ihres PCs an. Verwenden Sie dazu das der Unit beiliegende Nullmodem- und das SUB-D-Adapterkabel.
7 Standardmodule 7 Standardmodule Dieses Kapitel gibt einen Überblick über alle Bibliotheksmodule zum Zugriff auf die Systemressourcen der C-Control II Unit. Im einzelnen sind das die Module Datei Inhalt can.c2 CAN-Bus constant.c2 allgemeine Konstanten hwcom.c2 1. serielle Schnittstelle (Hardwareschnittstelle) i2c.c2 I2C-Bus lcd.c2 Mini-LCD der Unit lpt.c2 Druckerschnittstelle über digitale Ports der Unit math.c2 Fließkomma-Arithmetik mem.c2 Bytepufferoperationen plm.
C-Control II Unit speed Übertragungsgeschwindigkeit SPEED_50 (0) 50 kbit/s SPEED_62 (1) 62,5 kbit/s SPEED_125 (2) 125 kbit/s SPEED_250 (3) 250 kbit/s SPEED_500 (4) 500 kbit/s Wenn Sie einen ungültigen Wert für speed übergeben, wird die Übertragungsrate auf 125 kbit/s festgesetzt. Zur Akzeptanzfilterung eingehender CAN-Nachrichten müssen zwei Maskenwerte, globalMask und specialMask, spezifiziert werden. globalMask gilt für alle 15 Kanäle, für den 15.
7 Standardmodule 7.1.2 Statusabfrage für einen CAN-Kanal function ready ( int channel ) returns int Die Funktion ready prüft, ob ein Kanal bereit für eine neue CAN-Übertragung ist. channel 0 … 14 ( channel 14 kann nur empfangen und ist nie bereit) Rückgabe: -1 wenn bereit, sonst 0 7.1.3 Test auf Übertragungsfehler function error () returns int Die Funktion error befragt die integrierte CAN-Hardware des C164CI nach dem zuletzt aufgetretenen Fehler.
C-Control II Unit 7.1.5 Nachricht veröffentlichen function publish ( int channel, int id, byte buf[], int length ) Die Funktion publish übergibt Bytes aus einem Bytepuffer an einen CAN-Ausgabekanal und stellt die Daten für “Remote-Request”-Anforderungen anderer CAN-Busteilnehmer zur Verfügung. D.h. andere Busteilnehmer können unter Angabe der passenden Message-ID die Übertragung der Pufferdaten anfordern.
7 Standardmodule 7.1.8 Senden einer “Remote-Request”-Anforderung function request ( int channel ) So wie die C-Control II Unit Nachrichten veröffentlichen kann (siehe 7.1.5), kann sie auch selbst eine Nachricht anfordern, die ein anderer CAN-Busteilnehmer veröffentlicht hat. Es muß bekannt sein, unter welcher Message-ID diese Nachricht abrufbar ist. Diese ID muß zuvor per expect für den Kanal channel als Empfangs-ID eingestellt sein, sonst kann die Antwort des Busteilnehmers nicht empfangen werden. 7.1.
C-Control II Unit beschriebene Funktionen sind in den Modulen hwcom.c2 und swcom.c2 gleichartig definiert. 7.2.1 Initialisierung function init () Die Funktion init initialisiert eine serielle Schnittstelle und deaktiviert eventuell konkurrierende Portfunktionen. 7.2.2 Einstellen der Übertragungsgeschwindigkeit Für jede der beiden Schnittstellen kann die Übertragungsgeschwindigkeit eingestellt werden. Die hwcom-Schnittstelle kann dabei bis 115.200 Baud arbeiten, swcom nur bis 9.600 Baud.
7 Standardmodule function setbuf ( byte buf[], int length ) buf Referenz auf eine statische oder quasi-statische Bytepuffervariable length Länge des Puffers 7.2.4 Verwerfen von Daten Applikationen, die serielle Daten in Rahmenform empfangen, können unter bestimmten Bedingungen unvollständige Rahmen im Empfangspuffer enthalten. Dann ist es erforderlich, alle Bytes im Empfangspuffer zu verwerfen, um auf den Beginn des nächsten Rahmens zu synchronisieren.
C-Control II Unit den Empfang weiterer Bytes. Das Warten wird abgebrochen, wenn zwischen zwei Bytes eine längere Pause erkannt wird (timeout). Der Rückgabewert gibt die Anzahl der tatsächlich gelesenen Bytes zurück. buf Referenz auf eine Bytepuffervariable length Länge des Puffers timeout Timeout in Millisekunden 7.2.8 Test auf Sendebereitschaft function ready () returns int Die Funktion ready prüft, ob eine serielle Schnittstelle bereit für eine neue Übertragung ist.
7 Standardmodule 7.3 i2c.c2 Über die Funktionen des Moduls i2c.c2 kann ein Programm auf ICs zugreifen, die am I2CBus der C-Control II Unit angeschlossen sind. Eine typische Anwendung ist der Anschluß serieller EEPROMs zur Aufzeichnung von Daten. Der I2C-Bus der C-Control II Unit ist als Single-Master-Bus implementiert. D.h. die Taktsignale, die Start- und Stopbedingungen werden stets von der C-Control II Unit erzeugt. 7.3.1 Initialisierung function init () Die Funktion init initialisiert den I2C-Bus.
C-Control II Unit 7.3.4 Schreiben eines Bytes function write ( byte c ) returns int Die Funktion write sendet ein Byte auf dem I2C-Bus. Das Ergebnis der Funktion ist -1, wenn das angesprochene IC mit einem Acknowledge geantwortet hat, anderenfalls 0. 7.3.5 Lesen eines Bytes mit Acknowledge function read () returns byte Die Funktion read liest ein Byte über den I2C-Bus und antwortet mit einem AcknowledgeSignal. Eine typische Anwendung ist das sequentielle Lesen von Bytes aus einem seriellen EEPROM. 7.3.
7 Standardmodule 7.4.1 * (entfällt)* 7.4.2 * (entfällt)* 7.4.3 * (entfällt)* 7.4.
C-Control II Unit 7.4.5 * (entfällt)* 7.4.6 * (entfällt)* 7.4.7 * (entfällt)* 7.4.
7 Standardmodule 7.4.9 * (entfällt)* 7.4.10 * (entfällt)* 7.5 lpt.c2 Die Digitalports der C-Control II Unit können u.a. als parallele Druckerschnittstelle benutzt werden. 7.5.1 Initialisierung function init () Die Funktion init initialisiert die Druckerschnittstelle. Eventuell konkurrierende Portfunktionen werden deaktiviert.
C-Control II Unit 7.5.2 Ausgabepuffer leeren function flush () Die Funktion flush leer den Ausgabepuffer und beendet so einen im Hintergrund laufenden Druckvorgang. 7.5.3 Test auf Ausgabebereitschaft function ready () returns int Die Funktion ready prüft, ob die Druckerschnittstelle bereit für eine neue Ausgabe ist. Rückgabe: -1 wenn bereit, sonst 0 7.5.4 Ein Zeichen drucken function put ( byte c ) Die Funktion put gibt ein einzelnes Zeichen (ASCII-Code) auf dem Drucker aus. 7.5.
7 Standardmodule 7.6 math.c2 7.6.
C-Control II Unit function abs ( int value ) returns int function labs ( long value ) returns long function fabs ( float value ) returns float 7.6.
7 Standardmodule 7.7.2 Kopieren function copy ( byte dest[], int pos, byte src[], int length ) Die Funktion copy kopiert eine Anzahl (length) Zeichen aus einer Bytepuffervariable (src) an eine bestimmte Position (pos) einer anderen Bytepuffervariable (dest). Es ist darauf zu achten, daß der Zielpuffer genügend Platz für die kopierten Zeichen bietet. 7.7.
C-Control II Unit 7.7.4 Lesen von Zahlenwerten aus einem Bytepuffer Zu den Funktionen zum Schreiben von Zahlenwerten gibt es je eine entsprechende Funktion zum Lesen der Werte aus einem Bytepuffer. function getint ( byte src[], int pos ) returns int function getlong ( byte src[], int pos ) returns long function getfloat ( byte src[], int pos ) returns float Für alle drei Funktionen ist src Referenz auf eine Bytepuffervariable pos Leseposition im Puffer 7.8 plm.c2 7.8.
7 Standardmodule timebase Zeitbasis (Dauer eines Ticks) BASE_400 (0) 400 ns BASE_800 (1) 800 ns BASE_1600 (2) 1,6 µs BASE_3200 (3) 3,2 µs BASE_6400 (4) 6,4 µs BASE_12800 (5) 12,8 µs BASE_25600 (6) 25,6 µs BASE_51200 (7) 51,2 µs 7.8.2 Setzen des Portmodus Jeder der drei PLM-Ports kann in einem von zwei verschiedenen Hardwaremodi betrieben werden: entweder mit digitalem Ausgangspegel oder mit Transistor-Push-Pull-Ausgang. Das Einstellen des Modus erfolgt mit der Funktion setmode.
C-Control II Unit channel PLM-Kanal (0, 1, 2) length Periodenlänge, N Ticks Die Funktion out gibt einen Wert pulsweitenmoduliert an einem PLM-Port aus. Ist der Ausgabewert mindestens so groß wie die für diesen Kanal eingestellte Periodenlänge, so ist der Ausgangspegel des Ports permanent high. Ein Ausgabewert 0 führt zu permanentem Lowpegel. 7.8.5 Ausgabe von Tonfrequenzen An jedem der drei PLM-Ports kann über eine bestimmte Periodenlänge und einen Ausgabewert von z.
7 Standardmodule Zwischen den digitalen Prozessorports und den Portnummer-Parametern der Funktionen dieses Moduls besteht folgender Zusammenhang: Prozessor-Port Nummern der Einzelports P1L.0 0 P1L.1 1 P1L.2 2 P1L.3 3 P1L.4 4 P1L.5 5 P1L.6 6 P1L.7 7 P1H.0 8 P1H.1 9 P1H.2 10 P1H.3 11 P1H.4 12 P1H.5 13 P1H.6 14 P1H.7 15 Nummern der Nibbleports Nummern der Byteports 0 0 1 2 1 3 7.9.
C-Control II Unit Folgende Tabelle zeigt gültige Portnummern und den Wertebereich der Ergebnisse der einzelnen Abfragefunktionen. Funktion Anwendung Portnummern Ergebnis get Abfrage von Einzelports 0 … 15 0, -1 getn Abfrage von Nibbleports 0…3 0 … 15 getb Abfrage von Byteports 0…1 0 … 255 getw Abfrage von Wordports 0 0x0000 … 0xFFFF 7.9.2 Setzen von Digitalports Jeder der 16 Digitalports kann als Eingang oder als Ausgang benutzt werden.
7 Standardmodule Beide Funktionen beziehen sich jeweils auf einen einzelnen Digitalport, dessen Nummer als Parameter übergeben wird. 7.9.4 Deaktivieren von Ports Wird ein Digitalport nach Aufruf einer set…-Funktion als Ausgang betrieben, sind im Mikrocontroller spezielle Transistorstufen aktiviert, die am Port einen Strom treiben (Port high) oder gegen Masse ziehen können (Port low). In manchen Anwendungen sollen Digitalports als Ausgang und dann wieder als Eingang betrieben werden.
C-Control II Unit 7.9.7 Analog-Digital-Wandlung function adc ( int number ) returns int Die Funktion adc liefert den digitalisierten Meßwert von einem der 8 ADC-Ports der C-Control II Unit. Die Nummer des Ports (0 … 7) wird als Parameter übergeben. Das Ergebnis ist ein Integer im Bereich von 0 bis 1023 - entsprechend der 10bit-Auflösung des A/D-Wandlers des Mikrocontrollers; siehe dazu auch Kapitel 3.2.3. 7.10 str.
7 Standardmodule 7.10.4 Ausgabe in einen String Über die put…-Funktionen im Modul str.c2 können Inhalte an eine existierende Stringvariable angehängt werden: einzelne Zeichen, Teilstrings, Integer-, Long- oder Floatwerte: function putchar ( string s, int c ) function putstring ( string dest, string source ) function putint ( string s, int value ) function putlong ( string s, long value ) function putfloat ( string s, float value ) 7.10.
C-Control II Unit Die Funktion putlongf arbeitet identisch zu putintf, sie akzeptiert jedoch einen LongWert zur Ausgabe. · float-Ausgabe function putfloatf ( string s, float value, int format ) Bei der Funktion putfloatf legt der format-Parameter die Anzahl der Nachkommastellen fest. Gegebenenfalls wird eine Anzahl von Nullen hinter dem Dezimalpunkt ausgegeben. z.B. putfloatf(s, 1, 3); hängt “1.000” an s an. Insgesamt werden maximal 8 Ziffern (vor und nach dem Dezimalpunkt) ausgegeben. 7.10.
7 Standardmodule 7.11 system.c2 7.11.1 Systemtimer Das Betriebssystem verwaltet einen freilaufenden Timer. In jeder Millisekunde wird der Timer um 1 erhöht. Der Zählerstand wird vom System in einer internen long-Variable gespeichert. Der aktuelle Wert dieser Variablen kann durch die Funktion function timer () returns long abgefragt werden. Beachten Sie, daß der Zählerstand gemäß dem Wertebereich von long-Variablen nach 2147483647 in den negativen Wert -2147483648 überläuft. 7.11.
C-Control II Unit type TIME { int hour; int minute; int second; } 7.11.3 Status der DCF77-Synchronisation Das Betriebssystem versucht zu jeder vollen Minute, die interne Echtzeituhr auf den empfangenen DCF77-Datenrahmen zu synchronisieren. Unter schlechten Empfangsbedingungen kann eine Synchronisation über einen längeren Zeitraum ausfallen. Die interne Echtzeituhr läuft dann quarzgetaktet weiter.
7 Standardmodule dow liefert den Wochentag. Dabei steht 0 für Sonntag, 1 für Montag usw. bis 6 für Samstag. Stellen Sie in Ihrem Programm vor der Abfrage der einzelnen Datumswerte sicher, daß nicht zwischendurch ein Tageswechsel (Mitternacht) auftreten kann. (vgl. Quellcode der Funktion gettime). 7.11.
C-Control II Unit 7.11.7 Anwenderdefinierte Interruptroutinen ✰✰✰ Zur unverzögerten Reaktion auf die Ereignisse · 1ms-Timerzyklus des Systems, · High-Low-Flanken an den Digitalports P1H.0 … P1H.3, können Interruptroutinen in Assembler oder C geschrieben und im Segment 3 des FLASHEEPROMs gespeichert werden. Lesen Sie dazu das Kapitel “8 Systemprogrammierung”. Das Aktivieren der anwenderdefinierten Interruptroutinen erfolgt durch Aufruf der Funktion hook.
7 Standardmodule gewünschte Variante bestimmen Sie durch den Parameter mode: ☞ Das mode Ausführung der anwenderdefinierten Interruptroutine HOOK_REPLACE (0) an Stelle der normalen Interruptbehandlung des Systems HOOK_BEFORE (1) vor der normalen Interruptbehandlung des Systems HOOK_AFTER (2) nach der normalen Interruptbehandlung des Systems Aktivieren eigener Interruptroutinen stellt einen erheblichen Eingriff in das Gesamtsystem dar und hat entscheidenden Einfluß auf dessen Zeitverhalten! Interr
C-Control II Unit Datenrahmen übertragen. Die Bedeutung der einzelnen Bytes entnehmen Sie bitte den Anleitungen zu den 2W-Bus-Modulen und dem Modem. function io ( byte buf[] ) returns int Die Funktion io erwartet als Parameter eine Referenz auf ein 8 Byte langes Array. Ihr Programm muß die an den 2W-Bus zu sendenden Informationen dort eintragen, z.B. die Adresse des angesprochenen Moduls, das Kommando und eventuelle Datenbytes.
8 Systemprogrammierung 8 Systemprogrammierung ✰✰✰ 8.1.1 TASKING C/C++ Tools Das Betriebssystem der C-Control II Unit wurde mit der Vollversion der TASKING C/C++ Tools entwickelt. Eine Demoversion dieser Tools finden Sie auf der Utility CD zur C-Control II Unit. Diese Tools enthalten u.a. eine Entwicklungsumgebung mit Editor und Projektverwaltung, einen integrierten C/C++-Compiler, einen Assembler und Linker. Nähere Informationen entnehmen Sie bitte den Dateien und Installationshinweisen auf der CD. 8.1.
C-Control II Unit 8.1.3 Implementierung eines eigenen Betriebssystems Prinzipiell können Sie ein vollständig eigenes Betriebssystem entwerfen und in die CControl II Unit laden. Sie sollten dazu über umfangreiche Kenntnisse in der Anwendung und Programmierung des C164CI-Mikrocontrollers verfügen. Außerdem benötigen Sie eine geeignete Entwicklungsumgebung, z.B. die Vollversion der TASKING C/C++ Tools.
9 Anhang 9 Anhang 9.1 Technische Daten Hinweis: detailliertere Informationen finden Sie in den PDF-Dateien der IC-Hersteller auf der C-Control -Utility CD. Alle Spannungsangaben beziehen sich auf Gleichspannung (DC). 9.1.1 Mechanik äußere Abmessungen ohne Pins ca. 82mm x 60mm x 18 mm Masse ca. 90g Pinraster 2,54mm 9.1.2 Umgebungsbedingungen Bereich der zulässigen Umgebungstemperatur 0°C … 40°C Bereich der zulässigen relativen Umgebungsluftfeuchte 20% … 60% 9.1.
C-Control II Unit 9.2 Literaturverzeichnis SIEMENS (Infineon): “16Bit-Microcontrollers - C164CI User’s Manual” R. Schultes, I. Pohle: 80C166 Mikrocontroller, Franzis’ Verlag, 1994, ISBN 3-7723-5893-4 W. Lawrenz: “CAN Controller Area Network, Grundlagen und Praxis”, 2. Auflage, Hüthig Verlag, 1997, ISBN 3-7785-2575-1 K. Dembowski: “Computerschnittstellen und Bussysteme”, Hüthig Verlag, 1997, ISBN 37785-2526-3 P. Rechenberg, G. Pomberger (Hrsg.
U1 DIG_PWR CLOCK 1 C1 22pF 7 21 40 53 61 VDD1 VDD2 VDD3 VDD4 VDD5 55 XTAL1 Y1 CRYSTAL 4 54 XTAL2 C2 22pF DIG_GND 69 RSTIN DIG_PWR RSTOUT C3 10µ + 71 DIG_GND R1 10k DIG_GND NMI Bestückungsalternative Quarz U2 C1 70 VAREF 6 20 41 56 60 1 RSTOUT X DIG_GND RD X X WR Y1 X ALE 80 25 26 27 28 DIG_GND U2 4 VDD 1 E/D 2 GND CO66 DIG_GND OUT 3 CLOCK AD[0..16] P0L.0 P0L.1 P0L.2 P0L.3 P0L.4 P0L.5 P0L.6 P0L.7 29 30 31 32 33 34 35 36 AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 P0H.0 P0H.
PCA82C250 1 TxD 4 RxD CTx CRx R27 5 Vref 8 Rs CANL 6 CANH 7 U10 10 T2IN 11 T1IN 8 R2IN 13 R1IN RTSD TxDD CTS RxD CANL 1 C1+ 3 C14 C2+ 5 C2- CANH C4 100n 68k C6 100n C5 100n 2 V+ 6 V- DIG_PWR DIG_GND DIG_GND DIG_PWR C7 100n R2OUT 9 R1OUT 12 T2OUT 7 T1OUT 14 CTSD R28 DIG_PWR 10k RxDD RTS U11 1 PIN1 2 PIN2 3 PIN3 4 PIN4 CTS U9 TxD SP232 LT1181 MAX232 Rs - Slope 8 PIN8 7 PIN7 6 PIN6 5 PIN5 VAREF C12 SO8 ADR292GR, REF198GS DIG_PWR C8 C9 + C10 C11 C19 C20 C21 C22
X4 DIG_GND DIG_GND P8.2 P3.6 DIG_GND P5.0 P5.2 P5.4 P5.6 DIG_GND SCL CTx CANL TxDD CTSD RTSD A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 A15 A16 A17 A18 A19 A20 B1 B2 B3 B4 B5 B6 B7 B8 B9 B10 B11 B12 B13 B14 B15 B16 B17 B18 B19 B20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 P1H.1 P1H.3 P1H.5 P1H.7 DIG_PWR ADJ P1L.7 P1L.5 P1L.3 P1L.1 DIG_GND P8.0 P8.1 P8.3 DIG_GND P5.1 P5.3 P5.5 P5.7 DIG_GND RSTOUT RSTIN BSL P3.4 DIG_GND SDA CRx CANH RxDD P3.13 P3.
Detaillierte Definitionen und Anwendungsbeispiele finden Sie im Verlauf dieser Anleitung.
Detailierte Informationen zur Anschlußbelegung finden Sie in Kapitel 3.3 ab Seite 22 P1H.0 P1H.1 P1H.2 P1H.3 P1H.4 P1H.5 P1H.6 P1H.7 GND GND GND PLM 0 BEEP PLM 1 FRQ 1 DCF/FRQ 0 GND GND ADC 0 ADC 1 ADC 2 ADC 3 ADC 4 ADC 5 ADC 6 ADC 7 GND GND 2 2 I C SDA I C SCL CAN TxD CAN RxD CANL CANH digital TxD digital RxD digital CTS µC CTS digital RTS µC RTS X4 X3 POWER GND X2 5 Volt 5 Volt LCD ADJ P1L.7 P1L.5 P1L.3 P1L.1 GND RSTOUT RSTIN BOOT HOST GND GND GND P1L.6 P1L.4 P1L.2 P1L.
LCD Zeichensatz upper 4 bits 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 lower 4 bits xxxx 0000 1 xxxx 0001 2 xxxx 0010 3 xxxx 0011 4 xxxx 0100 5 xxxx 0101 6 xxxx 0110 7 xxxx 0111 8 xxxx 1000 9 xxxx 1001 10 xxxx 1010 11 xxxx 1011 12 xxxx 1100 13 xxxx 1101 14 xxxx 1110 15 xxxx 1111 16