C für Mikrocontroller

Größe: px
Ab Seite anzeigen:

Download "C für Mikrocontroller"

Transkript

1 C für Mikrocontroller Die wichtigste Alternative zum Assembler-Programmieren von Anwendungen für Mikrocontroller ist die Programmierung in C. Die Entwicklungsumgebung steht als sog. Tool-Chain zur Verfügung. Dabei gibt es Firmenprodukte (z.b. von KEIL) oder offene Produkte (z.b. AVR-GCC: GNU C Compiler). In dieser Vorlesung wird WinAVR eingesetzt: eine für Windows adaptierte Tool-Chain für die C-Programmentwicklung der AVR- Mikrocontroller. Im Folgenden geht es um eine Einführung in die grundsätzlichen sprachlichen Merkmale. Die Installation und Handhabung der Tool-Chain wird gesondert für die Übungen beschrieben. Als Beispiel dient ein Programm, das auf dem Butterfly-Modul zyklisch einen Piepton erzeugt (800 msec an, 200 msec aus).

2 Das Anwendungsproblem Auf dem Butterflymodul steht ein Piezoelement zur Tonerzeugung zur Verfügung. Durch zyklisches Ein/Ausschalten des Elements kann man einen Ton erzeugen. Der Ton soll eine Frequenz von 500 Hz, also eine Periodendauer von 2 msec haben. Außerdem soll der Ton 800 msec zu hören sein, dann 200 msec nicht. Das soll sich zyklisch wiederholen. Tue endlos Schalte 500Hz-Ton für 800 msec ein Schalte 500Hz-Ton für 200 msec aus

3 Das Hauptprogramm Im vorangehenden Struktogramm wird die Gesamtfunktion des Anwenderprogramms beschrieben, das in C zu programmieren ist. Im Kontext von C wird die Gesamtfunktion durch das Hauptprogramm repräsentiert. Mit anderen Worten: Dem abstrakten Begriff Gesamtfunktion entspricht das Hauptelement eines C-Programm: die main-funktion. Ein Struktogramm hat die Aufgabe, den Programmierer mit anschaulichen Mitteln dabei zu unterstützen, pauschal beschriebene Funktionen in genauer spezifizierte Teilfunktionen zu untergliedern. Dem entsprechen in einem C-Programm die Funktionen, die innerhalb der main- Funktion aufgerufen werden bzw. Funktionen, die innerhalb von anderen Funktionen aufgerufen werden. Aus der Sicht des Hauptprogramms (main-funktion) sind die von ihm aufgerufenen Teilprogramme untergeordnet, die wiederum andere diesen untergeordnete Teilprogramme aufrufen. In Assemblersprachen ist dafür Begriff Unterprogramme üblich. In C verzichtet man auf diesen hierarchischen Aspekt und spricht nur von Funktionen.

4 C-Funktionen, main-funktion Die Form der Definition einer C-Funktion berücksichtigt eine allgemeine Eigenschaft: man kann einer Funktion beim Aufruf explizit Werte zur Verarbeitung übergeben und sie kann nach Ablauf einen Wert zurückgeben. Das führt zu folgender Form der einleitenden Zeile einer Funktionsdefinition, die auch das Format des Funktionsaufrufs festlegt: Typ der zurückgegebenen Größe Funktionsname (1. Argument, 2.Argument ) Typ der i-ten übergebenen Größe Name der i-ten Größe In diesem Sinne hat die main-funktion eine besondere Eigenschaft: es gibt keine Größen, die ihr explizit zur Verarbeitung übergeben werden, und sie gibt keine Größe zurück. Das drückt kann man in der Definition der main-funktion so aus: void main (void) oder vereinfacht main()

