Bestnr. 19 11 11 Handboek C-Control II Unit Alle rechten, ook vertalingen, voorbehouden. Niets uit deze uitgave mag worden verveelvoudigd, opgeslagen in een automatische gegevensbestand, of openbaar gemaakt, in enige vorm of op enige wijze, hetzij elektronisch, mechanisch, door fotokopieën, of op enige andere manier, zonder voorafgaande schriftelijke toestemming van CONRAD ELECTRONIC BENELUX B.V. Nadruk, ook als uittreksel is niet toegestaan. Druk- en vertaalfouten voorbehouden.
Geachte klant, Hartelijk dank voor uw interesse en uw vertrouwen in onze C-Control II Unit. Voor talloze gebruikers is C-Control al jaren een begrip voor compacte, betrouwbare en niet dure besturingsoplossingen. Naast klassieke toepassingen, zoals verwarmingsbesturingen en dataregistratie – systemen, zijn ons ook succesvolle toepassingen in de industriële automatisering, laboratoriumonderzoek of de midi-techniek in geluidsstudio’s bekend.
4.4.1 4.4.2 4.4.3 4.4.4 4.4.5 4.4.6 4.4.7 Basisprincipes Binaire code - vertaler Multithreading Geheugen voor programma’s en constanten Datageheugen Stapelprocessor Systeeminterface 5. De programmeertaal C2 5.1 5.2 5.3 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.4 5.4.1 5.4.2 5.4.3 5.5 5.5.1 5.5.2 5.5.3 5.5.4 5.5.5 5.6 5.6.1 5.6.2 5.6.3 5.6.4 5.6.5 5.6.6 5.7 5.7.1 5.7.2 5.7.3 5.7.4 5.7.5 5.7.6 5.8 5.8.1 5.8.2 5.8.3 5.8.4 5.8.5 5.8.6 5.8.7 5.9 5.9.1 5.9.2 5.9.3 5.9.4 5.9.
5.9.6 5.10 5.10.1 5.10.2 5.10.3 5.10.4 5.10.5 5.10.6 5.10.7 5.10.8 Synchronisatie Opdrachten voor besturingsverloop If …els e … Beperkte uitvoering Loop – Eindeloze lus While – lus Do – lus For – lus Voortijdig afbreken Voortijdige voortzetting Einde programma 42 45 45 45 45 46 46 46 47 47 6. Software ontwikkeling 47 7. Standaardmodule 6.1 6.2 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.3.8 6.4 6.5 6.5.1 6.5.2 6.5.3 6.6 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.1.6 7.1.7 7.1.8 7.1.9 7.1.10 7.2 7.2.
7.3.3 7.3.4 7.3.5 7.3.6 7.3.7 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.4.6 7.4.7 7.4.8 7.4.9 7.4.10 7.5 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.8.5 7.9 7.9.1 7.9.2 7.9.3 7.9.4 7.9.5 7.9.6 7.9.7 7.10 7.10.1 7.10.2 7.10.3 7.10.4 7.10.5 7.10.6 7.11 7.11.1 7.11.
7.11.3 7.11.4 7.11.5 7.11.6 7.11.7 7.12 7.12.1 7.12.2 7.12.3 7.13 Status van de DCF77 – synchronisatie Datum Zomertijdflag Oproepen van systeemfuncties Gebruiker – gedefinieerde interrupt- routines twb.c2 Initialisering Opvragen bij ontvangst van het antwoordframe Data – overdracht constant.c2 en vmcodes.c2 8. Systeemprogrammering 8.1.1 TASKING C/C++ tools 8.1.2 Uitbreidingen van de virtuele machine en veranderingen aan het besturingssysteem 8.1.
het gebruik van vaktermen en anglicismen. Sla er indien nodig de desbetreffende vakboeken op na. Delen van deze gebruiksaanwijzing kunnen zonder aankondiging vooraf ongeldig worden. Dat wordt bepaald door eventueel noodzakelijke technische veranderingen ter verbetering van het product of voor de aanpassing aan de actuele beschikbaarheid van componenten. Wij zullen de dan noodzakelijke informatie ter beschikking stellen via Internet onder www.c-control.de.
De C-Control II unit mag niet in galvanische verbinding staan met spanningen groter dan geaarde lage spanning. De aansluiting op systemen met hogere spanning mag uitsluitend gebeuren via componenten met VDE – toelating. Daarbij moeten de voorgeschreven lucht- en kruipwegen aangehouden worden, en moeten er tevens voldoende maatregelen ter bescherming tegen het aanraken van gevaarlijke spanningen genomen worden.
Adres: E-mail: Conrad Electronic GmbH TKB Computer - und Messtechnik Klaus-Conrad-Strasse 1 92240 Hirschau Bundesrepublik Deutschland webmaster@c-control.de Onze voorkeur gaar uit naar communicatie per e-mail. Als u een probleem heeft, geef ons dan indien mogelijk een schets van uw aansluitschakeling als beeldbestand -bijlage (in JPG-format) alsmede het tot het probleem gereduceerde gedeelte van de programma –brontekst (max. ca. 20 regels).
Het totale geheugen is door het systeem als volgt opgedeeld: Segment Adressen Fysieke geheugentype 0 0x00000…0x0FFFF Ext. FLASH-EEEEPROM Interne RAM, register 1 0x10000…0x1FFFF Ext. FLASH- EEPROM 2 0x20000…0x2FFFF Ext. FLASH- EEPROM 3 0x30000…0x3FFFF Ext. FLASH- EEPROM 4 0x40000…0x4FFFF Ext. FLASH- EEPROM 5 0x50000…0x5FFFF Ext. FLASH- EEPROM 6 0x60000…0x6FFFF Ext. FLASH- EEPROM 7 0x70000…0x7FFFF Ext. FLASH- EEPROM 8 0x80000…0x8FFFF Ext.
3.3 Schakelingtechniek – extern 3.3.1 Aansluitbelegging – overzicht Onderkant Algemeen: X1: X2: GND … ground (massa, referentiepotentiaal) n.c. … not connected (niet bezet, vrij) TxD RxD RTS CTS 5 Volt LCD ADJ P1L.
X3: X4: POWER … Ingang voedingsspanning 8…24V P1L.
3.3.4 Reset (RSTIN, RSTOUT) Een reset heeft als effect dat het microcontroller – systeem terugkeert naar een gedefinieerde begintoestand. De C-Control II unit kent in principe 3 reset – bronnen: • • • Power-On-Reset: wordt uitgevoerd na het inschakelen van de werkspanning. Hardware – Reset: wordt uitgevoerd als de RSTIN-pin van de unit op “low” getrokken en weer losgelaten wordt, b.v. door kort op een aangesloten reset – toets te drukken.
elke omvormrichting. De niveau -omvormer IC beschikt over een verhoogde bescherming tegen spanningspieken. Spanningspieken kunnen in een elektromagnetisch belaste omgeving, b.v. in industriële toepassingen, in de interfacekabels geïnduceerd worden en aangesloten schakelcircuits vernielen. Eén kanaal is vast met de digitale seriële in -/uitgang van de microcontroller verbonden. Deze digitale signalen kunnen op de pins “digital TxD” en “digital RxD” van de unit bekeken worden.
3.2.8 Digital ports (P1L.0 … P1L.7, P1H.0 … P1H.7) De C-Control II unit leidt 16 digitale ports van de microcontroller naar buiten: P1L.0 … P1L.7 en ook P1H.0 …P1H.7. Op de digitale ports kunnen b.v. toetsen met pull-up weerstanden, digitale ICs, optische koppelingen of driverschakelingen voor relais aangesloten worden. De ports kunnen apart, in groepjes van vier (“Nibble”) byte –gewijs of in zijn geheel als 16-bit Word aangesproken worden (zie hfst. 7.9). Een port is of ingang of uitgang.
3.3.8.3 Tweedraads bus Conrad heeft een familie van sensor- en actuatormodules ontwikkeld, waarmee een besturingscomputer, zoals de C-Control II unit, met extra in- en uitvoerfuncties uitgebreid kan worden. Het bijzondere van deze modules is de eenvoudige koppeling via een tweedraads bussysteem (Engels: “two wire bus”, afgekort ook “2W-Bus”, “2WB” of TWB”). Bij dit bussysteem worden digitale data via een 12Vgelijkspanningsleiding overgebracht.
elk specifiek geval een uitspraak te doen welke printer er via de C-Control II unit kan worden gebruikt en welke niet. Voor het aansluiten van een printer op de C-Control II unit verbindt u de volgens pins met die van een 25polige SUB-D-bus: Signaal C-Control II pin SUB-D 25 pin Databit 0 P1L.0 2 Databit 1 P1L.1 3 Databit 2 P1L.2 4 Databit 3 P1L.3 5 Databit 4 P1L.4 6 Databit 5 P1L.5 7 Databit 6 P1L.6 8 Databit 7 P1L.7 9 BUSY (Handshake) P1H.5 11 ACKNOWLEDGE (Handshake) P1H.6 10 STROBE (Handshake) P1H.
Als tijdbasis kunnen 8 verschillende tijden van 400ns tot 51.2µs ingesteld worden. De periodelengte kan gevarieerd worden van 0 tot 65535. De PLM – kanalen 1 en 2 hebben een gemeenschappelijke tijdbasis en periodelengte. Voor kanaal 2 kan een van de kanalen 0 en 1 onafhankelijke tijdbasis en periodelengte ingesteld worden. Lees daartoe ook hoofdstuk 7.8.
De CAN- overdrachtsnelheid van 1 Mbit/ s wordt door C-Control II niet direct ondersteund. Deze bitsnelheid vraagt om bijzondere maatregelen voor de overdracht –zekerheid en vooral tegen de storingsuitstraling. Conrad Electronic gaat er niet van uit dat de C-Control II unit toegepast wordt in applicaties die dergelijke hoge overdrachtsnelheden nodig maken.
Start nu de data – overdracht van het systeem met behulp van de boot – tool. Dit PC – programma neemt de gehele besturing van de boot – procedure over: de overdracht begint met een nulbyte (1 startbit, 8 databits = 0, 1 stopbit). De microcontroller van de C-Control II unit ontvangt de nulbyte en gebruikt deze voor het meten van de overdrachtssnelheid (b.v. 9600 Baud). Dan initialiseert hij zijn eigen interface dienovereenkomstig. Als antwoord zendt de controller een identificeringsbyte naar de PC.
besturingsmachines en de interface naar het programma- en datageheugen gekarakteriseerd. Deze opbouw wordt aangeduid als de processor – architectuur. Een virtuele machine is een nagebootste microprocessorkern. De gewenste architectuur wordt per software op een bestaand computersysteem geconstrueerd.
doorschakeling voortijdig plaats. De prioriteit van elke thread kan tijdens de uitvoering van het programma aangepast worden aan de actuele prestatie – eisen. De moeilijkheid bij het maken van een programma met multithreading zit hem in de uitgebalanceerde uitgifte van de prioriteitswaarden. Bij 255 threads en 256 prioriteitsstappen zijn er praktisch ontelbare mogelijkheden om rekentijd te verdelen.
64kB. Er is echter een limiet, omdat de stapel het 64kB grote SRAM -segment moet delen met een aantal data van het besturingssysteem, de globale variabelen van het gebruikersprogramma en andere stapels van andere threads. De adressering van data op de stapel vindt relatief plaats naar een 16bit-Basepointer (BP). Een 16bitStackpointer (SP) toont het bovenste einde van de stapel. Elke thread heeft zijn eigen paar base- en stackpointers. 4.4.
Een project beschrijft een lijst van modules. De volgorde van de modules in de lijst bepaalt de volgorde bij de vertaling door de C2 – compiler. De eerste module in de lijst wordt als eerste vertaald, dan de tweede enz. tot aan de laatste module. Samen met de geïntegreerde ontwikkelingsomgeving worden talrijke bibliotheek – modules geleverd, die b.v. functies voor de toegang tot systeem – resources van de C-Control II unit bevatten.
Oproep van de functie verderop in a.c2: fx ( ); Oproepen van de functie in een andere module (in de modulelijst van het project na a.c2) a.fx ( ); Er kan op de hierboven beschreven manier toegang verkregen worden tot alle kenmerken van globale variabelen, benoemde constanten, samengestelde datatypes, functies en threads van een module in volgende modules. 5.3.4 Opdrachten en opdrachtblokken Opdrachten zijn de basisbouwstenen van een computerprogramma.
Functies (zie 5.8) worden echter steeds opgeroepen en uitgevoerd, ook als de parameters en de uitkomst daarvan constant zijn. In constante termen kunnen ook vooraf gedefinieerde benoemde constanten (zie 5.6) toegepast worden. 5.3.6 Codewoorden Hieronder vindt u een alfabetische lijst van alle C2 – codewoorden. Gedetailleerde definities en toepassingsvoorbeelden vindt u in het verdere verloop van deze gebruiksaanwijzing.
Voorbeelden: type Position { int x; int y; } type MyType { } Position pos; float value; string text; Voordelen van eigen types zijn b.v. de betere leesbaarheid van een programma en de eenvoudigere overdracht van bij elkaar horende data aan functies, dus b.v. function fx ( MyType t ) … in plaats van function fx ( int xpos, int ypos, float value, string text ) … 5.5 Variabelen 5.5.1 Definitie van variabelen Variabelen dienen om data tussendoor op te slaan tijdens de afloop van het programma.
t.value = 82.5; Zo kunnen ook de velden van gekoppelde datatypes bereikt worden, b.v.: t.pos.x = 31; 5.5.3 Definitie en indicering van variabele arrays C2 ondersteunt de definitie van variabele ééndimensionale arrays. Bij de definitie volgt dan na het variabelenkenmerk in rechte haakjes [ ] een constante term. Het resultaat van de term legt het aantal array – elementen vast. b.v.
het resultaat van de term onbepaald (afgezien van triviale termen, zoals 0*x). De initialisering vindt plaats via de toewijzing van een waarde. B.v. int i; i = 0; Bij array – variabelen moet elk element apart geïnitialiseerd worden, b.v. in een lus, die de index van 0 tot het aantal elementen – 1 laat lopen.
locale variabelen van een thread quasi – statisch. Een byte – array zou daardoor ook als buffergeheugen voor data – overdracht gebruikt kunnen worden (zie bibliotheekmodule hwcom.2). Voorbeeld: Thread tx { byte buf [48] ; //... } Bij het uitgeven van namen voor locale variabelen dient u er op te letten, dat deze eventueel globale kenmerken van dezelfde module verbergen.
Binaire getallen zijn gevolgen van de binaire cijfers 0 en 1 met het voorvoegsel “0b” of “0B”. Achttallige getallen worden niet ondersteund. Voorbeelden: Decimale getallen Getallen met zwevende komma Hexadecimale getallen Binaire getallen 0 0.0 0x0 0b0 17 1.5 0xFF 0b01 -12345 -123.456 0XABCD 0B11101 5.6.3 Onbekende tekenconstanten Tekenconstanten staan voor de ASCII – codes ervan (waardenbereik 0 … 255) en kunnen als gehele getallen in numerieke termen gebruikt worden.
“abc” “xyz” wordt door de C2- compiler gekoppeld tot “abcxyz” 5.6.5 Definitie van benoemde constanten Benoemde constanten worden steeds globaal op moduleniveau gedefinieerd. Ze staan na de definitie via de aanduiding van het modulekenmerk in het hele programma ter beschikking (vergelijk globale variabelen). Locale constanten van threads en functies zijn er niet. De definitie van een benoemde constante begint met het codewoord const.
Net als arrays van numerieke constanten kunnen arrays van stringconstanten gedefinieerd worden: Voorbeeld: const 5.7 menu [ ] = “rice” , “couscous”, “potatoes” ; Operators 5.7.1 Volgorde Operators delen numerieke termen op in deeltermen.
5.7.2 Rekenkundige operators Operator + * / Betekenis Optellen Aftrekken Vermenigvuldigen Delen % Modulodeling (deelrest) mod - Negatief voorteken Voorbeeldterm 1+1 2-1 2*3 6 / 3 18 / 4 18.0 / 4 18 mod 4 18 % 4 1.8 % 0.4 - (1+1) Resultaat 2 1 6 2 4 4,5 2 2 0,2 -2 5.7.3 Bitschuif -operators Operator << shl Betekenis Naar links schuiven >> Logisch naar rechts schuiven shr Voorbeeldterm 1 << 1 3 shl 2 1 >> 1 5 shr 2 -1 shr 1 (long) -1 shr 1 Resultaat 2 12 0 1 32767 2147483647 5.7.
!& nand | or en met aansluitende bit invertering Of !| nor of met aansluitende bit invertering ^ xor exclusief - of 14 & 3 (1<2) & (2<3) (1<2) & (3<2) 1 !& 1 1 nand 0 14 !& 3 (1<2) !& (2<3) (1<2) !& (3<2) 1 | 1 1 or 0 0 or 0 14 or 1 (1<2) | (2<3) (1<2) | (3<2) (2<1) | (3<2) 1 !| 1 1 nor 0 0 nor 0 14 nor 1 (1<2) !| (2<3) (1<2) !| (3<2) (2<1) !| (3<2) 1 ^ 1 1 xor 0 0 xor 0 14 ^ 3 (1<2) ^ (2<3) (1<2) | (3<2) (2<1) | (3<2) 2 -1 0 -2 -1 -3 0 -1 1 1 0 15 -1 -1 0 -2 -2 -1 -16 0 0 -1 0 1 0 3 0 -1 -1 L
const S = “AAA” const SA [ ] = “XXXX”, “YYYY”, “ZZZZ”; string s1; string sa [3]; string s; s1 = “bbb” sa[0] = “uuu” sa[1] = “vvv” sa[2] = “www” / / Stringtoewijzing met koppeling: s = s1 + sa[2] + s + SA[0] + “ccc” + (‘A’ + 3); Na deze opdracht bevat s de tekst “bbbwwwAAAXXXXcccD”. 5.8 Functies De virtuele machine van de C-Control II unit ondersteunt de programmering met subfuncties. Blokken van opdrachten, die in het programma meerdere keren gebruikt worden, kunnen in functies samengevat worden.
Voorbeelden: * Functie met een integer - parameter en een integer - resultaat: function fx ( int x ) returns int * Functie met een string -parameter function fx ( string s ) * Functie met een long – array en een integere parameter function fx ( long a[ ], int i ) * Functie met een gebruiker – gedefinieerde MyType – parameter function fx ( Mytype t ) 5.8.2 Parameters en locale variabelen In het opdrachtblok van een functie kunnen locale variabelen gedefinieerd worden (zie 5.5.5).
Voorbeeld: functie fx ( ) returns int { } thread main { int i; i = 1; i = fx ( ); / / 1 wordt 0. } Met de return – opdracht kan een opdracht voortijdig beëindigd worden en de waarde van een numerieke term kan als resultaat teruggegeven worden. return; return numerieke term; De eerste vorm mag alleen voor functies zonder gedefinieerd antwoord – type gebruikt worden. De tweede vorm met numerieke term is gereserveerd voor functies met gedefinieerd Antwoord- type.
5.8.5 Typetest De C2 – compiler voert bij elke oproep van een functie een test uit, of naast het aantal parameters ook het desbetreffende type overeenkomt met de functiedefinitie. Een kenmerk van een string – variabele kan bijvoorbeeld niet doorgegeven worden, als er volgens de definitie op deze plaats een numerieke term verwacht wordt.
Binnen het opdrachtblok kunnen locale variabelen gedefinieerd worden, die quasi – statisch zijn (zie 5.5.5). De totale code van het opdrachtblok wordt automatisch in een eindeloze lus uitgevoerd. Voorbeeld: Thread blink2 { ports.set (2, -1); sleep 200; ports.set (2,0); sleep 800; } 5.9.2 Main threads Een thread, waarvan het kenmerk niet “main” is, heeft bij de start van het programma de prioriteit 0, d.w.z. hij bevindt zich in stilstand, zijn opdrachten worden niet uitgevoerd.
• halt De halt – opdracht zet de prioriteit van een thread op 0. Er zijn twee vormen. Met vorm 1 kan een willekeurige thread een andere thread of ook zichzelf laten stoppen. Vorm 2 heeft altijd betrekking op de op dat moment uitgevoerde thread. Vorm 1: halt ThreadName; Voorbeeld: halt blink2; Vorm 2: halt; Stopgezette threads kunnen alleen door andere threads weer gestart worden.
5.9.5 Pauzes Bij vele toepassingen is het nodig dat een thread zijn uitvoering gedurende een bepaalde tijd onderbreekt en daarna automatisch doorloopt. Daartoe vindt u in C2 de sleep – opdracht. Na het codewoord sleep volgt een numerieke term. sleep numerieke term; Voorbeeld: sleep 1000; De berekende waarde van de numerieke term bepaalt de rustpauze van de actuele thread in milliseconden. De waarde van de term blijft beperkt tot het int – bereik. Eventueel voert de virtuele machine een conversie uit.
voorbeeld. Dan kan de measure – thread al nieuwe waarden geregistreerd hebben, voor de watch – thread weer aan de beurt komt. De watch – thread gaat door met zijn uitvoering met het laden van a en b en het oproepen van check. Aan de functie check wordt nu dus een a uit een oude en b uit de nieuwe meetcyclus doorgegeven.
Een thread mag nooit twee capture – opdrachten uitvoeren zonder tussentijdse release. De C2 – compiler kan dat niet controleren. Bij veronachtzaming leidt dat tot blokkades in het programma. Voorbeeld: byte flag1; byte flag2; thread tx { e capture flag1; / / blokkade in de 2 doorloop capture flag2; / / flag1 wordt “vergeten” //... release; } / / alleen flag2 wordt vrijgegeven De thread tx in het bovenstaande voorbeeld loopt net als elke thread automatisch in een eindeloze lus.
5.10 Opdrachten voor de sturing van het verloop Een onontbeerlijk deel van een gestructureerde programmeertaal zijn opdrachten voor de sturing van de programmastroom. Pas daardoor kunnen er algoritmes gerealiseerd worden, die boven de simpele rekenkundige koppeling van waarden uitstijgen. 5.10.1 if … else … - bepaalde uitvoering Met de if – opdracht wordt de afwerking van programmahoofdstukken gekoppeld aan een voorwaarde.
while term opdracht; while term { //... } 5.10.4 Do – lus De do – lus herhaalt een opdracht of een opdrachtblok, zolang de berekende waarde van een numerieke voorwaarde – term niet gelijk is aan 0. Het controleren van de voorwaarde vindt na elke doorloop van de lus plaats. De opdracht van de lus wordt dus minimaal één keer uitgevoerd. Na het codewoord do volgt de opdracht resp. het opdrachtblok, daarna het codewoord while en afsluitend de numerieke voorwaarde – term. do opdracht while term; do { //...
break; Voorbeeld: for i = 0 . . . 9999 { if bad ( ) break; //... } 5.10.7 Voortijdige voortzetting Als een loop-, while-, do- of for – lus met een opdrachtblok gebruikt wordt, kan het gewenst zijn de lus onder bepaalde speciale voorwaarden voortijdig met de volgende doorloop voort te zetten, zonder eventuele verdere opdrachten van het blok uit te voeren. continue; Voorbeeld: for i = 0 . . . 9999 { if not (i mod 13) continue; } //...
Na de succesvolle installatie van de geïntegreerde ontwikkelingsomgeving kunt u deze starten vanuit uw Windows – startmenu. Het gebruikersoppervlak van de geïntegreerde ontwikkelingsomgeving komt overeen met de actuele standaards en kan intuïtief bediend worden. U kunt details vinden in de Online – Help, die u door op de [F1]- toets kunt oproepen. 6.2 Brontekst bewerken In de editor van de geïntegreerde ontwikkelingsomgeving voert u de brontekst van de aparte module in.
7. Kenmerken worden in één enkele taal geschreven, b.v. geheel in het Engels of geheel in het Nederlands. Kenmerken dienen in dezelfde taal geformuleerd te worden als de commentaren. 6.3.4 Termen Complexe numerieke termen dienen door het plaatsen van haakjes en spaties zo vorm gegeven te worden, dat deeltermen optisch herkenbaar zijn. 6.3.5 Functie – definities 1. De definitieregels worden door “/ / ----“ – commentaarregels in een frame geplaatst (zie standaardmodule – bronteksten).
do fx() while not ready; do fx() while not ready; if x < LIMIT make_it(); else leave_it_alone(); while is_good() { for x = 0 … 9 { do_this(); do_that(); } } 6.4 Automatische compiler Al tijdens de invoer van de brontekst loopt op de achtergrond de syntax –analyse en vertaling door de C2 – compiler. In het resultaat wordt direct in het editor –venster getoond of een programmaregel een fout vertoont (kruissymbool) of tot een uitvoerbare code leidt (puntsymbool).
6.5.2 Simulatie – omvang De kern van de simulatie is dezelfde virtuele machine, die ook in het besturingssysteem van de C-Control II unit werkt. De uitvoering van alle geheugen -, besturings – en rekenoperaties is absoluut identiek. Daardoor kan de logische en algoritmische correctheid van een programma getest en gegarandeerd worden. Wat de simulator niet of niet volledig nabootst, zijn extern aangesloten systemen, zoals b.v. ICs op de 2 I C-bus of sensormodules.
7 Standaardmodule Dit programma geeft een overzicht van alle bibliotheekmodules voor de toegang tot de systeemresources van de C-Control II unit. Gespecificeerd zijn dat de modules: Bestand can.c2 constant.c2 hwcom.c2 i2c.c2 lcd.c2 lpt.c2 math.c2 mem.c2 plm.c2 ports.c2 str.c2 swcom.c2 system.c2 twb.c2 vmcodes.c2 7.1 can.c2 7.1.
specialMask op 0x0000. Dan is elk kanaal 0 … 13 alleen belast met de ontvangst van precies één bericht, en kanaal 14 is een universele ontvanger. Voor verdere details betreffende de ontvangst van berichten zie ook vanaf 7.1.7. 7.1.2 Status opvragen voor een CAN - kanaal function ready ( int channel ) returns int De functie ready controleert, of een kanaal klaar is voor een nieuwe CAN – overdracht. channel 0 … 14 (channel 14 kan alleen ontvangen en is nooit klaar). Antwoord: -1 indien klaar, anders 0 7.1.
channel id buf length 0 … 13 (chann el 14 kan alleen ontvangen!) message – ID van het bericht referentie aan bytebuffer – variabele bufferlengte, max. 8 7.1.6 Tellen van de “remote – request” – aanvragen function rtrcount ( int channel ) returns byte De functie rtrcount levert na publicatie van een bericht een getalswaarde, hoe vaak dit bericht door andere busdeelnemers opgevraagd is. De teller is echter gelimiteerd op het waardebereik van een byte.
7.2 hwcom.c2 en swcom.c2 De C-Control II unit beschikt over twee asynchrone seriële interfaces. Eén ervan is als hardware (hwcom) al in de microcontroller geïmplementeerd. De tweede interface (swcom) kan door het besturingssysteem softwarematig via twee interrupt – sensibele ports gekopieerd worden. De toegang tot beide interfaces in C2 is identiek. De hierna beschreven functies zijn in de modules hwcom.c2 en swcom.c2 op dezelfde manier gedefinieerd. 7.2.
7.2.5 Test op ontvangst function rxd ( ) returns int De functie rxd test, of één of meerdere nieuwe bytes in de ontvangstbuffer van een seriële interface beschikbaar is/zijn. Als dat zo is, dan wordt de waarde –1 teruggegeven, anders 0. 7.2.6 Lezen van een ontvangen byte function get ( ) returns byte De functie get leest en verwijdert een enkele byte uit de ontvangstbuffer. 7.2.
7.3.1 Initialisering function init () 2 De functie init initialiseert de I C-bus. Omdat ook het LCD van de C-Control II unit op deze bus is aangesloten, wordt de initialisering reeds automatisch bij de reset van het systeem uitgevoerd en hoeft in de regel niet in het gebruikersprogramma uitgevoerd te worden. 7.3.
7.4.4 *(vervalt)* 7.4.5 *(vervalt)* 7.4.6 *(vervalt)* 7.4.7 *(vervalt)* 7.4.8 *(vervalt)* 7.4.9 *(vervalt)* 7.4.10 *(vervalt)* 7.5 Ipt.c2 De digitale ports van de C-Control II unit kunnen onder andere gebruikt worden als parallelle printer – interface. 7.5.1 Initialisering function init () De functie init initialiseert de printer – interface. Eventueel concurrerende portfuncties worden gedeactiveerd. 7.5.
7.6 math.c2 7.6.
7.7.1 Vullen met een waarde function fill ( byte buf[ ], int length, byte c ) De functie fill vult een aangegeven bytebuffer – variabele met een aantal gelijke tekens, b.v. spaties. buf length c referentie aan een bytebuffer – variabele vullengte teken (ASCII – code) 7.7.
7.8 plm.c2 7.8.1 Instellen van de tijdbasis Er kunnen acht verschillende tijdbasiswaarden ingesteld worden. Het instellen gebeurt met de functie settimebase. function settimebase ( int channel, int timebase ) channelPLM – kanaal (0, 1, 2) timebase tijdbasis De overgedragen numerieke waarden leveren de volgende tijdbases op: (Let er op, dat channel 0 en channel 1 een gemeenschappelijke tijdbasis hebben.
– modulatie voor een kanaal resulteert uit 1 / (tijdbasis * periodelengte), als de PLM – uitvoerwaarde kleiner is dan de periodelengte en groter dan 0. Om de uitvoer van audio -frequenties te vergemakkelijken is er de functie beep. Deze heeft steeds betrekking op het derde PLM – kanaal (channel 2). Alle berekeningen en instellingen van periodelengtes onder inachtneming van de actuele tijdbasis worden door deze functie overgenomen.
De volgende tabel toont geldige portnummers en het waardebereik van de resultaten van de aparte opvraagfuncties. Functie get getn getb getw Toepassing Opvragen van aparte ports Opvragen van Nibble - ports Opvragen van byte – ports Opvragen van Word - ports Portnummers 0 … 15 0 … 3 0 … 1 0 Resultaat 0, -1 0 …15 0 …255 0x0000 … 0xFFFF 7.9.2 Instellen van digitale ports Elk van de 16 digitale ports kan gebruikt worden als ingang of als uitgang.
portnummer 0 … 3. Bij elke keer dat de stand wordt opgevraagd, wordt deze stand op 0 teruggezet. Het optellen over een langere periode moet in het hoofdprogramma gebeuren. 7.9.6 Frequentiemeting function getfreq ( int number ) returns long De pins DCF/FRQ 0 en FRQ 1 van de C-Control II unit kunnen gebruikt worden voor het meten van impulsfrequenties. Het opvragen gebeurt met de functie getfreq, met het cijfer 0 of 1 als parameter. 7.9.
De functie putinf koppelt een geformatteerde integer aan een string. De parameter format legt het aantal invoerposities vast. Ontbrekende voorafgaande posities worden opgevuld met “0”. putinf (s, 1, 4); koppelt dus “0001” aan s. Negatieve formatwaarden leiden tot invoer als hexadecimaal getal met hoofdletters. putinf (2, 255, -4); breidt s uit met “00FF”.
7.11.2 Tijd De C-Control II unit beschikt over een interne real time – klok, die door aansluiting op een DCF77 – actieve antenne tot op de seconde precies gesynchroniseerd kan worden.
7.11.5 Zomertijdflag De functie function dst ( ) returns int geeft de informatie weer, of het bij de actuele systeemdatum gaat om een datum in de zomertijd – periode: 0 komt overeen met de normale tijd (wintertijd), -1 betekent zomertijd. 7.11.6 Oproepen van systeemfuncties Vanuit het C2 – programma kunnen willekeurige functies van het besturingssysteem of van gebruiker – gedefinieerde Assembler-/C-routines opgeroepen worden. Daartoe bevindt zich in de module system.
U kunt de gewenste variant bepalen door de parameter mode: Mode HOOK_REPLACE (0) HOOK_BEFORE (1) HOOK_AFTER (2) Uitvoering van de gebruiker – gedefinieerde interrupt - routine In plaats van de normale interrupt – behandeling van het systeem Voor de normale interrupt – behandeling van het systeem Na de normale interrupt – behandeling van het systeem Het activeren van eigen interrupt – routines vormt een aanzienlijke ingreep in het totale systeem en heeft een beslissende invloed op het tijdgedrag ervan! Int
8 SYSTEEMPROGRAMMERING 8.1.1 TASKING C/C++ tools Het besturingssysteem van de C-Control II unit is ontwikkeld met de volledige versie van de TASKING C/C++ tools. Een demo – versie van deze tools vindt u op de Utility CD bij de C-Control II unit. Deze tools bevatten o.a. een ontwikkelingsomgeving met editor en projectbeheer, een geïntegreerde C/C++ compiler, een assembler en linker. Verdere informatie vindt u in de bestanden en installatie – aanwijzingen op de CD. 8.1.
9 AANHANGSEL 9.1 Technische specificaties Aanwijzing: u vindt gedetailleerde informatie in de PDF-bestanden van de IC fabrikant op de C-Control – Utility CD. Alle spanningsaanduidingen hebben betrekking op gelijkspanning (DC). 9.1.1 Mechaniek Buitenafmetingen zonder pins Gewicht Pinraster ca. 82mm x 60mm x 18mm ca. 90g 2,54mm 9.1.2 Omgevingsvoorwaardes Bereik van de toelaatbare omgevingstemperatuur 0°C…40°C Bereik van de toelaatbare relatieve omgevingsluchtvochtigheid 20% … 60% 9.1.
Rangvolgorde van de operatoren in C2 Rekenkundige operatoren (pag. 61) Operator Betekenis + Optellen Aftrekken * Vermenigvuldigen / Delen % mod Staartdeling (deelrest) Negatief voorteken Vergelijkingsoperatoren (pag. 62) Operator Betekenis == Is gelijk aan? != Is niet gelijk aan? > Is groter dan? < Is kleiner dan? >= Is groter of gelijk aan? <= Is kleiner of gelijk aan? Logische operatoren en bitmanipulaties(pag.