Forum: Compiler & IDEs Probleme beim Importieren von Projekten nach Linux MPLAB_X mit MPLAB®XC16 Compiler


von Peter O. (postmann2002)


Lesenswert?

Hallo PIC-Spezialisten,

ich habe ein kleines Problem:

Ich habe mir kürzlich ein älteres Microchip-Entwicklerboard mit der 
Bezeichnung "dsPICDEM 1.1" gekauft.
Dazu habe ich mir einen Pickit-3 Programmer zugelegt, den ich erstmal 
mittels eines selbstgebauten Adapters für's Board anpassen musste.
Die Entwicklungsumgebung MPLAB-X installierte ich mir auf mein 
Ubuntu-Notebook, was ziemich easy war. Dann installierte ich den 
C-Compiler
MPLAB®XC16. So bis dahin war alles ziemich einfach.
Nur leider wurden alle Demo-Programme scheinbar auf alten MPLAB-IDE 
Plattformen mit C-30 Compilern geschrieben, die nicht so einfach auf 
mein Linux-System übertragbar sind.
Um erstmal zu testen, ob überhaupt eine Kommunikation 
Board-Programmer-Notebook vorhanden ist, schrieb ich einen 5-Zeiler, der 
mir eine LED auf dem Board blinken läßt... das funktionierte 
einwandfrei... erste Hürde genommen, aber das wars dann auch.
Eigentlich wollte ich fertige Beispielprojekte von der Microchip-Seite 
Importieren, um das Rad nicht neu erfinden zu müssen, aber da verzweifle 
ich.
Mein eigentliches Ziel ist es einen Inverter für Asynchronmotoren 
und/oder BLDC zu bauen/entwickeln und da gibt es schon zahlreiche 
Beispielprojekte auf dspic30f-Basis (ich habe einen dspic30f6014 
verbaut) z.B. AN908 oder AN957 ...nur scheitere ich schon beim 
Importieren/Compilieren. Natürlich ist mir bewußt, daß ich auch die 
Pinbelegung meines Boards in der Software berücksichtigen sollte, damit 
keine Beschädigungen auftreten... dazu komme ich leider erst garnicht.

Hat jemand eine Idee wie man solche Beispielprogramme in ein Linux 
MPLAB-X mit MPLAB®XC16 Compiler importiert?

Eine Anleitung vielleicht?

Zu meiner Person:
habe vor 20 Jahren Automatisierungs/Regelungstechnik studiert und habe 
einige kleinere Projekte mit Atmega-8 erstellt (beruflich und Privat) 
bin aber kein Programmier-Freak (ich wäre aber gerne einer).

Danke im voraus.

Mfg Peter

: Verschoben durch User
von Klaus (Gast)


Lesenswert?

Ich arbeite genau mit dieser Umgebung, MPLABX Ubuntu und C30 bzw. XC16 
(ist eigentlich der gleiche Compiler nämlich gcc). Ich habe aber bisher 
alle Projekte neu gemacht. Das geht eigentlich recht einfach. Dann 
stimmen aber auch alle Pfade und Filenamen ( ob '\' oder '/' oder 
Laufwerksbuchstaben etc) mit der aktuellen Installation überein. Der 
C-Code sollte eigentlich immer passen, es sei denn es gibt da auch was 
mit '/' und '\' in Filenamen. Mit Hilfe der IDE, die einem z.B. eine 
Auswahlliste der Includefiles anbietet, ist das schnell gefixt. Am Ende 
kennt man dann sein Projekt wirklich gut, weiß welche Files dazu gehören 
und hat wenigstens einen Überblick über die verwendeten 
Compileroptionen.

MfG Klaus

von Peter O. (postmann2002)


Lesenswert?

Hi Klaus,

