Inhalt. Übungen zu Systemnahe Programmierung in C (SPiC) Inhalt. Globale Variablen

Ähnliche Dokumente
Übungen zu Systemnahe Programmierung in C (SPiC)

Übungen zu Systemnahe Programmierung in C (SPiC)

Inhalt. Übungen zu Systemnahe Programmierung in C (SPiC) Schnittstellenbeschreibung. Inhalt

Inhalt. Aufgabe 4: LED-Modul Hinweise Testen des Moduls Sommersemester 2015

Sebastian Maier (Lehrstuhl Informatik 4) Übung 4. Sommersemester 2017

Wiederholung: Zugriff auf AVR-Prozessor-Register. Aufgabe 3: 7seg-Modul der SPiCboard-Bibliothek

U3-1 Register beim AVR-μC. U3 3. Übung. U3-2 I/O-Ports des AVR-μC. 1 Überblick. 2 Makros für Register-Zugriffe. 1 Überblick

Wiederholung: Zugriff auf AVR-Prozessor-Register. Aufgabe 3: 7seg-Modul der SPiCboard-Bibliothek

Wiederholung: Zugriff auf AVR-Prozessor-Register

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

Übungen zu Systemnahe Programmierung in C (SPiC) Wintersemester 2017/18

U2-1 Register beim AVR- C. U2-2 I/O-Ports des AVR- C. 1 Überblick. 2 Makros für Register-Zugriffe. 1 Überblick

Übungen zu Grundlagen der systemnahen Programmierung in C (GSPiC) im Wintersemester 2017/18

Übungen zu Systemnahe Programmierung in C (SPiC) Wintersemester 2018/19

U5-2 Register beim AVR-µC

Inhalt. Übungen zu Systemnahe Programmierung in C (SPiC) Inhalt

GdI2 - Systemnahe Programmierung in C Übungen Jürgen Kleinöder Universität Erlangen-Nürnberg Informatik 4, 2006 U4.fm

U3 3. Übung U3 3. Übung. Systemnahe Programmierung in C Übungen Moritz Strübe Universität Erlangen-Nürnberg Informatik 4, 2009 U3.fm

Besprechung Aufgabe 1. Pointer. Register und Ports. SPiC - Ü U3.1

Wer möchte, kann sein Programm auch auf echter Hardware testen

Zeiger vom Typ (void *) sind am besten für Zeigerarithmetik geeignet, da sie kompatibel zu jedem Zeigertyp sind.

myavr Programmierung in C

Übungen zu Systemnahe Programmierung in C (SPiC)

IR NEC Empfänger mit 4x7 LED Anzeige (ATtiny2313)

Inhalt. Übungen zu Systemnahe Programmierung in C (SPiC) Tafelübungen. Inhalt. Organisatorisches. Entwicklungsumgebung

Übungen zu Systemnahe Programmierung in C (SPiC)

U4 Grundlagen der C-Programmierung

Arduino für FunkAmateure

Parallel-IO. Ports am ATmega128

Ansteuerung eines LCD-Screens

d) Was passiert, wenn das folgende Programmstück übersetzt und ausgeführt

Inhalt. Übungen zu Systemnahe Programmierung in C (SPiC) Inhalt. Tafelübungen. Organisatorisches. Entwicklungsumgebung

U4 Grundlagen der C-Programmierung

Übungen zu Systemnahe Programmierung in C (SPiC) Inhalt. Moritz Strübe, Rainer Müller (Lehrstuhl Informatik 4) Sommersemester 2014

Inhalt. Übungen zu Systemnahe Programmierung in C (SPiC) Implementierung von Interruptbehandlungen. Interrupts

Die Grösse der primitiven Datentypen in C ist architekturabhängig

Systemnahe Programmierung in C Übungen Moritz Strübe, Michael Stilkerich Universität Erlangen-Nürnberg Informatik 4, 2010 U2.fm

Bisher hatten immer nur als Ausgänge geschaltet und hierfür folgende Befehle benutzt:

Übungen zu Systemnahe Programmierung in C (SPiC)

U3 Grundlagen der AVR-Programmierung

V cc. 1 k. 7 mal 150 Ohm

f) Was versteht man beim Zugriff auf I/O-Register unter dem Begriff "Memory-mapped"?

Grundlagen der Informatik 2 Modul Systemnahe Programmierung in C (SPiC) Klausur am 25. Juli 2008

