Jump to content

RED Brick Cross-Compiler


Recommended Posts

Hallo,

 

Ich habe zwei hoffentlich kurze Fragen:

 

1) Gibt es eine Möglichkeit wie zum Beispiel bei dem Rotary Bricklet über den Brick Viewer die Positionen eines Servomotors aufzuzeichnen?

Der Hintergedanke ist, dass ich gerne die Sprungantwort meines Servomotors "messen" möchte,um ein mathematisches Ersatzmodell in Simulink dafür zu erstellen.

Beim Rotary Brick kann ich ja zum Beispiel auch im Brick Viewer die aktuelle Position sehen, gibt es sowas auch für den Servomotor, damit mir angezeigt wird wie schnell der Servo seinen Winkel von beispielsweise 0 auf 60 ändert?

 

 

2) Um meinen Code auf das RED Brick zu spielen benötigte ich lediglich einen Cross Compiler sehe ich das richtig?

Ich habe den Code unter Windows in C++ mit dem Orwell Dev C++ Compiler programmiert und funktioniert soweit auch sehr gut.

Ich benötige nun einen Cross Compiler von Windows für Linux oder?

Hat jemand gute Erfahrungen mit einem Cross-Compiler gemacht und kann mir einen guten Empfehlen oder evtl sogar eine Anleitung wie ich genau Vorgehen muss?

 

Vielen Dank für eure Hilfe!

 

LG Max

Link zu diesem Kommentar
Share on other sites

Ich programmiere meine Programme unter Windows im QT und teste sie auch da.

Dieses gibt es auch unter Linux. Ist also eine Multiplattform die es auf beiden Systemen gibt. Meine Programme lade ich dann mir dem Brickviewer hoch und compiliere sie direkt auf dem RED-Brick. Ich benutze bei beiden den selben Compiler. So sehe ich beim Compilieren auch gleich wenn Fehler auftauchen.

 

Als Compiler verwendet QT den MinGW. Diesen gibt es sowohl für Windows als auch für Linux.

 

Zu deiner ersten Frage.

 

Der Rotary gibt Impulse aus je nach Drehrichtung. 24 für eine volle Umdrehung. Diese kann man zählen. Das übernimmt der Masterbrick der den Zählerstand dann als Callback an dein Programm weitergibt. Du musst also nur den Counter beim Start auf 0 setzen und dann mit Callback auslesen.

Der Rotary schafft aber nur 250 Schritte/sek.

Da wird die Sprungantwort deines Servos aber warscheinlich höher liegen.

Link zu diesem Kommentar
Share on other sites

Also das mit der Sprungantwort habe ich jetzt hinbekommen, vielen Dank!

 

Gibt es keine relativ einfach Möglichkeit meinen Dev C++ Code für Linux ARM kompilieren zu lassen?

Evtl mit CodeBlocks?

Habe noch nie mit QT gearbeitet und möchte mich nicht unbedingt dort einarbeiten.

 

Hat vll jemand auch eine Anleitung/Tutorial wie man den Dev C++ Code für Linux kompatibel macht?

 

Wäre echt super wenn mir jemand dabei helfen könnte.

Link zu diesem Kommentar
Share on other sites

Dev C++ wird GCC einsetzen. Du musst also eigentlich nur GCC für ARM nehmen und das Dev C++ als Compiler unterschieben. Wie das genau geht müsste ich mir selbst erst ansehen.

 

https://launchpad.net/gcc-arm-embedded

 

Eine einfachere Alternative ist es dein Projekt auf dem RED Brick zu kompilieren. Wie hier beschrieben:

 

http://www.tinkerforge.com/de/doc/Hardware/Bricks/RED_Brick_Program_Tab.html#c-c

 

Kannst du die Dateistruktur deines Dev C++ Projekts hier zeigen? Dann kann ich dir helfen das Makefile zu erstellen.

Link zu diesem Kommentar
Share on other sites

Ich hab versucht mit GCC für ARM und Dev-C++ ein Programm zu cross-compilen. Aber ich bekomme es auf die Schnelle nicht hin. Das Kompilieren an sich funktioniert. Aber das Programm wird auf dem RED Brick immer sofort gekillt.

 

Alternativ, kannst du das Programm auch auf dem RED Brick kompilieren. Dafür musst du aber ein passendes Makefile beilegen. Zeigt doch mal das Makefile.win, das Dev-C++ für dein Projekt erzeugt. Dann kann ich dir weiterhelfen, das Makefile für den RED Brick zu erstellen.

Link zu diesem Kommentar
Share on other sites

Vielen Dank für deine Hilfe!

 

Das folgende Makefile wird zu meinem Projekt erstellt:

 

# Project: Project2