ich sehe, daß Du viel mehr Erfahrung und Hintergrundwissen mit MPLAB_X 
unter Ubuntu hast als ich.
Darum bitte ich Dich mal ein Microchip-Beispielprojekt z.B. das AN908 
(Ansteuerung von Asynchronmotoren) runterzuladen, importieren und nur zu 
Kompilieren (ohne den Controller zu programmieren)... da scheiterts 
immer bei mir... ich bekomme zig Fehlermeldungen, als ob etwas fehlen 
würde (Bibliothek o.ä), aber ich kann die Fehlerquelle nicht 
lokalisieren.

Vielleicht hast du mehr Glück/KnowHow?

Mfg Peter

von Klaus (Gast)


Lesenswert?

Peter Ostmann schrieb:
> importieren

Mein Vorschlag war, nicht zu importieren sondern neu zu erzeugen. Wenn 
das Projekt kompliziert und umfangreich ist, hilft das einem dabei, den 
Code zu verstehen. Das ist sowieso unabdingbar, wenn man etwas 
sinnvolles damit anstellen will. Also alle Source und Headerfiles in ein 
Projektdirektory kopieren und als "existing" zum Projekt hinzufügen.

> ich bekomme zig Fehlermeldungen, als ob etwas fehlen
> würde (Bibliothek o.ä), aber ich kann die Fehlerquelle nicht
> lokalisieren.

Die Fehlermeldungen sagen normalerweise, was das Problem ist. Wenn du 
das nicht verstehst, mußt du das lernen. Ich versuche, wie auch sonst, 
einen Fehler nach dem anderen abzuarbeiten, zuerst so etwas wie "file 
not found". Dabei sollte man berücksichtigen, daß in *nix der 
Direktoryseparator '/' ist, und Filenamen Case-sensitive sind. Wenn ein 
Symbol nicht gefunden wird, hilft möglicherweise grep und etwas 
Phantasie. Dabei muß man darauf achten, wer den Fehler liefert, der 
Compiler oder der Linker.

> Vielleicht hast du mehr Glück/KnowHow?

Es ist einfach Arbeit, und damit hat sich schon mancher den Tag versaut. 
Glück würde bedeuten, daß jemand anderes die Arbeit für einen erledigt 
hat, ohne eine Rechnung zu stellen.

MfG Klaus

von Peter O. (postmann2002)


Lesenswert?

Hallo,
ich komme nicht weiter.
Ich habe mehrere Methoden des Imports vom Beispiel-Projekt AN908 
ausprobiert, aber scheinbar mit den gleichen Fehlermeldungen beim 
kompilieren.
Ich habe so das Gefühl, daß irgendetwas fehlt (eine Library, oder 
sonstwas), da er einige Variablen nicht entschlüsseln kann.
Dieses Projekt wurde eigentlich für den dspic30f6010A geschrieben, es 
müsste aber auch auf meinem dspic30f6014 laufen... oder doch nicht?

Naja, vielleicht kann jemand was mit den Fehlermeldungen des Compilers 
anfangen und mir einen Hinweis geben.

Danke im Voraus.

Hier ist die Fehlermeldung:

make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
make[1]: Betrete Verzeichnis 
'/home/peter/MPLABXProjects/ACIM_908_import_test_2.X'
make  -f nbproject/Makefile-default.mk 
dist/default/production/ACIM_908_import_test_2.X.production.hex
make[2]: Betrete Verzeichnis 
'/home/peter/MPLABXProjects/ACIM_908_import_test_2.X'
"/opt/microchip/xc16/v1.10/bin/xc16-gcc"   "../../MPLAB_Dokumente/AN908 
Source Code for dsPIC30F6010A/ACIM.c"  -o 
build/default/production/_ext/2129995287/ACIM.o  -c -mcpu=30F6014  -MMD 
-MF "build/default/production/_ext/2129995287/ACIM.o.d"        -g 
-omf=elf -O0 -I"../../MPLAB_Dokumente/AN908 Source Code for 
dsPIC30F6010A" -msmart-io=1 -Wall -msfr-warn=off
../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:100:1: 
error: 'BORV_20' undeclared here (not in a function)
../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:115:2: 
error: expected '=', ',', ';', 'asm' or '__attribute__' before 'int'
../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c: In 
function 'main':
../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:205:13: 
warning: 'return' with no value, in function returning non-void
../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c: In 
function 'DoControl':
../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:470:9: 
error: 'SnapBuf1' undeclared (first use in this function)
../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:470:9: 
note: each undeclared identifier is reported only once for each function 
it appears in
../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c: In 
function 'SetupBoard':
../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:590:5: 
error: 'PORTEbits' undeclared (first use in this function)
../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c: In 
function 'SetupPeripherals':
../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:765:5: 
error: 'PDC1' undeclared (first use in this function)
../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:766:5: 
error: 'PDC2' undeclared (first use in this function)
../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:767:5: 
error: 'PDC3' undeclared (first use in this function)
../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:768:5: 
error: 'PDC4' undeclared (first use in this function)
../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:775:5: 
error: 'PTPER' undeclared (first use in this function)
../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:777:5: 
error: 'PWMCON1' undeclared (first use in this function)
../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:778:5: 
error: 'DTCON1' undeclared (first use in this function)
make[2]: Verlasse Verzeichnis 
'/home/peter/MPLABXProjects/ACIM_908_import_test_2.X'
make[1]: Verlasse Verzeichnis 
'/home/peter/MPLABXProjects/ACIM_908_import_test_2.X'
../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:779:5: 
error: 'DTCON2' undeclared (first use in this function)
../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:780:5: 
error: 'FLTACON' undeclared (first use in this function)
../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:781:5: 
error: 'FLTBCON' undeclared (first use in this function)
../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:782:5: 
error: 'PTCON' undeclared (first use in this function)
../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:786:5: 
error: 'SEVTCMP' undeclared (first use in this function)
../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:787:5: 
error: 'SEVTCMPbits' undeclared (first use in this function)
../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:791:5: 
error: 'MAXCNT' undeclared (first use in this function)
../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:792:5: 
error: 'POSCNT' undeclared (first use in this function)
../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:793:5: 
error: 'QEICON' undeclared (first use in this function)
../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:794:5: 
error: 'QEICONbits' undeclared (first use in this function)
../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:797:5: 
error: 'DFLTCON' undeclared (first use in this function)
../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:812:15: 
error: 'ADCON1BITS' has no member named 'SIMSAM'
../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:820:15: 
error: 'ADCON2BITS' has no member named 'CHPS'
../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:833:14: 
error: 'ADCHSBITS' has no member named 'CH123SA'
make[2]: *** [build/default/production/_ext/2129995287/ACIM.o] Fehler 
255
make[1]: *** [.build-conf] Fehler 2
make: *** [.build-impl] Fehler 2

BUILD FAILED (exit value 2, total time: 1s)

von Peter O. (postmann2002)


Lesenswert?

Ich musste die letzten Tage feststellen, daß ich ein totaler Anfänger 
bin was die PIC-Prgrammierung angeht (in Verbindung mit Linux-Ubuntu, 
MPLAB-X und xc16-c-compiler).
Zwar kann ich kleinere Programme zufuß erstellen, die auch 
funktionieren, aber mein eigentliches Ziel; einen simplen U/f 
3-Phasen-Inverter zu Programmieren habe ich bis jetzt verfehlt.
Alle Versuche sind gescheitert einen fertigen Code zu importieren.
Ich habe so das gefühl, daß die meisten "Example-Codes" für die 
dspic30f-Reihe unter alten IDE (MPLAB 6.x) und alten c-Compilern 
geschrieben wurden, und die neuen Tools völlig inkompatibel sind.

Hat jemand ein ähnliches Projekt erfolgreich mit der gleichen 
Entwicklungsumgebung realisiert/importiert?

Oder einfach mal einen Hinweis geben, warum z.B. diese erste 
Fehlermeldung kommt.

../../MPLAB_Dokumente/AN908 Source Code for dsPIC30F6010A/ACIM.c:100:1:
error: 'BORV_20' undeclared here (not in a function)

Wo wird "BORV_20" definiert, und was muss ich downloaden/includieren um 
diese Fehlermeldung zu beheben.

