Über die AVR-Libraries
Die AVR Libraries sind bemüht, möglichst viel Funktionalität auf möglichst engem Raum, wie es im Embedded-Bereich häufig erforderlich ist, unterzubringen. Dazu gehört leider auch die explizite Verwendung von RJMP und RCALL, die auf Sprünge innerhalb 4k begrenzt sind.
Das bedeutet, dass die Bibliotheksentwickler hoffen, alle benutzen Teile ihrer Bibliothek passen in 4k (genauer, es entstehen keine Sprünge weiter als 4k) obwohl die gesamte Bibliothek deutlich größer ist. Das ist, aus meiner Ansicht, dumm.
Ich bin relativ schnell auf die Grenze dieser Philosophie gestossen und die Tatsache,
das eine Bibliothek versagt ist extrem frustrierend. Sie kostet jeden Einzelnen den sie betrifft
Tage und Wochen an Arbeitszeit um festzustellen, dass man eigentlich nichts
dagegen tun kann. Die Entwickler der Bibliothek tragen dafür die Verantwortung,
die sie dank der GPL allerdings nichts kostet. Als Software-
Sie haben in dieser Situation keine andere Möglichkeit als die Bibliothek
selbst zu erstellen und mindestens die fraglichen RJMP/RCALL-Befehle durch
JMP/CALL zu ersetzen, also so etwas wie einen privaten Branch der Bibliothek
zu erzeugen. Das eliminiert den Sinn einer Bibliothek, nämlich dass man
sich um elementare Funktionen nicht zu kümmern braucht. Bug reports die dies
bemängeln dümpeln seit 6 Monaten oder mehr vor sich hin ohne dass einer der
Entwickler sich zu einer Entscheidung durchringen konnte. In meinen Augen haben
die AVR-
Deshalb habe ich WITH_UPDATE in meine Sourcen eingefügt, da die Update-Funktion hoffentlich nie benötigt wird und sich die Sourcen ohne sie (noch und aus purem Zufall) mit der AVR-Libc kompilieren lassen. Ich habe keine Möglichkeit gefunden die Reihenfolge und damit die Sprungweite zu den verlinkten Funktionen zu beeinflussen, geschweige denn ein offizielles Statement, wie man nach einem "relocation truncated to fit: R_AVR_13_PCREL" sein Projekt wieder in den Griff kriegt!