Mikrocontrollerplatine vorbereiten

Zeiger vom Typ (void *) sind am besten für Zeigerarithmetik geeignet, da sie kompatibel zu jedem Zeigertyp sind.

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 29

Übungen zu Systemnahe Programmierung in C (SPiC) Inhalt. Sebastian Maier, Heiko Janker (Lehrstuhl Informatik 4) Übung 1. Wintersemester 2015/2016

Mikrocontroller. Projekt. August update: 27. August 2017 um 15:20

AVR Ein/Ausgabe. Inhaltsverzeichnis

Lotto. eine Projektarbeit in DVT. von Sven Schwab

Serielle Schnittstelle, erstes Testprogramm (a)

Speicherklassen (1) Lokale Variablen

Mikrocontroller - Schnelleinstieg

Microcontroller Kurs Programmieren Microcontroller Kurs/Johannes Fuchs 1

C++ mit dem Arduino (Uno und Mega2560)

Grundlagen der Systemnahen Programmierung in C (GSPiC)

Microcontroller Praktikum SS2010 Dipl. Ing. R. Reisch

C++ mit dem Arduino (Uno und Mega2560)

Erste Gehversuche mit ARDUINO (Teil 3) (DL6OAA) Die 7-Segmentanzeige (1-stellig)

Die Software zum Unser kleiner Computer

Übungen zu Systemnahe Programmierung in C (SPiC) Inhalt. Moritz Strübe, Rainer Müller (Lehrstuhl Informatik 4) Sommersemester 2014

C.1 Serielle Schnittstelle, erstes Testprogramm (a)

Mikrocontroller. Programmierung in C. Jan Unger

Übungen zu Systemnahe Programmierung in C (SPiC) Inhalt. Peter Wägemann, Sebastian Maier, Heiko Janker (Lehrstuhl Informatik 4) Sommersemester 2015

Systemnahe Programmierung in C (SPiC)

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

8.3 Taster am µcontroller

Stopp-Uhr. Erstellen Sie ein Programm (in Zweier- bzw. Dreier-Gruppen), welches folgende Bedingungen erfüllt:

Einführung in die Programmiersprache C

d) Welche Aussage zu Zeigern ist richtig? Beim Rechnen mit Zeigern wird immer der Typ des Zeigers beachtet.

U2 Fortgeschrittene AVR-Programmierung. U2-1 Externe Interrupts des AVR-μC. 1 Flanken-/Pegel-Steuerung. 1 Flanken-/Pegel-Steuerung (2) 2 Maskieren

Für den Anschluss dieses und anderer Module dieser Serie an das myavr Board steht ein Adapter zur Verfügung.

Projektarbeit in DVT auf dem Entwicklerboard

Grundlagen der Objektorientierung :

d) Welche Aussage zu volatile ist richtig?

HTL St.Pölten. EL Autor: Kuran. Mikrocontrollerprogrammierung Teil 1:

Programmierkurs C++ Kapitel 6 Module Seite 1

Ampelschaltung mit dem Raspberry Pi 3 Model B. Von Stefan Ossenbrink & Marcel Gebing

Aufgaben zur Attiny-Platine

Übungen zu Grundlagen der systemnahen Programmierung in C (GSPiC) im Sommersemester 2018

Versuch 2, LPC11U24 - GPIO

Inhalt. Übungen zu Systemnahe Programmierung in C (SPiC) Tafelübungen. Aufgaben

U5 Fortgeschrittene AVR-Programmierung

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

Bit Operationen. InE1 M. Thaler, Office TG ZHAW, M. Thaler, K. Rege, G. Burkert

Einführung in die Programmierung von Mikrocontrollern mit C/C++

4 Formelsammlung C/C++

Einführung in die Programmiersprache C

#include "C:\Users\media\Desktop\Harri\Technik\Elektronik\Projekte\Stiftuhr\Servotest\servotest\servotest.h"

C++ Klassen, Vererbung. Philipp Lucas. Sebastian Hack. Wintersemester 2008/09. saarland.

Repetitorium Informatik (Java)

AVR-8-bit-Mikrocontroller Gruppe AVR-C-Projekte Teil AVR_PB_LED

Überblick: Teil C Systemnahe Softwareentwicklung

