Danke, ich habe mal in meiner eigener systemvariablen gekückt. Stimmt, genau. Ich wuste nicht das PATH automatisch eingestellt war.
Druckbare Version
Danke, ich habe mal in meiner eigener systemvariablen gekückt. Stimmt, genau. Ich wuste nicht das PATH automatisch eingestellt war.
ich habe eine kleine Frage. Wo wird die F_CPU Variable, die in der Datei asuro.c bei der Funktion Init() benutzt wird, deklariert? es wäre sehr nett, wenn mir da jemand weiterhelfen könnte.
Code:#if defined(__AVR_ATmega168__)
UBRR0L = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1);
UBRR0H = (F_CPU/(BAUD_RATE*16L)-1) >> 8;
UCSR0B = (1<<RXEN0) | (1<<TXEN0);
UCSR0C = (1<<UCSZ00) | (1<<UCSZ01);
#else
UBRRH = (((F_CPU/BAUD_RATE)/16)-1)>>8; // set baud rate
UBRRL = (((F_CPU/BAUD_RATE)/16)-1);
UCSRB = (1<<RXEN)|(1<<TXEN); // enable Rx & Tx
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); // config USART; 8N1
#endif
Sorry, ich habe das jetzt gefunden. Wird in dem Makefile definiert.
Das ist eine die erste werten die im makefile deklariert werden. Schau mal in die makefile im lib examples.
Hallo marvin,
weshalb ist den asuro.c (hier konkret die Init()-Funktion) nicht in der libasuro.a aufgenommen? Gibt es technische Gründe dafür?
Hallo rossir,
einen driftigen Grund dafür gibt es nicht. Bei Bedarf kann man Erweiterungs Module (LCD, Ultraschall) gleich mit initialiseren, ohne die Lib neu zu übersetzen müssen.
Mit der nächsten Version ist das sowieso alles hinfällig, dann benötigt man keine extra Objekt Library mehr.
Man übersetzt zukünftig einfach alles und über ein paar spezielle Compiler und Linker Optionen im Makefile entfernt der GCC dann alle nicht verwendeten Funktionen und Daten aus dem übersetzten Programm.
Wie das funktioniert, kann man hier nachlesen:
http://www.mikrocontroller.net/topic/103306
Hallo Marvin,
noch was: Wie kann ich eine eigene IsrEnc(void) zum Einsatz bringen ohne die Lib neu zu erzeugen (bzw. anfassen zu müssen)? Irgendwie sieht die Lib heute so aus als könnte man dies erreichen (denn welchen Sinn macht die Variable AdcIntFunc sonst?) aber ich weiß nicht wie ich dies anstellen soll.
Hallo rossir,
eine eigene IsrEnc Funktion einbinden ist recht einfach. Du schreibst deine Funktion (wichtig ist Parameter und Rückgabwert muß void sein)
Deine Funktion bindest du dann einfach mit der folgender Zeile ein:Code:void myIsrEnc(void)
{
// tu was
}
Genauso wird es in der EncoderInit Funktion gemacht.Code:AdcIntFunc = myIsrEnc;
Danke!! Bin ich nicht drauf gekommen, war zu einfach ;-). Also, dann immer die folgende Reihenfolge:
Ich dachte, ich brauche nur eine gleichnamige Funktion schreiben und schwupps ... würde meine genommen.Code:EncoderInit();
AdcIntFunc = myIsrEnc;
Schade eigentlich, denn wenn Du dann demnächst mit den angekündigten speziellen Compiler und Linker Optionen kommst sind beide Funktionen im HEX-File: IsrEnc und myIsrEnc. Oder?
Hmm, das könnte sogar funktionieren. Habe ich aber selbst noch nicht ausprobiert.Zitat:
Zitat von rossir
Das wäre mit der Objekt Lib genauso.Zitat:
Zitat von rossir