Bitte nur um sinnvolle Beiträge, die auch ein Nicht-Profi verstehen 
würde.

Mfg Peter

von Stefan (Gast)


Lesenswert?

Hallo,

"BORV_20" gibt es in der Form seit einiger Zeit nicht mehr. Heißt jetzt 
BORV20 und ist für deinen PIC als "reserved" spezifiziert. BORV27 könnte 
klappen. Oder du schmeisst es erst mal ganz raus, ist "nur" der 
Brown-out detector (2V respektive 2.7V).

Später wird aber auch 'PDC1' angemeckert. Gehört zum PWM Modul und weist 
darauf hin daß da ein #include für den PIC fehlt oder das falsche 
eingebunden wird. Ist vielleicht aber auch nur ein Folgefehler.

Die Konfigbits stehen unter 
/opt/microchip/xc16/v1.10/docs/config_docs/30F6010A.html und eine Etage 
drüber findest du das Manual zum Compiler.


> Ich habe so das gefühl, daß die meisten "Example-Codes" für die
> dspic30f-Reihe unter alten IDE (MPLAB 6.x) und alten c-Compilern
> geschrieben wurden, und die neuen Tools völlig inkompatibel sind.

Ja leider, gerade die dsPICs scheint MCP etwas zu vernachlässigen.

von Peter O. (postmann2002)


Lesenswert?

So,
nach langem "Importier-Amoklauf unter Linux" habe ich mir den alten 
Win-XP-Rechner meines Sohnes geschnappt, MPLAB v8.88 und C30-Compiler 
installiert, den "AN908 Source Code for dsPIC30F6010A" importiert 
(Vector Control for ACIM) und erfolgreich compiliert (nachdem ich nur 
den "BORV_20" gegen den "BORV_27" getauscht habe; Danke an Stefan!)

Dumm von mir daß ich mich so lange geweigert habe Windoof zu benutzen, 
aber manchmal hat auch dieses System seine Daseinsberechtigung.

Ein Problemchen habe ich noch:
Mein Testboard hat einen dsPIC30F6014-Prozessor...
Ich habe unter "Select Device" diesen Prozessor ausgewählt und auch im 
general.h diesen Includiert (#include <p30F6014.h>)
Jetzt bekomme ich einige Fehlermeldungen (aber vieeel weniger als unter 
Linux MPLAB-X).

z.B.
ACIM.c: in function 'SetupBoard':
...error: 'PORTEbits' undeclared (first use...

Vielleicht hat einer ein Tip für mich.
Ich bin aber froh, daß ich jetzt so weit bin und nur noch paar 
Fehlermeldungen habe.
Warscheinlich (hoffentlich) ist es nur eine Kleinigkeit.

Trotz alledem, wenn jemand unter Ubuntu/Linux und MPLAB-X so ein 
Motor-Control Projekt realisiert hat (mit ähnlichem Prozessor) und mich 
nicht dumm sterben lassen will, kann er mir eine PM schicken, oder es 
einfach hier veröffentlichen wie er es gemacht hat, da ich immernoch 
daran interessiert bin es unter Linux zu realisieren.

Mfg Peter

von Peter O. (postmann2002)


Lesenswert?

Neuer Status:

Leider habe ich einen (Anfänger-)Fehler begangen:
Ich musste feststellen, daß der Prozessor dspic30f6014 auf meinem 
Entwicklerboard dspicdem 1.1 völlig ungeeignet für meine Anwendung 
(Inverterbau) ist, da für dieses Problem spezielle Controller gebaut 
wurden mit der "Familien-Bezeichnung" Motor-Control (MC). Dazu gehört 
unter anderem der von mir schon erwähnte dspic30f6010A,
der besonders viele PWM's und schnellere ADC's hat... eben für diese 
Anwendung.
Da braucht man sich nicht wundern, daß man die "Examples" vom 
dspic30f6010A nicht so einfach auf dspic30f6014 übertragen kann, da dort 
die besagten PWM's fehlen.
Naja, wieder was dazugelernt.

Da sich die Beispielcodes für den dspic30f6010A einwandfrei compilieren 
ließen, würde ich gerne bei dem Prozessor bleiben, und suche entweder 
einen Prozessor dspic30f6010A auf einem 80-poligen Sockel, der auf mein 
Board passt, oder ein komplettes Entwicklerboard, das speziell für 
Motorenanwendungen konfiguriert ist (bevorzugt von Microchip und ohne 
Powerstage).

Wenn jemand eins übrig hat und mir ein interessantes Angebot macht, 
bitte melden.

Mfg Peter

von Peter O. (postmann2002)


Angehängte Dateien:

Lesenswert?

Hallo,

mittlerweile habe ich einen Großteil der Fehlermeldungen beseitigt...
und hänge seit einiger Zeit an zwei Fehlermeldungen, wo ich nicht mehr 
weiter weiss.
Wenn ich diese zwei Zeilen, die mir die Fehlermeldungen bringen, 
herauskommentiere, dann kann ich den kompletten Code fehlerfrei 
Compilieren.
Ich glaube, daß es mit dem XC16-Compiler zusammenhängt, da die Software 
für C30 geschrieben wurde.


1) Fehlermeldung:

../SinusoidalBLDC v1.2.c: In function 'SpeedControl':
make[2]: Verlasse Verzeichnis 
'/home/peter/MPLABXProjects/AN1017_30F3010_nach_4012/AN1017_3010-4012.X'

../SinusoidalBLDC v1.2.c:934:17: error: too few arguments to function 
'__builtin_subab'

Der dazugehörige Code im Programm:

reg_a = __builtin_subab();

2) Fehlermeldung:

