mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mutexes und Semaphores in FreeRTOS


Autor: Max K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bin ein kompletter Null-Anfänger und hab hier ein kleines C-Projekt, 
das ursprünglich für Windows geschrieben wurde und auf einen AT90CAN128 
portiert werden muss. Dabei versuche ich, statt eigene 
Basis-OS-Funktionen zu schreiben, so gut es geht die von FreeRTOS zu 
benutzen (irgendwie hab ich es sogar hinbekommen, dass das 
Betriebssystem auf einem AT90CAN128 läuft und ein kleines Demo mit ein 
paar vParTestToggleLED-s ausführt). Es sieht also in etwa folgendermaßen 
aus:
--------------------------------------
#include <stdio.h>
//#include <windows.h> - braucht man ja nicht mehr. Stattdessen:
#include <FreeRTOS.h>
#include <semphr.h>
#include <task.h>
#include <queue.h>
...
MutexHandle CreateMutex()
{
  // wie es im Original (für Windows) aussieht:
  //return (void *)CreateMutex(NULL, FALSE, NULL);
  // jetzt wie es sein sollte:
  return xSemaphoreCreateMutex();
}
...
SemaphoreHandle CreateSemaphore(unsigned InitialValue, unsigned 
MaxValue)
{
  // Windows:
  // return (void *)CreateSemaphore(NULL, (LONG)InitialValue, 
(LONG)MaxValue, NULL);
  // Man kann davon ausgehen, dass Windows immer ein Counting-Semaphor 
erzeugt - also:
  return xSemaphoreCreateCounting( InitialValue, MaxValue );
}
...
--------------------------------------
(Das ganze ist bis jetzt nur im Entwurfsstadium, also nicht wundern, 
wenn die Syntax hier oder da falsch ist). Jedenfalls, das Problem dabei 
ist - ich verstehe nicht, wie genau man die Funktionsaufrufe für ein 
Mutex und/oder Semaphor gestalten soll. Bei den obigen 2 Funktionen sagt 
avr-gcc beim Compilieren die ganze Zeit

[error] BasicOSSupportCAN.c:349: undefined reference to 
`xQueueCreateCountingSemaphore' (untere Fkt.)
[error] BasicOSSupportCAN.c:270: undefined reference to 
`xQueueCreateMutex' (obere Fkt.)

Was mache ich also falsch? Wäre wirklich dankbar, wenn es jemand wissen 
würde - bin langsam wirklich am Verzweifeln :(

Danke,

Max

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Totaler Anfänger bei Mikrocontrollern und dann gleich mit einem RTOS? 
Sehr sportlich.

Autor: Max K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist nicht schwer zu bemerken, dass ich es lernen will bzw. muss.

Außerdem ging es bis jetzt nur darum, etwas C-Code umzuschreiben, und da 
bin ich zumindest kein Null-ANfänger (sondern ein einfacher ;)

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Fehlermeldung besagt, dass dem Compiler 
xQueueCreateCountingSemaphore und xQueueCreateMutex nicht bekannt 
sind.

xQueueCreateCountingSemaphore ist eine Funktion in queue.c des FreeRTOS
Sie wird in queue.c nur compiliert, wenn #if 
(configUSE_COUNTING_SEMAPHORES == 1) gilt.

xQueueCreateMutex ist eine Funktion in queue.c des FreeRTOS
Sie wird in queue.c nur compiliert, wenn #if ( configUSE_MUTEXES == 1 ) 
gilt.

Vermutlich stimmt deine Konfiguration des FreeRTOS Systems in deinem 
Makefile? Configure? nicht.

Autor: Max K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, werde ich auf jeden Fall so schnell wie möglich nachschauen! :-)

Autor: Max K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh Mann, es war so einfach...

Stefan, du bist mein Held! Vielen Dank! :-)

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.