Go Down

Topic: Define aus Bibliothek im Anwenderprogramm überschreiben (Read 625 times) previous topic - next topic

hk007

Hi,

gibt es eine Möglichkeit eine #define-Zuordnung aus einer lib im Anwenderprogramm zu überschreiben, oder muss ich da die Lib abändern.

Grund der Frage:
In der Ethernet-Bibliothek wird die Maximale Framegröße mit 24 byte definiert. Ich bräuchte aber 26  :~
Code: [Select]
#define UDP_TX_PACKET_MAX_SIZE 24

Wenn ich es in der lib abändere, dann hab ich halt jedesmal das Problem, dass ich bei einer neuen Version das wieder nachziehen mus. Und wenn ich es vergesse, dann mault der Compiler nicht, und ich such mir dann den A... ab, wieso das Programm so seltsam reagiert.
Arduino 1.0.5 | Arduino UNO & MEGA | Arduino 1.54r2 mit DUE

Eisebaer

hi,

wäre es eine alternative, eine (angepaßte) kopie der library im sketch-ordner abzulegen?
Du mußt sie dann statt mit <  > mit (ich glaube) "  " einbinden.

gruß stefan

hk007

Hmm ich hab jetzt mal die #define Zeile spasseshalber im Programm ganz am Anfang noch mal deklariert.
Code: [Select]
#define UDP_TX_PACKET_MAX_SIZE 30


Und es geht.......

Sollte es so einfach sein?
Arduino 1.0.5 | Arduino UNO & MEGA | Arduino 1.54r2 mit DUE

Eisebaer

hi,

ich hab' mir mal das hier angesehen:
http://de.wikipedia.org/wiki/C-Pr%C3%A4prozessor
wenn Du die define- vor der include-anweisung hast, funktionierts deswegen wohl..

gruß stefan

hk007

Hi,

ich habs aber genau anders herum:
Code: [Select]
#include <SPI.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
#include <EEPROM.h>

#define UDP_TX_PACKET_MAX_SIZE 30


Und so erscheint es mir auch logischer. Denn so ist die (für mich richtige) define-Anweisung die letzte.

Die Frage ist nur, ob man define mit define übeschreiben darf.
Arduino 1.0.5 | Arduino UNO & MEGA | Arduino 1.54r2 mit DUE

Eisebaer

hi,

Quote
Denn so ist die (für mich richtige) define-Anweisung die letzte.


würde es sich um eine variable handeln, wäre das richtig, aber es ist ja eine einfache textersetzung.
aber ich denke, daß wir da beide im nebel unserer unwissenheit herumsuchen. da müßte jemand genau wissen, wie der präprozessor arbeitet.

gruß stefan

uwefed

Ich würde auch instinktiv sagen, die este #define wird abgearbeitet und dann ist der#define String im Sketch nicht mehr vorhanden und darum greift ein zweiter #define nicht mehr. Jetzt ist auch noch herauszufinden welcher der erste #define ist, der abgearbeitet wird.

Aber es muß mal jemand noch bestätigen, der es sicher weiß.

Grüße Uwe

hk007

Hi,

ich habs jetzt nochmal getestet:
Code: [Select]
#include <SPI.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
#include <EEPROM.h>

#define UDP_TX_PACKET_MAX_SIZE 30

--> es werden 30 Byte im Empfangspuffer angezeigt

Code: [Select]
#define UDP_TX_PACKET_MAX_SIZE 30

#include <SPI.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
#include <EEPROM.h>

--> es werden 24 Byte im Empfangspuffer angezeigt

Ich habe allerdings zwischen den Compilierungen nur den Sketch geändert. Die IDE habe ich nicht neu gestartet, um etwa die libs neu zu lesen.

Auch ich habe keinerlei Ahnung wie so ein Präprozessor das abarbeitet. Es sieht halt in der Praxis (bei meinem Beispiel) so aus, als ob der letzte #define gültig ist.
Wär ja gut für mich. Dann hätte ich für spätere "Updates" der IDE nichts zu befürchten.

Arduino 1.0.5 | Arduino UNO & MEGA | Arduino 1.54r2 mit DUE

Go Up