hallo ich bin seit nunmehr als 2 Tagen schwer am kämpfen und bitte um Feedback zu folgendem Problem. Angelehnt an den folgenden Beitrag http://www.mikrocontroller.net/attachment/highlight/16302 möchte ich einen Timer umsetzen. Verwenden will ich dafür den 8-bit-Timer, der beim Überlauf eine ISR ausführt. Hierzu kommt es jedoch nicht... Was ich bisher fand... - TIMER0_OVF_vect ist ggf. falsch _VECTOR(23) oder _VECTOR(24) -- Modifikation brachte jedoch keinen Erfolg danke für jeden tippe
Im Code kann ich kein Problem sehen. matthiask schrieb: > Verwenden will ich dafür den 8-bit-Timer, der beim Überlauf eine ISR > ausführt. Hierzu kommt es jedoch nicht... Woher weißt du das?
Das ist nicht wirklich eine Distribution, die ein gpio.h beinhalt? Das hast selber dazugehackt, oder? Aktiviere Warnungen, und beachte sie auch, zB für falsch geschriebene ISR-Bezeichner. Gültige ISR-Bezeichner kann man im i-File sehen mit -save-temps -g3, die avr-libc Doku ist leider etwas diffus...
Ich schlussfolgere das, da weder meine led leuchtet noch sich mein count aendert Getestet habe ich das in verschiedenen ode variationen
Die gpio.h ist von mir... Die compileroptionen werde ich spaeter mal antesten... danke
Welche Build-Umgebung? IDE? Eigenes Makefile? Wenn Makefile, dann posten.
Oje, 20 Meter Makefile im anrauschen... Vermutlich nur ein klassischer Fall von Selbstverwirrung: >> Gpio g[] = { >> GPIO(H, 3), >> GPIO(E, 3), >> GPIO(G, 5) >> }; >> g[0].Set(false); >> g[1].Set(false); >> g[2].Set(true); >> g[1].Set(true); >> GPIO(H, 3).Toggle(); Wie so oft liegt das Problem im nicht gezeigten Code, nämlich was .Set maches soll und warum es g[1] ist.
anbei eine aktualisierte Version ... um Johann's bedenken aus dem Weg zu räumen, und andere potenzielle Fehlerquellen zu entfernen habe ich entsprechend meine Gpio Implementierung entfernt. $ avr-g++ -D__AVR_ATmega1280__ -DF_CPU=16000000L -I/usr/lib/avr/include -I../inc -o main.cpp.obj -v -c ../main.cpp $ avr-g++ main.cpp.obj -o main $ avr-objcopy -O ihex -R .eeprom main main.hex $ sudo avrdude -q -q -C/usr/share/arduino/hardware/tools/avrdude.conf -patmega1280 -carduino -b57600 -P/dev/ttyUSB0 -U flash:w:atmegaCPP.hex Die Warnlevel habe ich bisher noch nicht erhöhen können (ich dachte -Wall müsste was bringen... aber gesehen habe ich das nichts) was ich noch ergänzen muss... Ich AVR-Studio habe ich den Code mit dem Simulator laufen lassen, da war auch alles "schön"... nochmal danke vorab
Ich habe ein CMakefile... entsprechend habe ich die Ausführung manuell vorgenommen... $ avr-g++ -D__AVR_ATmega1280__ -DF_CPU=16000000L -I/usr/lib/avr/include -I../inc -o main.cpp.obj -v -c ../main.cpp $ avr-g++ main.cpp.obj -o main $ avr-objcopy -O ihex -R .eeprom main main.hex $ sudo avrdude -q -q -C/usr/share/arduino/hardware/tools/avrdude.conf -patmega1280 -carduino -b57600 -P/dev/ttyUSB0 -U flash:w:atmegaCPP.hex
Da haben wir doch schon dein Problem. Ein "-D__AVR_ATmega1280__" ist kein adäquater Ersatz für die -mmcu Option. Die musst du auf jeden Fall mit angeben, und zwar nicht nur beim Compilieren, sondern auch beim Linken.
... SUPER, jetzt läufts !!!
Die Option existierte in meiner CMakelist.txt-Datei...
(mittels 'cmake .. -DCMAKE_VERBOSE_MAKEFILE=TRUE' werden die Aufrufe
sichtbar)
die Optionen fehlten jedoch bei der ausführung...
Ursache waren zuviele Leerzeichen im CMakelist.txt :
Falsch:
SET(CXXFLAGS "${CMCU} ${CDEFS} ${CINCS} ${COPT} ${CWARN}") "
Richtig:
SET(CXXFLAGS "${CMCU} ${CDEFS} ${CINCS} ${COPT} ${CWARN}") "
"Darauf muss mann erstmal kommen"
Besten Dank an Stefan und Johann
Ich muss meine erste Fehlerursache korrigieren...
Meine Build-Umgebung mit CMake besteht aus zwei Dateien,
einer CMakeLists.txt und ein
einer allgemeinen Include.cmake (enthält allg. Compiler-Settings)
Auszug aus dem fehlerhaftes CMakeLists.txt:
"
cmake_minimum_required(VERSION 2.8)
include(./Include.cmake)
Project(ProjectName)
set(BUILDRESULT BuildResult)
...
"
Die Compiler-Optionen (die in der Include.cmake) fehlten
in der Ausführung ("rm -rf * && cmake .. && make")
Die Ursache ist, dass das include(...) vor dem Project() steht.
Funktionierende Version ist
"
cmake_minimum_required(VERSION 2.8)
Project(ProjectName)
include(./Include.cmake)
set(BUILDRESULT BuildResult)
...
"
Ergänzen kann ich noch sagen, dass die "fehlerhafte Version"
nach einer Änderung im CMakelists.txt und die Compiler mit den
(bisher vermissten) Optionen ausgeführt wurde...
0 rm -rf *
1 cmake ..
2 make (Ausführung ohne Optionen)
3 CMakeList.txt modifiziert
4 make (Ausführung mit Optionen)
"Alles nicht so einfach" ;-)
VG Matthias
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.