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
Totaler Anfänger bei Mikrocontrollern und dann gleich mit einem RTOS? Sehr sportlich.
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 ;)
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.
Danke, werde ich auf jeden Fall so schnell wie möglich nachschauen! :-)
Oh Mann, es war so einfach... Stefan, du bist mein Held! Vielen Dank! :-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.