Forum: Mikrocontroller und Digitale Elektronik RTOS auf dem PIC


von Stephanw (Gast)


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

von Gerhard Gunzelmann (Gast)


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

von Stephanw (Gast)


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

von Peter D. (peda)


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

von Dominik S. Herwald (Gast)


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/

von Gerhard Gunzelmann (Gast)


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

von Stephanw (Gast)


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

von Stephanw (Gast)


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

von Sven W. (woehlb)


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!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.