5 main() Der Rumpf der main-funktion folgt der einleitenden Zeile. Er enthält die Anweisungen, die auszuführen sind. Diese Anweisungen werden zusammengenommen als ein Anweisungsblock oder kurz Block bezeichnet. Der Anweisungsblock der main-funktion wird mit dem Beginn-Symbol { vor der ersten Anweisung des Blocks und dem expliziten Ende-Symbol nach der letzten Anweisung des Blocks markiert. Das gilt sinngemäß für jede Funktionsdefinition. Also: bzw. Typ der zurückgegebenen Größe main() { Anweisungen Funktionsname (1. Argument, 2.Argument ) { Anweisungen

6 Daten Die Anweisungen verarbeiten Daten, die grundsätzlich nach ihrer Veränderbarkeit unterschieden werden: Konstante gehen als Festwerte in die Verarbeitung ein. Konstante werden beim Übersetzen Bestandteile des unveränderlichen Programmkodes. Den Veränderlichen (Variablen) werden bei der Verarbeitung neue Werte zugewiesen. Solche Zustandsänderungen kann man nur auf der Basis von les- und beschreibbaren Speicherzellen realisieren, die durch explizite Datendefintionsanweisungen erfolgen.. In C ist das Format einer expliziten Datendefinitionsanweisung für eine einzelne Variable: Datentyp Variablenname; oder für mehrere Variable vom gleichen Datentyp: Datentyp 1.Variablenname, 2.Variablenname, ; Anweisungen werden immer mit ; abgeschlossen.

7 Datentypen In C standardisierte Datentypen für Zeichen und ganze Zahlen sind: signed char signed integer Ganze Zahl mit der Wortlänge Byte (8Bit) signed int signed integer Ganze Zahl mit Vorzeichen mit einer Wortlänge, die vom Zielsystem abhängt, was in der Regel eine Wortlänge von 16Bit bedeutet. signed short signed Entspricht der Wortlänge, die für int gilt integer signed long signed integer Entspricht der doppelten Wortlänge, die für int gilt unsigned char Wort mit der Wortlänge Byte (8Bit) unsigned int unsigned Ganze Zahl ohne Vorzeichen integer

8 Selbstdefinierte (nicht standardisierte) Datentypen In C kann man sich eigene Datentypen definieren: typedef signed char int8_t; typedef unsigned char uint8_t; /*Der Vorteil der neuen Bezeichnung: man erkennt aus dem Namen unmissverständlich alle Merkmale des Datentyp. uint8_t ist als Datentyp für 8Bit-Register geeignet.*/ typedef short int16_t; typedef unsigned short uint16_t; // uint16_t ist als Datentyp für 16Bit-Register geeignet. typedef unsigned long typedef unsigned char uint32_t; uint8_t; Anweisungen werden immer mit ; abgeschlossen. Kommentare werden in /*.*/ eingeschlossen. Ein Kommentar, der nur eine Zeile umfasst, kann mit // begonnen werden.

9 Variable Beispiel: eine Variable, die für eine Zeitangabe den Anteil der Millisekunden angibt: Man braucht die Zahlenwerte 0 bis Das bedeutet, dass man eine Variable vom Datentyp int16_t oder uint16_t definieren kann, z.b. uint16_t cnt; /* Variable mit dem Namen cnt für ganze positive Zahlen im Bereich 0 bis 1000*/ Der Compiler ist frei, diese Variable in einem Register im Registersatz der MCU oder im SRAM zu realisieren. Folgendes einfache Beispiel zeigt eine Anweisungsform, die für eine Wertzuweisung an eine Variable bei Programmablauf sorgt: cnt = 0; Der Wert, der auf der rechten Seite angegeben wird oder mit einem Ausdruck errechnet wird, wird der neue Wert der Variablen links.

10 Einfache Ausdrücke Eine Inkremetierung/Dekrementierung ist ein Beispiel für einen einfachen Ausdruck cnt = cnt +1; Zuerst wird der rechte Ausdruck ausgewertet: zum augenblicklichen Wert von ms wird 1 addiert und dieser Wert wird als neuer Wert in ms gespeichert. In C kann man das auch so ausdrücken: cnt++; (oder ++cnt: Erklärung des Unterschieds später). cnt = cnt -1; Zuerst wird der rechte Ausdruck ausgewertet: zum augenblicklichen Wert von cnt wird 1 addiert und dieser Wert wird als neuer Wert in cnt gespeichert. In C kann man das auch so ausdrücken: cnt--; (oder --cnt: s.o.)

11 Register als Variable (1) Wenn man C bei der Anwendung von Mikrocontrollern einsetzen will, dann muss man Register wie Variable behandeln können. Beispiel: Ein bestimmtes Bit in einem Port (z.b. PortB, Bit 5) soll durch Anweisung 1 oder 0 werden, die anderen Bits in dem Port sollen dabei unverändert bleiben. Der C-Sprachumfang muss so erweitert werden, dass das PortB wie eine Variable vom Datentyp uint8_t behandelt werden kann. Dann sind folgende Anweisungen möglich: PORTB = PORTB 0x20; /* Oder-Verknüpfung des augenblicklichen Werts von PortB mit der binären Konstanten und Schreiben des Ergebnisses in PortB; oder kompaktere Form der Anweisung*/ PORTB = 0x20; PORTB = PORTB & ~0x20; /Und-Verknüpfung des augenblicklichen Werts von PortB mit der binären Konstanten und Schreiben des Ergebnisses in PortB; oder kompaktere Form der Anweisung*/ PORTB &= ~0x20;/* Der Operator ~ invertiert jedes Bit der gegebenen Konstanten.*/

12 Register als Variable (2) C bietet den links-shift-operator << an sowie den rechts-shift-operator >>. Beispiel: PORTB = PORTB (1<< 5); /* Oder-Verknüpfung des augenblicklichen Werts von PortB mit der binären Konstanten und Schreiben des Ergebnisses in PortB; oder kompaktere Form der Anweisung*/ PORTB = (1<< 5); PORTB = PORTB & ~(1<<5); /Und-Verknüpfung des augenblicklichen Werts von PortB mit der binären Konstanten und Schreiben des Ergebnisses in PortB; oder kompaktere Form der Anweisung*/ PORTB &= ~(1<< 5 ); Eine elegantere Methode, die Konstante anzugeben, ergibt sich, wenn man das Bitmuster aus einem sinnfällig angegebenen Namen vom Compiler generieren lässt. Dazu verwendet man einen Namen, der mit einem Hinweis auf das Bit parametriert ist, z.b. _BV(PB5). Beispiel: PORTB = _BV(PB5); Der Präprozessor ersetzt diesen Namen durch (1<<5), so dass der Compiler die Anweisung in der Form bekommt, die er umsetzen kann.

13 Einfache Kontrollstrukturen (1) Kontrollstrukturen definieren die Reihenfolge, in der Aktionen durchgeführt werden. Eine eine wichtige Kontrollstruktur ist die if-anweisung: if (Ausdruck) Anweisung_1 else Anweisung_2 Die Entscheidung, ob die Bedingung zutrifft oder nicht, fällt nach der Berechnung des Ausdrucks, der in den Klammern steht. Hat der Wert, den der Ausdruck liefert, einen von 0 verschiedenen Wert, dann trifft die Bedingung zu und Anweisung_1 wird ausgeführt. Beim Wert 0 wird Anweisung_2 ausgeführt. Fehlt else mit Anweisung_2, dann wird mit der Anweisung fortgesetzt, die der if-anweisung folgt. Anweisung_1 bzw. _2 können in {.. geklammerte Anweisungsblöcke sein.

14 Beispiel: Einfache Kontrollstrukturen (2) cnt++; if (cnt >= 1000) cnt = 0; Der Ausdruck in den Klammern vergleicht zwei Operanden mit Hilfe eines Vergleichsoperators. Er liefert einen int-wert 0, wenn die angegebene Relation falsch ist. Die anderen in C möglichen Vergleichsoperatoren sind: >, < und <= sowie == (gleich) und!= (nicht gleich). Erst, wenn mehr als eine Anweisung auszuführen ist, liegt ein Anweisungsblock vor, der in { gesetzt werden muss. if (cnt >= 1000) {cnt = 0; ist nicht falsch, die Klammern sind aber überflüssig; Man kann die obige Anweisungsfolge auch kompakter schreiben: if (cnt++ >= 1000) cnt = 0; /*Zuerst wird der Wert mit dem augenblicklichen Wert von cnt ausgewertet, dann erst wird cnt inkrementiert.*/ if (++cnt >= 1000) cnt = 0; /*Zuerst wird cnt inkrementiert, dann wird der Ausdruck mit dem inkrementierten Wert ausgewertet.*/

15 Einfache Kontrollstrukturen (3) Eine andere wichtige Kontrollstruktur ist die while-schleife : while (Ausdruck) Anweisung Auch hier ist zuerst der Wert des Ausdrucks in den Klammern zu bestimmen. Hat der Ausdruck einen von 0 verschiedenen Wert, dann wird die Anweisung ausgeführt und anschließend der Ausdruck wieder bewertet (Schleife). Hat der Ausdruck den Wert 0, dann wird die Anweisung ausgeführt, die der while-anweisung folgt. Die Anweisung kann auch ein { stehender Anweisungsblock sein. Beispiel: counter1 = 16; while (counter1) { counter1--; counter2 = 86; while (counter2) { counter2--;

16 Einfache Kontrollstrukturen (4) Eine andere Kontrollstruktur ist die for-schleife : for (Ausdruck_1;Ausdruck_2;Ausdruck_3) Anweisung Beispiel: for (counter1 = 16; counter1 > 0; counter1--) { counter2 = 86; while (counter2) { counter2--; Das ist gleichwertig: allgemein: counter1 = 16; Ausdruck1; while (counter1) { while (Ausdruck_2) { counter1--; Ausdruck_3; counter2 = 86; Anweisung bzw. Block while (counter2) { counter2--; Eine while-schleife lässt sich als gleichwertige for-schleife formulieren und umgekehrt.

17 Einfache Kontrollstrukturen (5) Eine andere wichtige Kontrollstruktur ist die do-while-schleife : do Anweisung while (Ausdruck) While- und For-Schleife haben die wünschenswerte Eigenschaft, dass die Abbruchbedingung am Anfang und nicht am Ende des Schleifendurchlaufs geprüft wird. Die do-while-schleife prüft am Ende der Schleife und die Anweisung wird daher wenigstens einmal durchgeführt. Die Anweisung kann auch ein in { gesetzter Anweisungsblock sein. Beispiel: do {counter2--; while (counter2 > 0);

18 Anwendungsprogramm: main() #include <avr/io.h> #include "utils.h" void main(void) { uint16_t cnt; /* enable PB5 as output */ DDRB = _BV(PB5); /* Beep, Beep */ cnt = 0; while (1) { if ( cnt++ >= 1000 ) cnt = 0; if ( cnt < 800 ) PORTB ^= _BV(PB5); // ^ ist der Operator für die bitweise EXOR-Verknüpfung.. warten_ms(1);

19 Anwendungsprogramm: unterstützende Funktionen Beispiel für eine library-funktion #include <avr/io.h> void warten_ms(unsigned short ms) { uint8_t counter1, counter2; while (ms) { counter1 = 16; while (counter1) { counter1--; counter2 = 87; while (counter2) { counter2--; ms--;

20 <io.h> includes <avr/sfr_defs.h> and <iom169.h> /* $Id: io.h,v /11/24 18:57:36 troth Exp $ */ /** \defgroup avr_io AVR device-specific IO definitions \code #include <avr/io.h> \endcode This header file includes the apropriate IO definitions for the device that has been specified by the <tt>mmcu=</tt> compiler command-line switch...*/ #include <avr/sfr_defs.h> /* Stack Pointer */ #define SP _SFR_IO16(0x3D) #define SPL _SFR_IO8(0x3D) #define SPH _SFR_IO8(0x3E) /* */ /*Status Register */ #define SREG _SFR_IO8(0x3F) /* Status Register - SREG */ #define SREG_I 7 #define SREG_T 6 #define SREG_H 5 #define SREG_S 4 #define SREG_V 3 #define SREG_N 2 #define SREG_Z 1 #define SREG_C 0/* */ #if defined (/*...*/) /*...*/ #elif defined ( AVR_ATmega169 ) # include <avr/iom169.h>

21 avr/sfr_defs.h /* avr/sfr_defs.h - macros for accessing AVR special function registers */ /* $Id: sfr_defs.h,v /01/07 19:25:25 arcanum Exp $ */ /** \defgroup avr_sfr_notes Additional notes from <avr/sfr_defs.h> \ingroup avr_sfr The \c <avr/sfr_defs.h> file is included by all of the \c <avr/ioxxxx.h> files, which use macros defined here to make the special function register definitions look like C variables or simple constants, depending on the <tt>_sfr_asm_compat</tt> define. */ #define SFR_OFFSET #define _SFR_MEM8(mem_addr) #define _SFR_MEM16(mem_addr) 0x20 /* */ (mem_addr) (mem_addr) #define _SFR_IO8(io_addr) ((io_addr) + SFR_OFFSET) #define _SFR_IO16(io_addr) ((io_addr) + SFR_OFFSET) #define _SFR_IO_ADDR(sfr) ((sfr) - SFR_OFFSET) #define _SFR_MEM_ADDR(sfr) (sfr) #define _SFR_IO_REG_P(sfr) ((sfr) < 0x40 + SFR_OFFSET) /* */

22 iom169.h iom169.h wird hier auszugsweise angegeben, um im Kontext der Beispiele Plausibilität herzustellen. //Ports /* Port A */ #define PINA _SFR_IO8(0x00) #define DDRA _SFR_IO8(0x01) #define PORTA _SFR_IO8(0x02) /* Port B */ #define PINB _SFR_IO8(0x03) #define DDRB _SFR_IO8(0x04) #define PORTB _SFR_IO8(0x05) /* Port C */ #define PINC _SFR_IO8(0x06) #define DDRC _SFR_IO8(0x07) #define PORTC _SFR_IO8(0x08) /* Port D */ #define PIND _SFR_IO8(0x09) #define DDRD _SFR_IO8(0x0A) #define PORTD _SFR_IO8(0x0B) /* Port E */ #define PINE _SFR_IO8(0x0C) #define DDRE _SFR_IO8(0x0D) #define PORTE _SFR_IO8(0x0E) /* Port F */ #define PINF _SFR_IO8(0x0F) #define DDRF _SFR_IO8(0x10) #define PORTF _SFR_IO8(0x11) /* Port G */ #define PING _SFR_IO8(0x12) #define DDRG _SFR_IO8(0x13) #define PORTG _SFR_IO8(0x14)

23 iom169.h //EEPROM #undef EECR /* EEPROM Control Register */ #define EECR _SFR_IO8(0x1F) #undef EEDR /* EEPROM Data Register */ #define EEDR _SFR_IO8(0x20) #undef EEAR #undef EEARL #undef EEARH /* EEPROM Address Register */ #define EEAR _SFR_IO16(0x21) #define EEARL _SFR_IO8(0x21) #define EEARH _SFR_IO8(0x22) //Timer/Counter0 /* Timer/Counter Control Register A */ #define TCCR0A _SFR_IO8(0x24) /* Timer/Counter Register */ #define TCNT0 _SFR_IO8(0x26) /* Output Compare Register A */ #define OCR0A _SFR_IO8(0x27) /* Clock Prescale Register */ #define CLKPR _SFR_MEM8(0x61) #define PRR _SFR_MEM8(0x64) #define PRADC 0 #define PRUSART0 1 #define PRSPI 2 #define PRTIM1 3 #define PRLCD 4

24 iom169.h //Timer/Counter1 /* Timer/Counter1 Control Register A */ #define TCCR1A _SFR_MEM8(0x80) /* Timer/Counter1 Control Register B */ #define TCCR1B _SFR_MEM8(0x81) /* Timer/Counter1 Control Register C */ #define TCCR1C _SFR_MEM8(0x82) /* Timer/Counter1 Register */ #define TCNT1 _SFR_MEM16(0x84) #define TCNT1L _SFR_MEM8(0x84) #define TCNT1H _SFR_MEM8(0x85) /* Timer/Counter1 Output Compare Register A */ #define OCR1A _SFR_MEM16(0x88) #define OCR1AL _SFR_MEM8(0x88) #define OCR1AH _SFR_MEM8(0x89) /* Timer/Counter1 Output Compare Register B */ #define OCR1B _SFR_MEM16(0x8A) #define OCR1BL _SFR_MEM8(0x8A) #define OCR1BH _SFR_MEM8(0x8B) /* Timer/Counter1 Input Capture Register */ #define ICR1 _SFR_MEM16(0x86) #define ICR1L _SFR_MEM8(0x86) #define ICR1H _SFR_MEM8(0x87)

25 iom169.h //USART0 /* USART0 Control and Status Register A */ #define UCSRA _SFR_MEM8(0xC0) /* USART0 Control and Status Register B */ #define UCSRB _SFR_MEM8(0xC1) /* USART0 Control and Status Register C */ #define UCSRC _SFR_MEM8(0xC2) /* USART0 Baud Rate Register */ #define UBRR _SFR_MEM16(0xC4) #define UBRRL _SFR_MEM8(0xC4) #define UBRRH _SFR_MEM8(0xC5) /* USART0 I/O Data Register */ #define UDR _SFR_MEM8(0xC6)

26 iom169.h: Interrupt Vectors #define SIG_INTERRUPT0 _VECTOR(1) #define SIG_PIN_CHANGE0 _VECTOR(2) #define SIG_PIN_CHANGE1 _VECTOR(3) #define SIG_OUTPUT_COMPARE2 _VECTOR(4) #define SIG_OVERFLOW2 _VECTOR(5) #define SIG_INPUT_CAPTURE1 _VECTOR(6) #define SIG_OUTPUT_COMPARE1A _VECTOR(7) #define SIG_OUTPUT_COMPARE1B _VECTOR(8) #define SIG_OVERFLOW1 _VECTOR(9) #define SIG_OUTPUT_COMPARE0 _VECTOR(10) #define SIG_OVERFLOW0 _VECTOR(11) #define SIG_SPI _VECTOR(12) #define SIG_USART_RECV _VECTOR(13) #define SIG_USART_DATA _VECTOR(14) #define SIG_USART_TRANS _VECTOR(15) #define SIG_USI_START _VECTOR(16) #define SIG_USI_OVERFLOW _VECTOR(17) #define SIG_COMPARATOR _VECTOR(18) #define SIG_ADC _VECTOR(19) #define SIG_EEPROM_READY _VECTOR(20) #define SIG_SPM_READY _VECTOR(21) #define SIG_LCD _VECTOR(22)

27 iom169.h /* PORTB */ #define PB7 7 #define PB6 6 #define PB5 5 #define PB4 4 #define PB3 3 #define PB2 2 #define PB1 1 #define PB0 0 /* DDRB */ #define DDB7 7 #define DDB6 6 #define DDB5 5 #define DDB4 4 #define DDB3 3 #define DDB2 2 #define DDB1 1 #define DDB0 0 /* PINB */ #define PINB7 7 #define PINB6 6 #define PINB5 5 #define PINB4 4 #define PINB3 3 #define PINB2 2 #define PINB1 1 #define PINB0 0

28 Textaufbereitung des Präprozessors für das Compilieren (1) Auszug aus sfr_defs.h #define SFR_OFFSET 0x20 #define _SFR_MEM8(mem_addr) (mem_addr) #define _SFR_MEM16(mem_addr) (mem_addr) #define _SFR_IO8(io_addr) ((io_addr) + SFR_OFFSET) #define _SFR_IO16(io_addr) ((io_addr) + SFR_OFFSET) und aus iom169.h /* PortB */ #define PINB #define DDRB #define PORTB _SFR_IO8(0x03) _SFR_IO8(0x04) _SFR_IO8(0x05) Aus wird wird PORTB _SFR_IO8(0x05) ((0x20) + 0x05)

29 Textaufbereitung des Präprozessors für das Compilieren (2) Beispiel mit Auszug aus sfr_defs.h #define _BV(bit) (1 << (bit)) und aus iom169.h #define PB5 5 Aus _BV(PB5) wird (1 << (5)) Beide Beispiele werden auf folgende Anweisung angewendet: PORTB = _BV(PB5) Der Präprozessor macht also daraus den übersetzungsfähigen Text: ((0x20) + 0x05) = (1 << (5)). Das führt aber zu keinem sinnvollen Code; denn der linke Ausdruck ist eine Konstante. Es fehlt links das Merkmal, dass der Ausdruck als Adresswert, also als Zeiger (Pointer) zu verwenden ist. Nur dann kann der Übersetzer auch Befehle mit einer zweckmäßigen Adressierung zuordnen.

30 Textaufbereitung des Präprozessors für das Compilieren (3) Die Macros, die dafür in sfr_defs.h vorgesehen sind: #define _SFR_MEM8(mem_addr) _MMIO_BYTE(mem_addr) #define _SFR_MEM16(mem_addr) _MMIO_WORD(mem_addr) #define _SFR_IO8(io_addr) _MMIO_BYTE((io_addr) + 0x20) #define _SFR_IO16(io_addr) _MMIO_WORD((io_addr) + 0x20) #define _MMIO_BYTE(mem_addr) (*(volatile uint8_t *)(mem_addr)) #define _MMIO_WORD(mem_addr) (*(volatile uint16_t *)(mem_addr)) Unter diesen Voraussetzungen wird aus die C-Anweisung PORTB = _BV(PB5); (*(volatile uint8_t *) ((0x20) + 0x05)) = (1 << (5));

31 Textaufbereitung des Präprozessors für das Compilieren (4) Durch das Konstrukt * ((0x20) + 0x05) wird der Ausdruck ((0x20) + 0x05) dem Compiler als Zeiger erklärt. Innerhalb einer Anweisung steht das Konstrukt für das Zielobjekt, das dadurch adressiert wird. In C erklärt der * Operator seinen Operanden als die Adresse eines Zielobjektes. Diese Erklärung als Zeiger muss mit einer Typangabe ergänzt werden, hier also: * (uint8_t *) ((0x20) + 0x05) Das erklärt, dass der Zeiger ein Zielobjekt vom Typ unsigned char adressiert. Port-Register sind Variable, deren Wert sich ändern kann, ohne dass eine programmierte Anweisung das tut. Diese Eigenschaft einer Variablen bzw. eines Zeiger auf eine solche Variable muss dem Compiler erklärt werden, indem man den Modifikator (modifier) volatile vor die Typangabe stellt. *(volatile uint8_t *) ((0x20) + 0x05) = (1 << (5)); Dadurch kann man verhindern, dass der Compiler die Variable wegoptimiert, wenn sie nicht explizit verwendet wird. Das Zeiger-Konzept von C umfasst wesentlich mehr Eigenschaften als hier beschrieben. Davon später.

32 # WinAVR makefile # Released to the Public Domain #... # make all = Make software. # # make clean = Clean out built project files. #... # MCU name MCU = atmega169 # Output format. (can be srec, ihex, binary) FORMAT = ihex # Target file name (without extension). TARGET = main # Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization. # (Note: 3 is not always the best optimization level. See avr-libc FAQ.) OPT = 1 # List C source files here. (C dependencies are automatically generated.) SRC = $(TARGET).c #...

33 Listing: unterstützende Funktionen 20 warten_ms: sbiw r24, F0 breq.l12 1(-) 28.L10: 29.LM3: E1 ldi r19,lo8(16) 1 31.L9: 32.LM4: subi r19,lo8(-(-1)) 1 34.LM5: E5 ldi r18,lo8(87) 1 36.L8: 37.LM6: a 2150 subi r18,lo8(-(-1)) c F1F7 brne.l8 2(+) e 3323 tst r D1F7 brne.l9 2(+) 42.LM7: sbiw r24, B9F7 brne.l10 2(+) 45.L12: ret

34 # WinAVR makefile # Released to the Public Domain #... # make all = Make software. # # make clean = Clean out built project files. #... # MCU name MCU = atmega169 # Output format. (can be srec, ihex, binary) FORMAT = ihex # Target file name (without extension). TARGET = main # Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization. # (Note: 3 is not always the best optimization level. See avr-libc FAQ.) OPT = s # List C source files here. (C dependencies are automatically generated.) SRC = $(TARGET).c #...

35 20 warten_ms:.. Optimierungsbeispiel 26.LM2: sbiw r24, F0 breq.l12 29.LM3: E6 ldi r19,lo8(100) 31.L9: 32.LM4: subi r19,lo8(-(-1)) 34.LM5: E6 ldi r18,lo8(100) 36.L8: 37.LM6: a 2253 subi r18,lo8(-(-50)) c F1F7 brne.l e 3323 tst r D1F7 brne.l9 42.LM7: sbiw r24, F5CF rjmp.l L12: ret

36 20 main: 21.LFB2: 22.LM1: 23 /* prologue: frame size=0 */ C0E0 ldi r28,lo8( stack - 0) D0E0 ldi r29,hi8( stack - 0) DEBF out SP_H,r CDBF out SP_L,r28 28 /* prologue end (size=4) */ 29.LM2: A sbi 36-0x20,5 main() (1) Hier ist noch nicht erkennbar, dass der Stackpointer mit der höchsten Adresse im SRAM geladen wird. Das wird endgültig im gelinkten Programm bewirkt. main.lss.. 60: cf ef ldi r28, 0xFF 62: d4 e0 ldi r29, 0x04 64: de bf out 0x3e, r29 66: cd bf out 0x3d, r28...

37 main() (2) 20 main: 21.LFB2: 22.LM1: 23 /* prologue: frame size=0 */ C0E0 ldi r28,lo8( stack - 0) D0E0 ldi r29,hi8( stack - 0) DEBF out SP_H,r CDBF out SP_L,r28 28 /* prologue end (size=4) */ 29.LM2: A sbi 36-0x20,5 void main(void) { uint16_t cnt; /* enable PB5 as output */ DDRB = _BV(PB5); sbi set bit in i/o register Man kann i/o-register im memory- Adressraum adressieren oder im i/o- Adressraum. Im memory-adressraum hat das Register DDRB die dezimale Adresse 36= 0x24. Subrahiert man von der Adresse im memory-adressraum eine 0x20, erhält man 0x04, d.h. die äquivalente Adresse im i/o-adressraum. /* Beep, Beep */ cnt = 0; while (1) { if ( cnt++ >= 1000 ) cnt = 0; if ( cnt < 800 ) PORTB ^= _BV(PB5); /* ^ ist der Operator für die bitweise EXOR Verknüpfung.*/ warten_ms(1);

38 31.LM3: a C0E0 ldi r28,lo8(0) c D0E0 ldi r29,hi8(0) e 10E2 ldi r17,lo8(32) 35.L2: 36.LM4: CE01 movw r24,r adiw r28, E subi r24,lo8(1000) sbci r25,hi8(1000) F0 brlo.l4 42.LM5: a C0E0 ldi r28,lo8(0) c D0E0 ldi r29,hi8(0) 45.L4: 46.LM6: e 83E0 ldi r24,hi8(800) C032 cpi r28,lo8(800) D807 cpc r29,r F4 brsh.l5 51.LM7: B1 in r24,37-0x eor r24,r a 85B9 out 37-0x20,r24 55.L5: 56.LM8: c 81E0 ldi r24,lo8(1) e 90E0 ldi r25,hi8(1) E call warten_ms EDCF rjmp.l2 void main(void) { uint16_t cnt; /* enable PB5 as output */ DDRB = _BV(PB5); /* Beep, Beep */ cnt = 0; while (1) { if ( cnt++ >= 1000 ) cnt = 0; main() (3) if ( cnt < 800 ) PORTB ^= _BV(PB5); /* ^ ist der Operator für die bitweise EXOR Verknüpfung.*/ warten_ms(1);

39 31.LM3: a C0E0 ldi r28,lo8(0) c D0E0 ldi r29,hi8(0) e 10E2 ldi r17,lo8(32) 35.L2: 36.LM4: CE01 movw r24,r adiw r28, E subi r24,lo8(1000) sbci r25,hi8(1000) F0 brlo.l4 42.LM5: a C0E0 ldi r28,lo8(0) c D0E0 ldi r29,hi8(0) 45.L4: 46.LM6: e 83E0 ldi r24,hi8(800) C032 cpi r28,lo8(800) D807 cpc r29,r F4 brsh.l5 51.LM7: B1 in r24,37-0x eor r24,r a 85B9 out 37-0x20,r24 55.L5: 56.LM8: c 81E0 ldi r24,lo8(1) e 90E0 ldi r25,hi8(1) E call warten_ms EDCF rjmp.l2 void main(void) { uint16_t cnt; /* enable PB5 as output */ DDRB = _BV(PB5); main() (4) /* Beep, Beep */ cnt = 0; while (1) { if ( cnt++ >= 1000 ) cnt = 0; if ( cnt < 800 ) PORTB ^= _BV(PB5); /* ^ ist der Operator für die bitweise EXOR Verknüpfung.*/ warten_ms(1);

40 31.LM3: a C0E0 ldi r28,lo8(0) c D0E0 ldi r29,hi8(0) e 10E2 ldi r17,lo8(32) 35.L2: 36.LM4: CE01 movw r24,r adiw r28, E subi r24,lo8(1000) sbci r25,hi8(1000) F0 brlo.l4 42.LM5: a C0E0 ldi r28,lo8(0) c D0E0 ldi r29,hi8(0) 45.L4: 46.LM6: e 83E0 ldi r24,hi8(800) C032 cpi r28,lo8(800) D807 cpc r29,r F4 brsh.l5 51.LM7: B1 in r24,37-0x eor r24,r a 85B9 out 37-0x20,r24 55.L5: 56.LM8: c 81E0 ldi r24,lo8(1) e 90E0 ldi r25,hi8(1) E call warten_ms EDCF rjmp.l2 void main(void) { uint16_t cnt; /* enable PB5 as output */ DDRB = _BV(PB5); /* Beep, Beep */ cnt = 0; while (1) { if ( cnt++ >= 1000 ) cnt = 0; main() (5) if ( cnt < 800 ) PORTB ^= _BV(PB5); /* ^ ist der Operator für die bitweise EXOR Verknüpfung.*/ warten_ms(1);

41 31.LM3: a C0E0 ldi r28,lo8(0) c D0E0 ldi r29,hi8(0) e 10E2 ldi r17,lo8(32) 35.L2: 36.LM4: CE01 movw r24,r adiw r28, E subi r24,lo8(1000) sbci r25,hi8(1000) F0 brlo.l4 42.LM5: a C0E0 ldi r28,lo8(0) c D0E0 ldi r29,hi8(0) 45.L4: 46.LM6: e 83E0 ldi r24,hi8(800) C032 cpi r28,lo8(800) D807 cpc r29,r F4 brsh.l5 51.LM7: B1 in r24,37-0x eor r24,r a 85B9 out 37-0x20,r24 55.L5: 56.LM8: c 81E0 ldi r24,lo8(1) e 90E0 ldi r25,hi8(1) E call warten_ms EDCF rjmp.l2 void main(void) { uint16_t cnt; main() (5) /* enable PB5 as output */ DDRB = _BV(PB5); /* Beep, Beep */ cnt = 0; while (1) { if ( cnt++ >= 1000 ) cnt = 0; if ( cnt < 800 ) PORTB ^= _BV(PB5); /* ^ ist der Operator für die bitweise EXOR Verknüpfung.*/ warten_ms(1); Der Parameterwert 1 wird der Funktion im Registerpaar r24,r25 übergeben.

42 31.LM3: a C0E0 ldi r28,lo8(0) c D0E0 ldi r29,hi8(0) e 10E2 ldi r17,lo8(32) 35.L2: 36.LM4: CE01 movw r24,r adiw r28, E subi r24,lo8(1000) sbci r25,hi8(1000) F0 brlo.l4 42.LM5: a C0E0 ldi r28,lo8(0) c D0E0 ldi r29,hi8(0) 45.L4: 46.LM6: e 83E0 ldi r24,hi8(800) C032 cpi r28,lo8(800) D807 cpc r29,r F4 brsh.l5 51.LM7: B1 in r24,37-0x eor r24,r a 85B9 out 37-0x20,r24 55.L5: 56.LM8: c 81E0 ldi r24,lo8(1) e 90E0 ldi r25,hi8(1) E call warten_ms EDCF rjmp.l2 void main(void) { uint16_t cnt; main() (6) /* enable PB5 as output */ DDRB = _BV(PB5); /* Beep, Beep */ cnt = 0; while (1) { if ( cnt++ >= 1000 ) cnt = 0; if ( cnt < 800 ) PORTB ^= _BV(PB5); /* ^ ist der Operator für die bitweise EXOR Verknüpfung.*/ warten_ms(1); Es kostet einige Mühe, durch Abzählen der verbrauchten Zyklen eine möglichst exakte Periode für die Tonausgabe zu erreichen, weil man auch die Übersetzungsstrategie des Compilers einbeziehen muss. Solche Aufgabenstellungen löst man besser unter Benutzung eines Timers.

1 Vom Problem zum Programm

1 Vom Problem zum Programm Hintergrundinformationen zur Vorlesung GRUNDLAGEN DER INFORMATIK I Studiengang Elektrotechnik WS 02/03 AG Betriebssysteme FB3 Kirsten Berkenkötter 1 Vom Problem zum Programm Aufgabenstellung analysieren

Mehr

Microcontroller Kurs Programmieren. 09.10.11 Microcontroller Kurs/Johannes Fuchs 1

Microcontroller Kurs Programmieren. 09.10.11 Microcontroller Kurs/Johannes Fuchs 1 Microcontroller Kurs Programmieren 9.1.11 Microcontroller Kurs/Johannes Fuchs 1 General Purpose Input Output (GPIO) Jeder der Pins der vier I/O Ports kann als Eingabe- oder Ausgabe-leitung benutzt werden.

Mehr

Erwin Grüner 09.02.2006

Erwin Grüner 09.02.2006 FB Psychologie Uni Marburg 09.02.2006 Themenübersicht Folgende Befehle stehen in R zur Verfügung: {}: Anweisungsblock if: Bedingte Anweisung switch: Fallunterscheidung repeat-schleife while-schleife for-schleife

Mehr

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff Programmieren in C Macros, Funktionen und modulare Programmstruktur Prof. Dr. Nikolaus Wulff Der C Präprozessor Vor einem Compile Lauf werden alle Präprozessor Kommandos/Makros ausgewertet. Diese sind

Mehr

Zählen von Objekten einer bestimmten Klasse

Zählen von Objekten einer bestimmten Klasse Zählen von Objekten einer bestimmten Klasse Ziel, Inhalt Zur Übung versuchen wir eine Klasse zu schreiben, mit der es möglich ist Objekte einer bestimmten Klasse zu zählen. Wir werden den ++ und den --

Mehr

Einführung in die Programmierung

Einführung in die Programmierung : Inhalt Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund - mit / ohne Parameter - mit / ohne Rückgabewerte

Mehr

C-Probeklausur (Informatik 1; Umfang: C, Teil 1; SS07)

C-Probeklausur (Informatik 1; Umfang: C, Teil 1; SS07) C-Probeklausur (Informatik 1; Umfang: C, Teil 1; SS07) 1. Aufgabe 6 Punkte Geben Sie Definitionen an für: float var; 1 a) eine float-variable var: b) einen Zeiger pvar, der float *pvar = &var; 1 auf die

Mehr

Informatik Repetitorium SS 2009. Volker Jaedicke [email protected] 0179 1322692

Informatik Repetitorium SS 2009. Volker Jaedicke Volker.Jaedicke@web.de 0179 1322692 Informatik Repetitorium SS 2009 Volker Jaedicke [email protected] 0179 1322692 Operatoren und Datentypen Beispiel: Anweisungen Variable int a float b int c a= a % (int) (++b-1/4) Vorher 36 3.5 c=b

Mehr

Einführung in die C-Programmierung

Einführung in die C-Programmierung Einführung in die C-Programmierung Warum C? Sehr stark verbreitet (Praxisnähe) Höhere Programmiersprache Objektorientierte Erweiterung: C++ Aber auch hardwarenahe Programmierung möglich (z.b. Mikrokontroller).

Mehr

25 kann ohne Rest durch 5 geteilt werden! ist wahr

25 kann ohne Rest durch 5 geteilt werden! ist wahr Lehrbrief 2: Lektion 8 - C -Praxis 4-1 - 5.2 Einfache Entscheidungen mit if und die Vergleichsoperatoren Nun tauchen wir immer tiefer in die Geheimnisse von C ein und beschäftigen uns mit einem sehr wichtigen

Mehr

Einführung in die C++ Programmierung für Ingenieure

Einführung in die C++ Programmierung für Ingenieure Einführung in die C++ Programmierung für Ingenieure MATTHIAS WALTER / JENS KLUNKER Universität Rostock, Lehrstuhl für Modellierung und Simulation 14. November 2012 c 2012 UNIVERSITÄT ROSTOCK FACULTY OF

Mehr

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren Lineargleichungssysteme: Additions-/ Subtraktionsverfahren W. Kippels 22. Februar 2014 Inhaltsverzeichnis 1 Einleitung 2 2 Lineargleichungssysteme zweiten Grades 2 3 Lineargleichungssysteme höheren als

Mehr

Interrupt-Programmierung

Interrupt-Programmierung Interrupt-Programmierung Am Beispiel des ATMEGA16 Microcontrollers Beispiel: Messung der Betriebszeit Die Betriebszeit zeigt an, wie lange der Rechner seit dem Booten läuft Hier: Aktualisierung der Betriebszeit

Mehr

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen: VBA Programmierung mit Excel Schleifen 1/6 Erweiterung der Aufgabe Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen: Es müssen also 11 (B L) x 35 = 385 Zellen berücksichtigt

Mehr

Parallel-IO. Ports am ATmega128

Parallel-IO. Ports am ATmega128 Parallel-IO Ansteuerung Miniprojekt Lauflicht Ports am ATmega128 PortE (PE7...PE0) alternativ, z.b. USART0 (RS232) 1 Pin von PortC Port C (PC7...PC0) 1 Parallel-IO-Port "Sammelsurium" verschiedener Speicher

Mehr

Java 7. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Dezember 2011 JAV7

Java 7. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Dezember 2011 JAV7 Java 7 Elmar Fuchs Grundlagen Programmierung 1. Ausgabe, Dezember 2011 JAV7 5 Java 7 - Grundlagen Programmierung 5 Kontrollstrukturen In diesem Kapitel erfahren Sie wie Sie die Ausführung von von Bedingungen

Mehr

Atmel AVR für Dummies

Atmel AVR für Dummies Atmel AVR für Dummies [email protected] 29.12.2005 Übersicht 1 Hardware Kurzvorstellung Atmega8 Programmierkabel (Eigenbau vs. Kommerzlösung) Alternative: Bootloader (Programmieren via rs232) Software Speicher

Mehr

Hochschule München, FK 03 FA SS 2012. Ingenieurinformatik

Hochschule München, FK 03 FA SS 2012. Ingenieurinformatik Hochschule München, FK 03 FA SS 2012 Ingenieurinformatik Zulassung geprüft vom Aufgabensteller: Teil 1/Aufgabe 1: 30 Minuten ohne Unterlagen, Teil 2/Aufgaben 2-4: 60 Minuten, beliebige eigene Unterlagen

Mehr

Übersicht Programmablaufsteuerung

Übersicht Programmablaufsteuerung Übersicht Programmablaufsteuerung Konditionale Verzweigung: if - else switch-anweisung Schleifenkonstrukte: while, do - while for Schleife Sprung-Anweisungen: break, continue, goto, return Anweisungen

Mehr

Tutorium Rechnerorganisation

Tutorium Rechnerorganisation Woche 2 Tutorien 3 und 4 zur Vorlesung Rechnerorganisation 1 Christian A. Mandery: KIT Universität des Landes Baden-Württemberg und nationales Grossforschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu

Mehr

Programmierung in C. Grundlagen. Stefan Kallerhoff

Programmierung in C. Grundlagen. Stefan Kallerhoff Programmierung in C Grundlagen Stefan Kallerhoff Vorstellungsrunde Name Hobby/Beruf Schon mal was programmiert? Erwartungen an den Kurs Lieblingstier Für zu Hause C-Buch online: http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/

Mehr

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur Unterprogramme Unterprogramme sind abgekapselte Programmfragmente, welche es erlauben, bestimmte Aufgaben in wiederverwendbarer Art umzusetzen. Man unterscheidet zwischen Unterprogrammen mit Rückgabewert

Mehr

Einführung in die Programmierung (EPR)

Einführung in die Programmierung (EPR) Goethe-Center for Scientific Computing (G-CSC) Goethe-Universität Frankfurt am Main Einführung in die Programmierung (EPR) (Übung, Wintersemester 2014/2015) Dr. S. Reiter, M. Rupp, Dr. A. Vogel, Dr. K.

Mehr

5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu Daten Makro + VBA effektiv 5 DATEN 5.1. Variablen Variablen können beliebige Werte zugewiesen und im Gegensatz zu Konstanten jederzeit im Programm verändert werden. Als Variablen können beliebige Zeichenketten

Mehr

Starten Sie Eclipse: Hier tragen sie Ihr Arbeitsverzeichnis ein. Zu Hause z.b. c:\workspace.

Starten Sie Eclipse: Hier tragen sie Ihr Arbeitsverzeichnis ein. Zu Hause z.b. c:\workspace. Starten Sie Eclipse: Abgesehen vom Kommandozeilenfenster, auf welches wir später eingehen, öffnet sich ein Dialog (in der FH vermutlich nicht, überspringen Sie in diesem Fall): Hier tragen sie Ihr Arbeitsverzeichnis

Mehr

Tag 2 Eingabe und Interrupts

Tag 2 Eingabe und Interrupts Tag 2 Eingabe und Interrupts 08/30/10 Fachbereich Physik Institut für Kernphysik Bastian Löher, Martin Konrad 1 Taster Direkt an Portpin angeschlossen (etwa PINB0, PIND3) Pull-Up-Widerstände einschalten!

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE16-Rekursion (Stand 09.12.2011) Aufgabe 1: Implementieren Sie in Java ein Programm, das solange einzelne Zeichen vom Terminal einliest, bis ein #-Zeichen

Mehr

Diana Lange. Generative Gestaltung Operatoren

Diana Lange. Generative Gestaltung Operatoren Diana Lange Generative Gestaltung Operatoren Begriffserklärung Verknüpfungsvorschrift im Rahmen logischer Kalküle. Quelle: google Operatoren sind Zeichen, die mit einer bestimmten Bedeutung versehen sind.

Mehr

Deklarationen in C. Prof. Dr. Margarita Esponda

Deklarationen in C. Prof. Dr. Margarita Esponda Deklarationen in C 1 Deklarationen Deklarationen spielen eine zentrale Rolle in der C-Programmiersprache. Deklarationen Variablen Funktionen Die Deklarationen von Variablen und Funktionen haben viele Gemeinsamkeiten.

Mehr

Gegenüberstellung von Assembler- und C-Programmierung

Gegenüberstellung von Assembler- und C-Programmierung Gegenüberstellung von Assembler- und C-Programmierung Assembler-Version C-Version org 8000h #pragma code=0x8000 #pragma xdata=0x2000 INPUT equ 0e081h OUTPUT equ 0e082h neu: mov dptr,#input movx a,@dptr

Mehr

5. Tutorium zu Programmieren

5. Tutorium zu Programmieren 5. Tutorium zu Programmieren Dennis Ewert Gruppe 6 Universität Karlsruhe Institut für Programmstrukturen und Datenorganisation (IPD) Lehrstuhl Programmierparadigmen WS 2008/2009 c 2008 by IPD Snelting

Mehr

Professionelle Seminare im Bereich MS-Office

Professionelle Seminare im Bereich MS-Office Der Name BEREICH.VERSCHIEBEN() ist etwas unglücklich gewählt. Man kann mit der Funktion Bereiche zwar verschieben, man kann Bereiche aber auch verkleinern oder vergrößern. Besser wäre es, die Funktion

Mehr

Inhaltsverzeichnis. Grundbegriffe der C-Programmierung Für den HI-TECH C-Compiler

Inhaltsverzeichnis. Grundbegriffe der C-Programmierung Für den HI-TECH C-Compiler Inhaltsverzeichnis Grundbegriffe der C-Programmierung 1. Grundsätzliches... 2 1.1 Darstellung von Werten... 2 1.1.1 Dezimale Zahlendarstellung... 2 1.1.2 Binäre Zahlendarstellung... 3 1.1.3 Hexadezimale

Mehr

Programmieren I. Kontrollstrukturen. Heusch 8 Ratz 4.5. www.kit.edu. Institut für Angewandte Informatik

Programmieren I. Kontrollstrukturen. Heusch 8 Ratz 4.5. www.kit.edu. Institut für Angewandte Informatik Programmieren I Kontrollstrukturen Heusch 8 Ratz 4.5 KIT Universität des Landes Baden-Württemberg und nationales Großforschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu Arten von Kontrollstrukturen

Mehr

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen Binäre Bäume 1. Allgemeines Binäre Bäume werden grundsätzlich verwendet, um Zahlen der Größe nach, oder Wörter dem Alphabet nach zu sortieren. Dem einfacheren Verständnis zu Liebe werde ich mich hier besonders

Mehr

Grundlagen der Theoretischen Informatik, SoSe 2008

Grundlagen der Theoretischen Informatik, SoSe 2008 1. Aufgabenblatt zur Vorlesung Grundlagen der Theoretischen Informatik, SoSe 2008 (Dr. Frank Hoffmann) Lösung von Manuel Jain und Benjamin Bortfeldt Aufgabe 2 Zustandsdiagramme (6 Punkte, wird korrigiert)

Mehr

Einführung in die Programmierung

Einführung in die Programmierung : Inhalt Einführung in die Programmierung Wintersemester 2010/11 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund Wiederholungen - while - do-while - for

Mehr

Java-Programmierung mit NetBeans

Java-Programmierung mit NetBeans Java-Programmierung mit NetBeans Steuerstrukturen Dr. Henry Herper Otto-von-Guericke-Universität Magdeburg - WS 2012/13 Steuerstrukturen Steuerstrukturen Verzweigungen Alternativen abweisende nichtabweisende

Mehr

Praktikum Ingenieurinformatik. Termin 2. Verzweigungen (if-else), printf und scanf, while-schleife

Praktikum Ingenieurinformatik. Termin 2. Verzweigungen (if-else), printf und scanf, while-schleife Praktikum Ingenieurinformatik Termin 2 Verzweigungen (if-else), printf und scanf, while-schleife 1 1. Import/Export von Eclipse-Projekten 2. Verzweigungen (if-else-anweisung) 3. printf und scanf 4. Übungsaufgaben

Mehr

Die Programmiersprache C

Die Programmiersprache C Die Programmiersprache C höhere Programmiersprache (mit einigen Assembler-ähnlichen Konstrukten) gut verständliche Kommandos muss von Compiler in maschinenlesbaren Code (Binärdatei) übersetzt werden universell,

Mehr

Primzahlen und RSA-Verschlüsselung

Primzahlen und RSA-Verschlüsselung Primzahlen und RSA-Verschlüsselung Michael Fütterer und Jonathan Zachhuber 1 Einiges zu Primzahlen Ein paar Definitionen: Wir bezeichnen mit Z die Menge der positiven und negativen ganzen Zahlen, also

Mehr

Graphic Coding. Klausur. 9. Februar 2007. Kurs A

Graphic Coding. Klausur. 9. Februar 2007. Kurs A Graphic Coding Klausur 9. Februar 2007 Kurs A Name: Matrikelnummer: Hinweise - Es sind keine Hilfsmaterialien erlaubt. (Keine Bücher, Taschenrechner, Handys) - Sie haben zwei Stunden Zeit. - Insgesamt

Mehr

Fallunterscheidung: if-statement

Fallunterscheidung: if-statement Fallunterscheidung: if-statement A E 1 E 2 V 1 V 2 Syntax: if ( ausdruck ) Semantik: else anweisungsfolge_1 anweisungsfolge_2 1. Der ausdruck wird bewertet 2. Ergibt die Bewertung einen Wert ungleich 0

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Name, Vorname Matrikelnummer Probeklausur zur Vorlesung Einführung in die Programmierung WS 2008/09 Dauer: 2 Stunden Hinweise: Schreiben Sie Ihren Namen und Ihre Matrikelnummer auf dieses Deckblatt und

Mehr

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben.

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben. Aufgabe 1.30 : Schreibe ein Programm DM_in_Euro.java zur Umrechnung eines DM-Betrags in Euro unter Verwendung einer Konstanten für den Umrechnungsfaktor. Das Programm soll den DM-Betrag als Parameter verarbeiten.

Mehr

Einführung in die Welt der Microcontroller

Einführung in die Welt der Microcontroller Übersicht Microcontroller Schaltungen Sonstiges Einführung in die Welt der Microcontroller Übersicht Microcontroller Schaltungen Sonstiges Inhaltsverzeichnis 1 Übersicht Möglichkeiten Einsatz 2 Microcontroller

Mehr

Zeichen bei Zahlen entschlüsseln

Zeichen bei Zahlen entschlüsseln Zeichen bei Zahlen entschlüsseln In diesem Kapitel... Verwendung des Zahlenstrahls Absolut richtige Bestimmung von absoluten Werten Operationen bei Zahlen mit Vorzeichen: Addieren, Subtrahieren, Multiplizieren

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Testklausur Einführung in die Programmierung Probeklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList In

Mehr

Angewandte Mathematik und Programmierung

Angewandte Mathematik und Programmierung Angewandte Mathematik und Programmierung Einführung in das Konzept der objektorientierten Anwendungen zu mathematischen Rechnens SS2013 Inhalt Projekt Vorlesung: praktische Implementierung üben Ein und

Mehr

Microcontroller Kurs. 08.07.11 Microcontroller Kurs/Johannes Fuchs 1

Microcontroller Kurs. 08.07.11 Microcontroller Kurs/Johannes Fuchs 1 Microcontroller Kurs 08.07.11 Microcontroller Kurs/Johannes Fuchs 1 Was ist ein Microcontroller Wikipedia: A microcontroller (sometimes abbreviated µc, uc or MCU) is a small computer on a single integrated

Mehr

Programmierung von ATMEL AVR Mikroprozessoren am Beispiel des ATtiny13. Teil IV: Programmieren an Beispielen

Programmierung von ATMEL AVR Mikroprozessoren am Beispiel des ATtiny13. Teil IV: Programmieren an Beispielen Programmierung von ATMEL AVR Mikroprozessoren am Beispiel des ATtiny13 Eine Einführung in Aufbau, Funktionsweise, Programmierung und Nutzen von Mikroprozessoren Teil IV: Programmieren an Beispielen Die

Mehr

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang sysplus.ch outlook - mail-grundlagen Seite 1/8 Outlook Mail-Grundlagen Posteingang Es gibt verschiedene Möglichkeiten, um zum Posteingang zu gelangen. Man kann links im Outlook-Fenster auf die Schaltfläche

Mehr

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala Das Typsystem von Scala 1 Eigenschaften Das Typsystem von Scala ist statisch, implizit und sicher 2 Nichts Primitives Alles ist ein Objekt, es gibt keine primitiven Datentypen scala> 42.hashCode() res0:

Mehr

Dokumentation IBIS Monitor

Dokumentation IBIS Monitor Dokumentation IBIS Monitor Seite 1 von 16 11.01.06 Inhaltsverzeichnis 1. Allgemein 2. Installation und Programm starten 3. Programmkonfiguration 4. Aufzeichnung 4.1 Aufzeichnung mitschneiden 4.1.1 Inhalt

Mehr

Java Kurs für Anfänger Einheit 5 Methoden

Java Kurs für Anfänger Einheit 5 Methoden Java Kurs für Anfänger Einheit 5 Methoden Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 22. Juni 2009 Inhaltsverzeichnis Methoden

Mehr

Datenbanken Kapitel 2

Datenbanken Kapitel 2 Datenbanken Kapitel 2 1 Eine existierende Datenbank öffnen Eine Datenbank, die mit Microsoft Access erschaffen wurde, kann mit dem gleichen Programm auch wieder geladen werden: Die einfachste Methode ist,

Mehr

Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm

Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm Programmiersprachen Einführung in C Teil 2: Prof. Dr. int main (int argc, char *argv[]) int sum = 0; for (i = 0; i

Mehr

Proseminar C-Programmierung. Strukturen. Von Marcel Lebek

Proseminar C-Programmierung. Strukturen. Von Marcel Lebek Proseminar C-Programmierung Strukturen Von Marcel Lebek Index 1. Was sind Strukturen?...3 2. Padding 5 3. Vor- und Nachteile von Padding..8 4. Padding gering halten 9 5. Anwendungsgebiete von Strukturen.11

Mehr

Über die Status-Befehle kann die Peripherie der gesamten Hard- und Firmware abgefragt werden.

Über die Status-Befehle kann die Peripherie der gesamten Hard- und Firmware abgefragt werden. DOKUMENTATION SCHWABENPLAN MC-PROTOKOLL 1. EINLEITUNG Das Schwabenplan MC-Protokoll wurde entwickelt um jede Hauptplatine aus unserem Lieferprogramm mit einer Software zu verbinden. Die Programmiersprache

Mehr

Kurze Einführung in die Programmiersprache C++ und in Root

Kurze Einführung in die Programmiersprache C++ und in Root Kurze Einführung in die Programmiersprache C++ und in Root Statistik, Datenanalyse und Simulation; 31.10.2006 Inhalt 1 Einführung in die Programmiersprache C++ Allgemeines Variablen Funktionen 2 1 Einführung

Mehr

Übungen 19.01.2012 Programmieren 1 Felix Rohrer. Übungen

Übungen 19.01.2012 Programmieren 1 Felix Rohrer. Übungen Übungen if / else / else if... 2... 2 Aufgabe 2:... 2 Aufgabe 3:... 2 Aufgabe 4:... 2 Aufgabe 5:... 2 Aufgabe 6:... 2 Aufgabe 7:... 3 Aufgabe 8:... 3 Aufgabe 9:... 3 Aufgabe 10:... 3 switch... 4... 4 Aufgabe

Mehr

Anlegen eines Speicherbereichs mit DB, DW eleganter in Kombination mit EQU, Timer-Interrupt

Anlegen eines Speicherbereichs mit DB, DW eleganter in Kombination mit EQU, Timer-Interrupt Anlegen eines Speicherbereichs mit DB, DW eleganter in Kombination mit EQU, Timer-Interrupt AMPEL-Steuerung(en) Die Beschreibung und Programmierung der Ampel (vor allem Ampel_5) können sehr kompliziert

Mehr

Handbuch. Artologik EZ-Equip. Plug-in für EZbooking version 3.2. Artisan Global Software

Handbuch. Artologik EZ-Equip. Plug-in für EZbooking version 3.2. Artisan Global Software Artologik EZ-Equip Plug-in für EZbooking version 3.2 Artologik EZbooking und EZ-Equip EZbooking, Ihre webbasierte Software zum Reservieren von Räumen und Objekten, kann nun durch die Ergänzung um ein oder

Mehr

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung: Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Der Sourcecode wird an den entsprechenden Stellen im Programm wiederholt Programm wird lang

Mehr

Grundlagen der höheren Mathematik Einige Hinweise zum Lösen von Gleichungen

Grundlagen der höheren Mathematik Einige Hinweise zum Lösen von Gleichungen Grundlagen der höheren Mathematik Einige Hinweise zum Lösen von Gleichungen 1. Quadratische Gleichungen Quadratische Gleichungen lassen sich immer auf die sog. normierte Form x 2 + px + = 0 bringen, in

Mehr

M. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung

M. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung M. Graefenhan 2000-12-07 Aufgabe Lösungsweg Übungen zu C Blatt 3 Musterlösung Schreiben Sie ein Programm, das die Häufigkeit von Zeichen in einem eingelesenen String feststellt. Benutzen Sie dazu ein zweidimensionales

Mehr

Interrupts. Funktionsprinzip. Funktionsprinzip. Beispiel in C

Interrupts. Funktionsprinzip. Funktionsprinzip. Beispiel in C Interrupts Funktionsprinzip Interrupts bei ATmega128 Beispiel in C Funktionsprinzip 1 Was ist ein Interrupt? C muss auf Ereignisse reagieren können, z.b.: - jemand drückt eine Taste - USART hat Daten empfangen

Mehr

Informationsblatt Induktionsbeweis

Informationsblatt Induktionsbeweis Sommer 015 Informationsblatt Induktionsbeweis 31. März 015 Motivation Die vollständige Induktion ist ein wichtiges Beweisverfahren in der Informatik. Sie wird häufig dazu gebraucht, um mathematische Formeln

Mehr

Anleitung über den Umgang mit Schildern

Anleitung über den Umgang mit Schildern Anleitung über den Umgang mit Schildern -Vorwort -Wo bekommt man Schilder? -Wo und wie speichert man die Schilder? -Wie füge ich die Schilder in meinen Track ein? -Welche Bauteile kann man noch für Schilder

Mehr

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 16

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 16 Kapitel 5 Arithmetische Operatoren Seite 1 von 16 Arithmetische Operatoren - Man unterscheidet unäre und binäre Operatoren. - Je nachdem, ob sie auf einen Operanden wirken, oder eine Verknüpfung zweier

Mehr

Modellierung und Programmierung 1

Modellierung und Programmierung 1 Modellierung und Programmierung 1 Prof. Dr. Sonja Prohaska Computational EvoDevo Group Institut für Informatik Universität Leipzig 19. November 2015 Gültigkeitsbereich (Scope) von Variablen { int m; {

Mehr

2A Basistechniken: Weitere Aufgaben

2A Basistechniken: Weitere Aufgaben 2A Basistechniken: Weitere Aufgaben 2A.3 Programmierung unter UNIX/Linux 1. Gegeben sind einige Ausschnitte von C-Programmen, die unter UNIX/Linux ausgeführt werden sollen. Beantworten Sie die zugehörigen

Mehr

Windows. Workshop Internet-Explorer: Arbeiten mit Favoriten, Teil 1

Windows. Workshop Internet-Explorer: Arbeiten mit Favoriten, Teil 1 Workshop Internet-Explorer: Arbeiten mit Favoriten, Teil 1 Wenn der Name nicht gerade www.buch.de oder www.bmw.de heißt, sind Internetadressen oft schwer zu merken Deshalb ist es sinnvoll, die Adressen

Mehr

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Java Kurs für Anfänger Einheit 4 Klassen und Objekte Java Kurs für Anfänger Einheit 4 Klassen und Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 13. Juni 2009 Inhaltsverzeichnis klasse

Mehr

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag Ludwig-Maximilians-Universität München WS 2015/16 Institut für Informatik Übungsblatt 9 Prof. Dr. R. Hennicker, A. Klarl Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung:

Mehr

b) Gegeben sei folgende Enumeration: enum SPRACHE {Deutsch, Englisch, Russisch};

b) Gegeben sei folgende Enumeration: enum SPRACHE {Deutsch, Englisch, Russisch}; Aufgabe 1: (15 Punkte) Bei den Multiple-Choice-Fragen ist jeweils nur eine richtige Antwort eindeutig anzukreuzen. Auf die richtige Antwort gibt es die angegebene Punktzahl. Wollen Sie eine Multiple-Choice-Antwort

Mehr

Grundlagen. Kapitel 1

Grundlagen. Kapitel 1 Grundlagen Dieses Kapitel umfasst grundlegende Fragen und Aufgaben zur Erstellung von C++-Programmen. Hierzu zählen auch das Inkludieren von Header-Dateien Eine Header-Datei beinhaltet Informationen, die

Mehr

Computeranwendung und Programmierung (CuP)

Computeranwendung und Programmierung (CuP) Computeranwendung und Programmierung (CuP) VO: Peter Auer (Informationstechnologie) UE: Norbert Seifter (Angewandet Mathematik) Organisatorisches (Vorlesung) Vorlesungszeiten Montag 11:15 12:45 Freitag

Mehr

Kontrollstrukturen und Funktionen in C

Kontrollstrukturen und Funktionen in C Kontrollstrukturen und Funktionen in C Lernziele: Vertiefen der Kenntnisse über Operatoren, Kontrollstrukturen und die Verwendung von Funktionen. Aufgabe 1: Quickies: Datentypen in C a) Was sind die elementaren

Mehr

Ingenieurinformatik Diplom-FA (C-Programmierung)

Ingenieurinformatik Diplom-FA (C-Programmierung) Hochschule München, FK 03 WS 2014/15 Ingenieurinformatik Diplom-FA (C-Programmierung) Zulassung geprüft: (Grundlagenteil) Die Prüfung ist nur dann gültig, wenn Sie die erforderliche Zulassungsvoraussetzung

Mehr

Makros sind Textersetzungen, welche vom Präprozessor aufgelöst werden. Dies Passiert bevor der Compiler die Datein verarbeitet.

Makros sind Textersetzungen, welche vom Präprozessor aufgelöst werden. Dies Passiert bevor der Compiler die Datein verarbeitet. U4 4. Übung U4 4. Übung Besprechung Aufgabe 2 Makros Register I/O-Ports U4.1 U4-1 Makros U4-1 Makros Makros sind Textersetzungen, welche vom Präprozessor aufgelöst werden. Dies Passiert bevor der Compiler

Mehr

Menü Macro. WinIBW2-Macros unter Windows7? Macros aufnehmen

Menü Macro. WinIBW2-Macros unter Windows7? Macros aufnehmen Menü Macro WinIBW2-Macros unter Windows7?... 1 Macros aufnehmen... 1 Menübefehle und Schaltflächen in Macros verwenden... 4 Macros bearbeiten... 4 Macros löschen... 5 Macro-Dateien... 5 Macros importieren...

Mehr

Charakteristikum des Gutachtenstils: Es wird mit einer Frage begonnen, sodann werden die Voraussetzungen Schritt für Schritt aufgezeigt und erörtert.

Charakteristikum des Gutachtenstils: Es wird mit einer Frage begonnen, sodann werden die Voraussetzungen Schritt für Schritt aufgezeigt und erörtert. Der Gutachtenstil: Charakteristikum des Gutachtenstils: Es wird mit einer Frage begonnen, sodann werden die Voraussetzungen Schritt für Schritt aufgezeigt und erörtert. Das Ergebnis steht am Schluß. Charakteristikum

Mehr

Programmieren in C. Felder, Schleifen und Fließkommaarithmetik. Prof. Dr. Nikolaus Wulff

Programmieren in C. Felder, Schleifen und Fließkommaarithmetik. Prof. Dr. Nikolaus Wulff Programmieren in C Felder, Schleifen und Fließkommaarithmetik Prof. Dr. Nikolaus Wulff Addition von Zahlen 1 2 3 4 5 #include int main() { int x,y,z,sum; x = 1; y = 2; z = 4; sum = x + y + z;

Mehr

Modul 122 VBA Scribt.docx

Modul 122 VBA Scribt.docx Modul 122 VBA-Scribt 1/5 1 Entwicklungsumgebung - ALT + F11 VBA-Entwicklungsumgebung öffnen 2 Prozeduren (Sub-Prozeduren) Eine Prozedur besteht aus folgenden Bestandteilen: [Private Public] Sub subname([byval

Mehr

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 18

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 18 Kapitel 3 Datentypen und Variablen Seite 1 von 18 Datentypen - Einführung - Für jede Variable muss ein Datentyp festgelegt werden. - Hierdurch werden die Wertemenge und die verwendbaren Operatoren festgelegt.

Mehr

C++ Grundlagen. ++ bedeutet Erweiterung zum Ansi C Standard. Hier wird eine Funktion eingeleitet

C++ Grundlagen. ++ bedeutet Erweiterung zum Ansi C Standard. Hier wird eine Funktion eingeleitet C++ Grundlagen ++ bedeutet Erweiterung zum Ansi C Standard Hier wird eine Funktion eingeleitet Aufbau: In dieser Datei stehen die Befehle, die gestartet werden, wenn das Programm gestartet wird Int main()

Mehr

Künstliches binäres Neuron

Künstliches binäres Neuron Künstliches binäres Neuron G.Döben-Henisch Fachbereich Informatik und Ingenieurwissenschaften FH Frankfurt am Main University of Applied Sciences D-60318 Frankfurt am Main Germany Email: doeben at fb2.fh-frankfurt.de

Mehr

P r o g r a m m a b l a u f s t e u e r u n g

P r o g r a m m a b l a u f s t e u e r u n g Jede Programmiersprache braucht Konstrukte zur Steuerung des Programmablaufs. Grundsätzlich unterscheiden wir Verzweigungen und Schleifen. Schleifen dienen dazu, bestimmte Anweisungen wiederholt auszuführen,

Mehr

Entwurf von Algorithmen - Kontrollstrukturen

Entwurf von Algorithmen - Kontrollstrukturen Entwurf von Algorithmen - Kontrollstrukturen Eine wichtige Phase in der Entwicklung von Computerprogrammen ist der Entwurf von Algorithmen. Dieser Arbeitsschritt vor dem Schreiben des Programmes in einer

Mehr

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2015/2016 Wirtschaftsingenieur Bachelor 5. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2015/2016 Wirtschaftsingenieur Bachelor 5. Aufgabe Datenstruktur, Dateieingabe und -ausgabe Aufgabenstellung Für eine Hausverwaltung sollen für maximal 500 Wohnungen Informationen gespeichert werden, die alle nach der gleichen Weise wie folgt strukturiert sind: Art Baujahr Wohnung Whnginfo Nebenkosten

Mehr

Klausur Programmieren in C Sommersemester 2007 Dipl. Biol. Franz Schenk 13. April 2007, 11.15-13.00 Uhr Bearbeitungszeit: 105 Minuten

Klausur Programmieren in C Sommersemester 2007 Dipl. Biol. Franz Schenk 13. April 2007, 11.15-13.00 Uhr Bearbeitungszeit: 105 Minuten Klausur Programmieren in C Sommersemester 2007 Dipl. Biol. Franz Schenk 13. April 2007, 11.15-13.00 Uhr Bearbeitungszeit: 105 Minuten Vorname: Nachname: Matrikelnummer: Legen Sie zu Beginn Ihren Studentenausweis

Mehr

S7-Hantierungsbausteine für R355, R6000 und R2700

S7-Hantierungsbausteine für R355, R6000 und R2700 S7-Hantierungsbausteine für R355, R6000 und R2700 1. FB90, Zyklus_R/W Dieser Baustein dient zur zentralen Kommunikation zwischen Anwenderprogramm und dem Modul R355 sowie den Geräten R6000 und R2700 über

Mehr

Schmitt, Günter (1996): Fortran 90 Kurs technisch orientiert, R. Oldenbourg Verlag, München

Schmitt, Günter (1996): Fortran 90 Kurs technisch orientiert, R. Oldenbourg Verlag, München MANUEL KALLWEIT & FABIAN KINDERMANN Literaturempfehlung: Vorlesungsskript von Heidrun Kolinsky zu FORTRAN 90/95: http://www.rz.uni-bayreuth.de/lehre/fortran90/vorlesung/index.html Schmitt, Günter (1996):

Mehr

Erstellen von x-y-diagrammen in OpenOffice.calc

Erstellen von x-y-diagrammen in OpenOffice.calc Erstellen von x-y-diagrammen in OpenOffice.calc In dieser kleinen Anleitung geht es nur darum, aus einer bestehenden Tabelle ein x-y-diagramm zu erzeugen. D.h. es müssen in der Tabelle mindestens zwei

Mehr

Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss

Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss Systeme 1 Kapitel 6 Nebenläufigkeit und wechselseitiger Ausschluss Threads Die Adressräume verschiedener Prozesse sind getrennt und geschützt gegen den Zugriff anderer Prozesse. Threads sind leichtgewichtige

Mehr

Objektorientierte Programmierung mit C++ Vector und List

Objektorientierte Programmierung mit C++ Vector und List Vector und List Ziel, Inhalt Wir lernen die Klassen vector und list aus der Standard-C++ Library kennen und anwenden. In einer Übung wenden wir diese Klassen an um einen Medienshop (CD s und Bücher) zu

Mehr

Stepperfocuser 2.0 mit Bootloader

Stepperfocuser 2.0 mit Bootloader Stepperfocuser 2.0 mit Bootloader Info Für den Stepperfocuser 2.0 gibt es einen Bootloader. Dieser ermöglicht es, die Firmware zu aktualisieren ohne dass man ein spezielles Programmiergerät benötigt. Die

Mehr

Grundbegriffe der Informatik

Grundbegriffe der Informatik Grundbegriffe der Informatik Einheit 15: Reguläre Ausdrücke und rechtslineare Grammatiken Thomas Worsch Universität Karlsruhe, Fakultät für Informatik Wintersemester 2008/2009 1/25 Was kann man mit endlichen

Mehr

AutoCAD 2007 - Dienstprogramm zur Lizenzübertragung

AutoCAD 2007 - Dienstprogramm zur Lizenzübertragung AutoCAD 2007 - Dienstprogramm zur Lizenzübertragung Problem: Um AutoCAD abwechselnd auf mehreren Rechnern einsetzen zu können konnte man bis AutoCAD 2000 einfach den Dongle umstecken. Seit AutoCAD 2000i

Mehr