# Makefile created by Dev-C++ 5.8.2

 

CPP      = g++.exe

CC      = gcc.exe

WINDRES  = windres.exe

OBJ      = bricklet_rotary_poti.o brick_servo.o ip_connection.o Test.o

LINKOBJ  = bricklet_rotary_poti.o brick_servo.o ip_connection.o Test.o

LIBS    = -L"C:/Program Files (x86)/Dev-Cpp/MinGW64/lib" -L"C:/Program Files (x86)/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib" -static-libgcc "../Program Files (x86)/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib/libws2_32.a" "../Program Files (x86)/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib/libadvapi32.a" -g3

INCS    = -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/include" -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/x86_64-w64-mingw32/include" -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/lib/gcc/x86_64-w64-mingw32/4.8.1/include"

CXXINCS  = -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/include" -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/x86_64-w64-mingw32/include" -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/lib/gcc/x86_64-w64-mingw32/4.8.1/include" -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/lib/gcc/x86_64-w64-mingw32/4.8.1/include/c++"

BIN      = Pedal_Test1.exe

CXXFLAGS = $(CXXINCS) -g3

CFLAGS  = $(INCS) -g3

RM      = rm.exe -f

 

.PHONY: all all-before all-after clean clean-custom

 

all: all-before $(BIN) all-after

 

clean: clean-custom

${RM} $(OBJ) $(BIN)

 

$(BIN): $(OBJ)

$(CPP) $(LINKOBJ) -o $(BIN) $(LIBS)

 

bricklet_rotary_poti.o: bricklet_rotary_poti.c

$(CPP) -c bricklet_rotary_poti.c -o bricklet_rotary_poti.o $(CXXFLAGS)

 

brick_servo.o: brick_servo.c

$(CPP) -c brick_servo.c -o brick_servo.o $(CXXFLAGS)

 

ip_connection.o: ip_connection.c

$(CPP) -c ip_connection.c -o ip_connection.o $(CXXFLAGS)

 

Test.o: Test.cpp

$(CPP) -c Test.cpp -o Test.o $(CXXFLAGS)

Link zu diesem Kommentar
Share on other sites

Okay, du hast also nur Test.cpp und sonst Dateien aus den C/C++ Bindings.

 

Dann speicher folgendes mal als Datei namens "Makefile" und lad es zusammen mit deiner Test.cpp Datei also C/C++ Programm auf den RED Brick:

 

# Defines
CC=g++
CFLAGS=-c -Wall -I/usr/include/tinkerforge
LIBS=-ltinkerforge -lpthread
EXE=Test
SOURCES=Test.cpp
OBJECTS=$(SOURCES:.cpp=.o)

# Build Rules
all: $(SOURCES) $(EXE)

.cpp.o:
    $(CC) $(CFLAGS) $< -o $@

$(EXE): $(OBJECTS)
    $(CC) $(OBJECTS) -o $(EXE) $(LIBS)

clean:
    rm -f *.o $(EXE)

 

Die Bindings Dateien kannst du weglassen, die sind schon auf dem RED Brick.

 

Im Programm Uplaod Wizard wählst du dann in Schritt 3 "Test" als Executable und aktiviert die "Compile From Source" Option. Den rest des Wizards kann du auf den Standardwerten lassen.

Link zu diesem Kommentar
Share on other sites

Vielen Dank schon mal.

 

Ich habe das Makefile, das Projekt und das C++ Programm in einen neuen Ordner kopiert, damit ich weniger Dateien im gleichen Ordner habe und bessere Übersicht erhalte. Wenn ich das Programm über den Compiler auf dem  PC ausführe funktioniert alles fehlerfrei.

Ich habe jetzt das Test.cpp und die makefile datei auf das Red Brick geladen und es zeigt zumindest beim Upload keine Fehler an.

 

Der Programmstatus zeigt aber dann direkt einen Error an.

Auch wenn ich Continue after Error aktiviere, funktioniert das Programm dennoch nicht, da der Fehler direkt immer zu Beginn auftritt.

 

Der Brick Viewer zeigt folgende Informationen an:

 

Status:

Current State: Executable does not exist on 2016-02-11

Last Start: 2016-02-11

 

Scheduler

Current State: Stopped, no automativ program start

 

Logs:

 

2016-02-11

 

Files:

Makefile

Pedal_Test1

Test.cpp

Test.o

 

 

Ich habe schon versucht das makefile umzubauen bzw anders abzuspeichern, hat aber nichts genutzt bis jetzt. Ich versuche es weiter, falls jemand eine Idee hat woran es liegt wäre es echt super wenn ihr mir helfen könntet!

 

LG Max

Link zu diesem Kommentar
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...