text.skipToContent text.skipToNavigation
background-image

Multitasking mit AVR RISC-Controllern Lösungsansätze und praktische Beispiele für Multitasking-Programme von Forgber, Ernst (eBook)

  • Erscheinungsdatum: 24.11.2014
  • Verlag: Franzis
eBook (ePUB)
39,99 €
inkl. gesetzl. MwSt.
Sofort per Download lieferbar

Online verfügbar

Multitasking mit AVR RISC-Controllern

Das Buch stellt anhand praktischer Beispiele für die Atmel-8-Bit-Controller mehrere Ansätze für Multitasking-Programme vor. Ausgehend von der Lösung mit einer einfachen Programmschleife werden Multitasking- und Echtzeitkonzepte erläutert - bis hin zur Entwicklung eines echtzeitfähigen, prioritätsgesteuerten, präemptiven Tasking-Systems. Die Ausführungen der verschiedenen Konzepte erfolgen anhand durchgehender Beispiele. Dabei wird zunächst immer die grundlegende Idee vorgestellt, die dann mithilfe der praktischen Beispielen konkretisiert und in einem anschließenden Blick auf die Details vertieft wird. Aufbau des Buchs: Multitasking, Kontext, Real-Time & Co. Begriffliche Erklärungen und grundlegende Mechanismen. Experimentierumgebung Beschreibung der Hard- und Software. AVR-Controller in C programmieren Besonderheiten bei der Programmierung von AVR-Controllern. Multitasking, die Erste: Die Minimalversion Klassischer Ansatz zum Multitasking unter komplettem Verzicht auf einen Scheduler und dem Versuch, alles über Interrupts und eine große Programmschleife zu realisieren. Betrachtung verschiedener Scheduler mit wachsender Komplexität in Theorie und Praxis. Multitasking, die Zweite: Ein Scheduler im Eigenbau Darstellung der Funktionsweise eines einfachen prioritätsgesteuerten Schedulers für zyklische Funktionen. Multitasking, die Dritte: Kooperation ist gefragt Zeigt die Funktionsweise eines kooperativen Schedulers auf der Basis von Dunkels' Protothreads. Multitasking, die Vierte: Präemptives Tasking Vorstellung eines vollständig prioritätsgesteuerten RTOS-Schedulers mit Präemption.

Prof. Dr. Ernst Forgber lehrt an der Hochschule Hannover an der Fakultät Elektro- und Informationstechnik. Er arbeitet auf den Gebieten Software-Technik, Echtzeitsysteme und Entwurf digitaler Schaltungen mit VHDL.

Produktinformationen

    Format: ePUB
    Kopierschutz: watermark
    Seitenzahl: 260
    Erscheinungsdatum: 24.11.2014
    Sprache: Deutsch
    ISBN: 9783645270557
    Verlag: Franzis
    Größe: 4211 kBytes
Weiterlesen weniger lesen

Multitasking mit AVR RISC-Controllern

3 AVR-Controller in C programmieren

Bei der Programmierung der AVR-Controller in C sind einige Besonderheiten gegenüber einem PC-Programm zu beachten. Zum einen gibt es in der Regel keine Standardeingabe und -ausgabe, d.h., Funktionen wie printf() und scanf() entfallen. Zum anderen will man die digitalen Ein-/Ausgabesignale (Ports) des Prozessors nutzen, um externe Hardware anzusteuern und auszulesen.

3.1 Digitale Ein- und Ausgaben

Die AVR-Controller besitzen verschiedene 8 Bit breite I/O-Register (Ports), auf denen digitale Signale ausgegeben und eingelesen werden können. Die Port-Pins lassen sich unabhängig voneinander benutzen. Dazu muss man zuvor für jeden Pin die Datenrichtung angeben, indem man das zugeordnete Data Direction Register entsprechend setzt.

Direkt nach dem Einschalten der Betriebsspannung sind alle Register des Prozessors gelöscht, d.h., sie enthalten den Wert 0 . Wird ein Bit im Data Direction Register auf 1 gesetzt, ist damit der entsprechende Port-Pin als Ausgang konfiguriert.

Der ATmega8 besitzt die Ports B, C und D, deren Pins meist mehrere Funktionen haben. Im folgenden Beispielprogramm wird ein Taster ausgelesen, der mit Port D, Pin 4 (kurz: pd4 ) verbunden ist. Bei gedrücktem Taster wird eine LED eingeschaltet, die an Port D, Pin 5 ( pd5 ) angeschlossen ist. Die restlichen I/O-Pins bleiben ungenutzt, es ist also nur das Data Direction Register für Port D, Pin 5 auf 1 ( DDRD = (1

#define AN 1

#define AUS 0

#define set_bit(sfr,bit) sfr = (1<<(bit))

#define clear_bit(sfr,bit) sfr &= ~(1<<(bit))

/ -------------------------------------------------- /

// function prototypes

/ -------------------------------------------------- /

void _initPortDirections(void);

uint8_t _Taster_T3_pressed(void);

void _setLED1(uint8_t val);

/ -------------------------------------------------- /

int main(void)

{ _initPortDirections();

while (1) // Endlosschleife, Atmega kehrt nie zurueck...

{ if(_Taster_T3_pressed())

_setLED1(AN);

else

_setLED1(AUS);

}

return 0;

}

/ !



@par Beschreibung:

PORT-Richtungen einstellen

/

Weiterlesen weniger lesen

Kundenbewertungen