U5 Fortgeschrittene AVR-Programmierung U5 Fortgeschrittene AVR-Programmierung. Synchronisation mit Unterbrechungsbehandlungen

BOOTLOADER für AVR-Entwicklungsmodule

Transkript:

Übungen zu Systemnahe Programmierung in C (SPiC) Peter Wägemann, Heiko Janker, Moritz Strübe, Rainer Müller () Wintersemester 24/25 volatile Verwendung Module Hinweise zur Aufgabe Übungen zu SPiC (WS 24/5) 2 6 volatile Verwendung int event_counter; 2 int num_leds; 3... 4 void main(void) { 5... 6 } Sichtbarkeit/Gültigkeit einschränken soweit wie möglich Globale Variable lokale Variable in der main() Globale static Variablen: Sichtbarkeit auf Modul beschränken Übungen zu SPiC (WS 24/5) 2 6 Übungen zu SPiC (WS 24/5) 3 6

volatile Verwendung static volatile int event_counter; 2... 3 void main(void) { 4 int num_leds = ; 5... 6 } 7 volatile verwenden um Optimierungen des Compilers zu verhindern Nur bei nebenläufigen Ausführungsfäden notwendig Wert aus Register wird in den Speicher zurück geschrieben #define PD3 3 2 void f(); 3 typedef enum { BUTTON = 4, BUTTON = 8 4 } BUTTON; 5 #define MAX_COUNTER 9 6... 7 void main(void) { 8... 9 PORTB = ( << PB3); // nicht ( << 3)... BUTTONEVENT old, new; // nicht uint8_t old, new; 2... 3 // Deklaration: BUTTONEVENT sb_button_getstate(button btn); 4 old = sb_button_getstate(button);//nicht sb_button_getstate(4) 5... 6 alarmcallback_t my_callback = f; 7... 8 } Vordefinierte Typen verwenden Explizite Zahlenwerte nur verwenden wenn es notwendig ist Übungen zu SPiC (WS 24/5) 4 6 Übungen zu SPiC (WS 24/5) 5 6 Übersicht & Beispiel: & Übungen zu SPiC (WS 24/5) 5 6 Übungen zu SPiC (WS 24/5) 6 6

Beispiel: uint8_t x = x9d; x <<= 2; x >>= 2; Setzen von Bits ( << ) ( << 3) ( << 3) ( << ) Module Hinweise zur Aufgabe Achtung! Bei signed-variablen ist das >>-Verhalten nicht % definiert. Im Normalfall(!) werden bei negativen Werten er geshiftet. Übungen zu SPiC (WS 24/5) 7 6 Schnittstellenbeschreibung Übungen zu SPiC (WS 24/5) 7 6 Erstellen einer.h-datei (Konvention: gleicher Name wie.c-datei) 5 6 7 8 9 2 Vorsicht: flacher Namensraum Wahl möglichst eindeutiger Namen Übungen zu SPiC (WS 24/5) 8 6 2) D LED (Yellow, PC) Stromversorgung LED 2 (Green, PC) LED 3 (Blue, PC6) LED 4 (Red, PC7) LED 5 (Yellow, PA7) 7 Segment Anzeigen LED 6 (Green, PA6) Einer (Connector PD) LED 7 (Blue, PA5) Zehner (Connector PD) PB4 Potentiometer (POTI) an ADC ISP Anschluss Fotowiderstand an ADC Übungen zu SPiC (WS 24/5) (active low) PB2 PB6 durch Definition und Abfrage eines Präprozessormakros Konvention: das Makro hat den Namen der.h-datei,. ersetzt durch _ Der wird nur eingebunden, wenn das Makro noch nicht definiert ist LED (Red, PD7) PB5 Mehrfachinkludierung (evtl. Zyklen!) vermeiden Include-Guard LED Reihe (active low) PB3 4 JTAG Anschluss PB 3 # ifndef LED_H # define LED_H /* fixed - width Datentypen inkludieren ( im Header verwendet ) */ # include < stdint.h > /* LED - Typ */ typedef enum { RED =, YELLOW =, GREEN =2,... } LED ; /* Funktion zum Aktivieren einer bestimmten LED */ uint8_t sb_led_on ( LED led ); /* Irgendeine Variable */ extern uint8_t einevariable ;... # endif T (e ast nt er pr el lt, P 2 T (p ast re er llt,p D 3) PB 9 6