../SinusoidalBLDC v1.2.c:936:9: error: void value not ignored as it 
ought to be

Der dazugehörige Code im Programm:

reg_a = __builtin_movsac(&ControlDifferencePtr, &x_prefetch, 2, 
&PIDCoefficientsPtr, &y_prefetch, 2, 0, reg_b);

Vielleicht kann jemand helfen.

Hier zur Übersicht die ganze Funktion:

Software-Umgebung: Linux Ubuntu, MPLAB_X, XC16-Compiler

Als Anhang hänge ich den C-Code dran: SinusoidalBLDC v1.2.c

Mfg Peter

von Parli (Gast)


Lesenswert?

Hallo,

ich Probiere gerade das selbe Programm zu übersetzen und hänge auch an 
dem zweiten Fehler.

Ich habe mir die Doku für die Funktion besorgt und einfach mal das 
Beispiel daraus programmiert. Auch dieses Beispiel wird nicht 
unterstützt.

   volatile register int result asm("A");
   int *xmemory;
   int *ymemory;
   int xVal , yVal;
   result = 
__builtin_movsac(&xmemory,&xVal,2,&ymemory,&yVal,2,0,0);[/pre]

Wurde das Problem inzwischen gelöst?

Viele Grüße
Parli

von Carsten M. (ccp1con)


Lesenswert?

>Ich glaube, daß es mit dem XC16-Compiler zusammenhängt, da die Software
>für C30 geschrieben wurde.

@Peter
Dann versuche doch erst einmal den C30!?

von Peter O. (postmann2002)


Lesenswert?

Hallo Leute,

ich weiss nicht, ob es noch jemanden Interessiert, aber bezüglich des 
Fehlers
in der Zeile:

reg_a = __builtin_movsac(&ControlDifferencePtr, &x_prefetch, 2,
&PIDCoefficientsPtr, &y_prefetch, 2, 0, reg_b);

soll man einfach die Zuweisung "reg_a =" weglassen, so, daß dann nur 
Folgendes steht:

__builtin_movsac(&ControlDifferencePtr, &x_prefetch, 2,
&PIDCoefficientsPtr, &y_prefetch, 2, 0, reg_b);

Habe irgendwo gelesen, daß sich am Compiler xc16 diesbezüglich etwas 
geändert hat...

Dieser Fehler verschwindet anschließend beim compilieren.

Ich hoffe, daß ich einigen Leuten geholfen habe.

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.