Arbeite im Rahmen einer Semesterarbeit gerade an einer Schaltung auf Basis des PIC 16F876 unter Verwendung von MPLAB 8.33 und des cc5x-Compilers in der free bzw. student-version. Ziel der Schaltung ist das Aufnehmen eines Messwertes mittels von Sensor geliefertem analogen Spannungswert (0 bis 10 Volt) über AN0, Umrechnung des 10-Bit AD-Wandlerwertes (TYP uns16) und Ausgabe des Messwertes auf einem LCD-Display (2x16, PORTB, E=PIN0, RS=PIN2, RW=PIN3) und über USART. Problem: Nur Grundlagenkenntnisse in C und noch nie mit PIC oder cc5x (o.ä MCU's bzw. Compilern) gearbeitet (mal mit Motorola 68k rum-assemblert aber mehr auch nicht), also bitte nicht gleich mit verbalen Tomaten werfen. Also, das eigentliche Problem: U an ANO wird von einem Drucksensor geliefert (Messbereich 10^(-4)mbar - 10^3 mbar) und ist über Druck = mbar*exp(U/V + konst.) mit dem eigentlichen Messwert verknüpft. Die Ausgabe auf dem LCD soll in der Form "xxxx.x e^(-y) mbar" erfolgen. Zur Verarbeitung des U-Signals wollte ich die MATH24F.H einbinden um die int24 -> float24 Umwandlung und die float24 exp10(float24); Funktion zu nutzen (cc5x in der free-version nur float24, behauptet der Compiler). Bei #include <MATH24F.H> erfolgt folgende Fehlermeldung: CC5X Version 3.4A, Copyright (c) B Knudsen Data, Norway 1992-2009 --> FREE edition, 8-16 bit int, 24 bit float, 1.5k code, reduced optim. Test3.c: if (expo > sizeof(arg1f24)*8-7) goto RETURN; ^------ Error[1] C:\Programme\bknd\CC5X\MATH24F.H 434 : Macro 'RETURN' needs arguments (Macro identifier needs arguments, for example 'macroX(10)') goto RETURN; if (!arg2f24.high8) ^------ Error[2] C:\Programme\bknd\CC5X\MATH24F.H 435 : Duplicate or illegal label (The label name must not be defined twice within a function. Also, it must be a unique name not used in another context) goto RETURN; if (!arg2f24.high8) ^------ Error[3] C:\Programme\bknd\CC5X\MATH24F.H 435 : No ';' found (Each statement (and definition) must be terminated by a semicolon. Check previous statement) goto RETURN; if (!arg2f24.high8) ^------ Error[4] C:\Programme\bknd\CC5X\MATH24F.H 435 : Syntax error (or limitation) (CC5X is unable to compile the expression due to syntax error or limited C support. Code correction is required. Check also for unbalanced block delimiters '{ .. }' in previous statements) Error options: -ew: no warning details -ed: no error details -eL: list details BUILD FAILED: Sun Aug 23 17:08:02 2009 Wie gesagt, arbeite erst seit drei Wochen mit dem cc5x und den PIC's, weshalb ich mich noch nicht so besonders gut damit auskenne, deshalb folgende Frage: Hat jeman eine Idee welcher Fehler dieses Problem verursacht und wie er behoben werden kann ?? Im Voraus schon mal vielen Dank an alle die sich die Zeit nehmen hierauf zu Antworten und/oder mit Ihren Beiträgen im www Anfängern wie mir den Einstieg zu erleichtern (bzw. die Realisierung ihre Projekte in annehmbaren überhaupt erst ermöglichen) PS: Dies ist mein erster Beitrag in einem Internet Forum, deshalb bitte Gnade, war der Beitrag zu lang??
Oliver R. schrieb: > if (expo > sizeof(arg1f24)*8-7) > goto RETURN; > ^------ > Error[1] C:\Programme\bknd\CC5X\MATH24F.H 434 : Macro 'RETURN' needs > arguments > (Macro identifier needs arguments, for example 'macroX(10)') Das ist ja auch ne grottenschlechte Idee, für den Compiler reservierte Wörter zu vergewaltigen. Die anderen Fehler werden Folgefehler sein. Peter
Das steht so in der MATH24F.H. Frag mich nicht wieso. Aber Danke für die rasche Antwort.
Bingo, alle "RETURN" geändert und es funzt. Danke auch.
Oliver R. schrieb: > Arbeite im Rahmen einer Semesterarbeit gerade an einer Schaltung auf > Basis des PIC 16F876 unter Verwendung von MPLAB 8.33 und des > cc5x-Compilers in der free bzw. student-version. Welchen Grund gibt es, gerade diesen PIC mit einem gestutzten Compiler zu verwenden? Macht man sich das Leben damit nicht nur unnötig schwer? Bei den AVRs gibt es mit dem AVR-GCC einen voll ANSI kompatiblen, etablierten und gut optimierenden Compiler mit einer großen internationalen Nutzergemeinde, d.h. viel Support. Aber auch für die PIC18xx soll es einen GCC geben. Wie gut der ist, weiß ich allerdings nicht. Peter
Die PIC Familie war Vorgabe. Die Wahl auf den 16F... und den cc5x fiel eher in Laufe der ersten Recherchen auf Seiten wie sprut.de o.ä. und der vorhandene Programmierbeispiele. Gruß Oliver
Wieso willst du ein Header-File eines 16-Bit PIC24 für einen 8-Bit PIC16 verwenden? Wenn du mal hier schauen möchtest: http://www.sprut.de/electronic/pic/math/math.htm#bibo
Weil der compiler behauptet "Error[1] C:\Test\Test3.c 273 : This compiler edition supports 24 bit floating point only", und die "24 bit floating point"-Funktionen in der MATH24F.H definiert werden. Auf die von dir angegebene Seite bin ich bereits gestoßen, da die angegebenen AN-Bibliotheken in Assembler geschrieben sind ist mir derzeit noch nicht ganz klar wie ich sie korrekt anwenden und in das C-Programm einbinden kann, da die ersten Versuche dazu mehr Fehler produzierten als die Einbindung der H-Datei. Oliver
Entschuldige, da ist mir ein Fehler unterlaufen. Die MATH24F.H hat ja gar nichts mit PIC24 zu tun. >da die angegebenen AN-Bibliotheken in Assembler geschrieben sind ist mir >derzeit noch nicht ganz klar wie ich sie korrekt anwenden und in das >C-Programm einbinden kann Gar nicht, sorry (außer mit Inline-Assembler, sofern der cc5x das kann). Wie gesagt, ich meinte etwas völlig Anderes. Zum cc5x selbst kann ich leider nichts sagen, da ich den nicht benutze. Grüße, Edson
Das mit dem inline-Assembler geht prinzipiell, jedoch die richtige Routine richtig mittels inline-asm als C-Fkt. einzufügen (richtiger Datentyp, Übergabevariable usw. finden) ist eine Sache für sich. Aber Versuch macht ja bekanntlich klug. Gruß Oliver
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.