- Aufgabe Das LED-Modul der SPiCboard-Bibliothek selbst implementieren Gleiches Verhalten wie das Original Beschreibung: http://www4.cs.fau.de/lehre/ws4/v_spic/uebung/doc Das eigene Modul dann mit einem Testprogramm linken Andere Teile der Bibliothek können für den Test benutzt werden LEDs des SPiCboard Die Anschlüsse und Namen der einzelnen LEDs können dem Übersichtsbildchen entnommen werden Alle LEDs sind active low, d.h. leuchten wenn ein Low-Pegel auf dem Pin angelegt wird. PD7 = Port D, Pin 7 Jeder I/O-Port des AVR-µC wird durch drei 8-bit Register gesteuert: Datenrichtungsregister (DDRx = data direction register) Datenregister (PORTx = port output register) Port Eingabe Register (PINx = port input register, nur-lesbar) Jedem Anschluss-Pin ist ein Bit in jedem der 3 Register zugeordnet Übungen zu SPiC (WS 24/5) 6 I/O-Port-Register DDRx: hier konfiguriert man einen Pin i von Port x als Ein- oder Ausgang Bit i = Pin i als Ausgang verwenden Bit i = Pin i als Eingang verwenden PORTx: Auswirkung abhängig von DDRx: ist Pin i als Ausgang konfiguriert, so steuert Bit i im PORTx Register ob am Pin i ein high- oder ein low-pegel erzeugt werden soll Bit i = high-pegel an Pin i Bit i = low-pegel an Pin i ist Pin i als Eingang konfiguriert, so kann man einen internen pull-up-widerstand aktivieren Bit i = pull-up-widerstand an Pin i (Pegel wird auf high gezogen) Bit i = Pin i als tri-state konfiguriert PINx: Bit i gibt den aktuellen Wert des Pin i von Port x an (nur lesbar) Übungen zu SPiC (WS 24/5) 6 Beispiel: Initialisierung eines Ports Pin 3 von Port B (PB3) als Ausgang konfigurieren und auf Vcc schalten: DDRB = ( << PB3);/* =x8; PB3 als Ausgang nutzen... */ 2 PORTB = ( << PB3);/*...und auf (=high) setzen */ Pin 2 von Port D (PD2) als Eingang nutzen, pull-up-widerstand aktivieren und prüfen ob ein low-pegel anliegt: DDRD &= ~( << 2);/* PD2 als Eingang nutzen... */ 2 PORTD = ( << 2);/* pull-up-widerstand aktivieren*/ 3 if ( (PIND & ( << 2)) == ) { /* den Zustand auslesen */ 4 /* ein low Pegel liegt an, der Taster ist gedrückt */ 5 } Die Initialisierung der Hardware wird in der Regel einmalig zum Programmstart durchgeführt Übungen zu SPiC (WS 24/5) 2 6 Übungen zu SPiC (WS 24/5) 3 6

Funktionsweise des Linkers Initialisierung eines Moduls test.c gcc test.o 7seg.c gcc 7seg.o libspicboard 7seg.h timer.h adc.h ld aufgabe4.elf libspicboard.a 7seg.o led.o timer.o adc.o button.o Aus der elf-datei wird automatisch die flashbare hex Datei generiert. Module sind oft zu initialisieren (z.b. Portkonfiguration) z.b. in Java mit Klassenkonstruktoren möglich C kennt kein solches Konzept Workaround: Modul muss bei erstem Aufruf einer seiner Funktionen ggf. die Initialisierung durchführen Reihenfolge der Initialisierung beachten Mehrfachinitialisierung vermeiden static uint8_ t initdone = ; 2 static void init ( void ) {... } 3 void mod_func ( void ) { 4 if( initdone == ) { 5 initdone = ; 6 init (); 7 } 8... Übungen zu SPiC (WS 24/5) 4 6 Übungen zu SPiC (WS 24/5) 5 6 AVR-Studio Projekteinstellungen Projekt wie gehabt anlegen Initiale Quelldatei: test.c Dann weitere Quelldatei led.c hinzufügen Wenn nun übersetzt wird, werden die Funktionen aus dem eigenen LED-Modul verwendet Andere Teile der Bibliothek werden nach Bedarf hinzugebunden Temporäres deaktivieren zum Test der Originalfunktiononen: #if 2... 3 # endif Übungen zu SPiC (WS 24/5) 6 6