Vielen Dank für deine netten Ausführungen!!
Nun, also, wenn ich eine saturierung selbst implementieren will, wie gehe ich dann vor?
Nehem wir mal an ich möchte zwei bytes multiplizieren. Also im schlimmesten (grössten) Fall wäre dass dann (2^8-1)*(2^8-1). Das gibt einbisschen (500 oder so) weniger als 2^16. Das würde also in ein word passen. Jetzt kann ich schauen, ob es grösser als 255 ist und gegebenenfalls abschneiden, oder geht das anders?
Code:
// c soll das Produkt von a und b sein
byte a,b,c;
word tmp=a*b;
if(tmp>=255)
c=255;
else
c=tmp;
Und für die Multiplikation von zwei Word dann einfach gleich mit einem dword (int32_t).
Äh und noch zum inlining. Du hast erwähnt, dass dies den Code verlangsam kann. Also zugegebenerweise habe ich mich nie genau damit beschäftigt. Ich habe jetzt einmal in meinem C-Buch (Programmieren in C von Kernighan und Ritchie) nachgeschaut und nichts dazu gefunden.
Also ich dachte, bei einer inline-funktion, werde der code einfach reinkopiert und dabei noch von den parameter-variabeln eine neue instanz angelegt. Wie das mit dem return genau funktionieren könnte habe ich mir nie überlegt. Irgendwie muss da ja noch ans ende gesprungen werden. Das basiert jedoch auf keinen Unterlagen, das habe ich einfach mal so angenommen.
Ich dachte, mit inline könne man die Ausführgeschwindigkeit des Codes steigern auf kosten der Compilatgrösse. Stimmt das nicht so? Oder in welchen Fällen stimmt das so?
Und noch zu den Verzeichnissen vom GCC. Ok, das mag ja seinen Sinn haben. Ich bin da nur geich einwenig erschrocken und habe mich dann entschlossen eine komplett eigene Bibliothek anzufertigen, damit ich verstehe, mit was ich programmiere. Ich habe auch beim programmieren furchtbar Angst vor dem Unbekannten
, welches im Hintergrund für mich nicht nachvollziehbare Dinge tut. Die IO-Definitionen habe ich zu einem grossen Teil aus der AVR-Lib-C rauskopiert.
Grüsse cumi
Lesezeichen