mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik RTOS auf dem PIC


Autor: Stephanw (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe mir neulich ein PIC-Entwicklungsboard zusammengefummelt mit
einem PIC18F458, RS232, CAN und nem T6963 Grafikdisplay.

Ich möchte mich jetzt ganz gerne an die Thematik RTOS rantasten. Wer
hat schon erfahrungen damit und kann mir was empfehlen?

Gruß Stephan

Autor: Gerhard Gunzelmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo Stephan

wozu brauchst Du denn ein RTOS ? Schreib Deine zeitkritischen Aufgaben
mit Interrupt, dann hast Dein Realtime-System. Oder beschreib etwas
näher, was der klein Müppe alles tun soll.


Gerhard

Autor: Stephanw (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Gerhard,

mir geht es in erster Linie nicht um Zeitkritische Aufgaben, sondern
ich möchte mich nur in die Thematik Betriebssysteme einarbeiten.
Für ein späteres Projekt (Auto-Bordcomputer) möchte ich in diesem
Bereich fit sein, da das RTOS ja auch erlaubt, sein Programm in mehrere
separate Tasks zu zerlegen.

Mfg Stephan

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"RS232, CAN und nem T6963 Grafikdisplay"

Hast Du denn das alles schon richtig zum Laufen gebracht.

Vorher würde ich nicht mit RTOS anfangen, d.h. dazu sollte man schon
einige Programmiererfahrungen gemacht haben.


Allerdings ist der PIC für ein RTOS äüßerst ungünstig (segmentierter
RAM, Hardwarestack), würde daher bezweifeln, daß es überhaupt eins
gibt.

RTOS habe ich bisher nur für den 8015 oder AVR gesehen, da diese die
nötigen Stackmanipulationen und eine lineare Speicheradressierung (bis
64kB) erlauben.


Größere Programme zerlegt man immer in mehrere Tasks, dazu brauchts
aber doch noch lange kein RTOS.


Peter

Autor: Dominik S. Herwald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.freertos.org/

da steht auch was von nem PIC18 Port... habe ich nicht getestet aber
vielleicht hilfts dir ja ;)

MfG,
Dominik S. Herwald

http://www.dsh-elektronik.de/

Autor: Gerhard Gunzelmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

bei den kleinen uC muß man unterscheiden in die "PIC"-ähnlichen und
in die Prozessor-ähnlichen. Ich stimme mit Peter überein, daß es
fraglich ist, ob man mit PIC-ähnlichen uC ein RTOS erarbeiten kann.
Wenn, dann sind wohl die neueren PIC-Generation PIC18 ( die sind
nämlich NICHT segmentiert !!!!) oder gleich ein PIC30 empfehlenswert,
da diese nicht nur mehr Befehle sondern auch mehr RAM haben.

Aber für so alte Haudegen-uC wie 8051er u.ä. gibts sowas wahrscheinlich
schon.

Ansonsten, wenn denn ein PIC sein soll, ist dies sicher machbar - wie
gesagt eben mit typen, die mehr Speicher haben. Interrsant ist das
Thema allmal - zumindest zu Lehrzwecken/Verständnis-Zwecken.


Gerhard

Autor: Stephanw (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"RS232, CAN und nem T6963 Grafikdisplay"

Hast Du denn das alles schon richtig zum Laufen gebracht.

->Mit CAN habe ich mich noch nicht beschäftigt; der Rest läuft
einwandfrei. Ich habe auch noch ein I2C-Interface vergessen (z.B. für
LM75-Temperatursensor). Programmiererfahrung mit diesen Dingen habe
ich. (CCS-C Compiler)

RTOSe gibt es schon mehrere für die PIC18-Serie (Salvo,
MicroC/OS-II,...,), aber die sind (größtenteils) leider nicht frei
verfügbar.


Wie ich schon geschrieben habe möchte ich später mit embedded Linux
arbeiten, aber dafür habe ich noch nicht die passende Hardware (zu
erträglichen Preisen) gefunden.


Gruß Stephan

Autor: Stephanw (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo nochmal!

Ich habe eben mein MPLAB und den C18-Compiler so eingerichtet, das ich
mit dem freeRTOS arbeiten kann :)

Die Demoapplikationen für den 18F452 lassen sich erfolgreich
kompilieren. Leider habe ich aber einen 18F458 und benötige ein anderes
Linker-Script. Das Demo-Script sieht wie folgt aus:

-------------------------------------------------------
// $Id: 18f452.lkr,v 1.4 2003/03/13 05:02:23 sealep Exp $
// File: 18f452.lkr
// Sample linker script for the PIC18F452 processor

LIBPATH .

FILES c018i.o
FILES clib.lib
FILES p18f452.lib

CODEPAGE   NAME=vectors    START=0x0            END=0x39
PROTECTED
CODEPAGE   NAME=page       START=0x3A           END=0x7FFF
CODEPAGE   NAME=idlocs     START=0x200000       END=0x200007
PROTECTED
CODEPAGE   NAME=config     START=0x300000       END=0x30000D
PROTECTED
CODEPAGE   NAME=devid      START=0x3FFFFE       END=0x3FFFFF
PROTECTED
CODEPAGE   NAME=eedata     START=0xF00000       END=0xF000FF
PROTECTED

ACCESSBANK NAME=accessram  START=0x0            END=0x7F
DATABANK   NAME=BIG_BLOCK  START=0x80          END=0x5FF
ACCESSBANK NAME=accesssfr  START=0xF80          END=0xFFF
PROTECTED

SECTION    NAME=CONFIG     ROM=config

STACK SIZE=0x60 RAM=BIG_BLOCK
--------------------------------------------------------------

Ich muss jetzt das Script so umändern, das es für meinen 458er geht.
Nur leider habe ich von den meisten Sachen, angefangen bei den
"vectors" (fast) keine Ahnung. Auch das Datenblatt brachte mich nicht
weiter. Ich wäre also für jeden Tip sehr dankbar!

Mfg Stephan

Autor: Sven Woehlbier (woehlb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo  Stephanw,

auf den ersten Blick sieht das Linkerskript wie ein normales 
Linkerskript aus, das mit dem C18-Compiler mitgeliefert wird. Ich nehme 
an das Dein Linkerskript aber vom freeRTOS stammt oder!?

An Deiner Stelle würde ich die C18-Compiler Linkerskripte für den 
PIC18F452 und für den PIC18F458 in Dein Arbeitsverzeichnis kopieren. 
Analysiere dann die Unterschiede zwischen den beiden 18F452-Skripten und 
versuche die Unterschiede korrekt in das 18F458 Skript einzuarbeiten!

vectors: steht für den Speicherbereich in den die Goto-Befehle stehen, 
mit deren Hilfe die Interruptserviceroutinen angesprungen werden.

page: sollte der durch die Application nutzbare Flash sein.

idlocs: steht für einen Speicherbereich in dem man Anwendungsspezifische 
Daten hinterlegen kann (z.B. Seriennummer).

devid: enthält eine Kennung über die festgestellt werden kann, um 
welchen Mikrocontroller es sich handelt. Wichtig z.B. bei der 
Programmierung über die ICD2 Schnittstelle.

eedata: steht für den internen nichtflüchtigen EEPROM.

(siehe Datenblatt)

Diese Speicherbereich sind äußerst hardwarenah, und deshalb kaum zu 
verändern(außer Grenze zwischen vectors und page; wenn kein oder nur 
eine Interruptquelle benutzt wird). Die folgenden Abschnitte definieren 
die Verwendung des RAM's. DATABANK steht dabei für Speicherbereiche die 
über ein RAM-Switching angesprochen werden müssen. Dieses Switching ist 
bei Variablen in einer ACCESSBANK nicht notwendig. Allerdings ist die 
Größe der ACCESSBANK stark eingeschränkt.

In einem C-Linkerscript ist weiterhin die Definition eines 
Softwarestacks notwendig. Die Parameterübergabe bei Funktionsaufrufen 
erfolgt über diesen Stack. In den Hardwarestack werden alle notwendigen 
Register gesichert, wenn ein Interrupt aufgerufen wird.

Weitere Informationen findest Du im "MPASM User's Guide" von Microchip, 
das kann man von der Microchip Homepage herunterladen. Suche in diesem 
PDF-File den Abschnitt "MPLINK Linker Scripts". Eine Seitezahl nenne ich 
lieber nicht, da mein "MPASM User's Guide" nicht das aktuellste ist.

Tschau Sven!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.