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
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
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
"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
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
"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
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
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!