Hallo zusammen. Als aller erstes ein grosses Kompliment zu dieser perfekten Knowledge-Base hier im Forum! Erst vor kurzem habe ich begonnen mit AVR Derivaten (ASM und GCC) zu programmieren und stehe nun vor einem Problem. Ich verwende den ADC eines ATMega 32 (AVR Studio 4, AVR-GCC), um eine Spannung (Genauigkeit ist für diese Art der Anwendung erstmal zu vernachlässigen) zu messen und es am LCD mit Festkommaarithmetik auszugeben. Habe schon die Routinen zur Festkommaarithmetik verwendet und soweit bekomme ich es auch hin. Also Umwandlung des ADC Wertes in einen zuerst mit '0' führender String funktioniert. Es ist eine unidirektionale Messung, es können also nur positive Werte auftreten. Nur ich bekomme es nicht hin, den Dezimalpunkt (Wert vor dem Dezimalpunkt "." Nachkommastellen) in den gleichen String zu packen, der dann als Gesamtstring ans LCD mit dem Befehl lcd_string ausgegeben werden soll. Das Display zeigt immer nur wirre Dinge an. In der Routine (Artikel Festkommaarithmetik) ist das mit lcd_data gemacht worden, ich benötige aber erst einen kompletten Sting zur Ausgabe. Hat jemand eine Idee, wie das gemacht wird? Mfg Marco
1 | for (i=0;i<strlen(string);i++) |
Das ist VIEL zu langsam, das sollte man nicht machen! Es wird bei jeden Schleifendurchlauf die länge vom STring neu ermittelt. besser ist es so:
1 | while ( *string ) { |
2 | string++; |
3 | ...
|
1 | |
2 | if((string[i] == '0') && (flag == 0)) |
3 | nop(); |
4 | |
5 | if((string[i] != '0') && (flag == 0)) |
6 | {
|
7 | string_p[k] = string[i]; |
8 | flag = 1; |
9 | k++; |
10 | }
|
war erwartest du von dem IF mit dem nop?
Hallo Peter. Zuerst vielen Dank für die sehr schnelle Antwort. Ich habe bereits deinen Artikel „Formatierte Zahlenausgabe in C“ durchgelesen und habe auch versucht deinen Programmcode in meinem Testprogramm einzufügen. Wenn ich das richtig verstehe (bitte korrigieren, wenn ich falsch liegen sollte), muss ich die „valout“ – Fkt folgendermassen in mein Programm einbinden: valout( Wert, Anzahl_der_Digits, Position_des_Dezimalpunktes, String_Array); Der ADC Wert kommt aus meiner unsigned int AdcSample(void) – Fkt, der dann noch in einer Formel in main (void) weiter berechnet wird. Das muss in Wert bei valout eingesetzt werden, richtig? Kann ich in meinem Programm für das String_Array einen char Buffer[32] deklarieren, den ich später mit lcd_string(Buffer); // Send text to display an das Display ausgeben kann? Ich erhalte leider noch folgende Fehlermeldung / Warnungen: ../Voltage_Meas.c:177: warning: pointer targets in passing argument 4 of 'valout' differ in signedness D:\Spannungsmessung_ADC\C\FKA\default/../Voltage_Meas.c:177: undefined reference to `valout' Habe ich noch etwas vergessen in den Header zu schreiben? Vielen Dank schonmal für die Unterstützung. Mfg Marco
Hallo zusammen. Ich habe nun die letzten Tage versucht die valout-Fkt zum Laufen zu bringen. Es scheitert immer noch an folgender Fehlermeldung: ../Ausgabe.c:13: undefined reference to `valout'. Bin langsam verzweifelt, was mache ich falsch? Habe die Dateien als Anhang angehängt, wäre cool, wenn sich das jemand mal anschauen könnte. Vielen Dank Mfg Marco
Hallo zusammen. Habe es geschafft. Das Programm läuft, wie es soll. Vielen Dank nochmals an Alle, die mir geholfen haben. Schöner Abend Mfg Marco
Stefan Frings schrieb: > Warum hast du nicht einfach printf oder sprintf benutzt? Weil man sowas bei einem uC-Projekt nicht benutzt. Nur Knalltüten, die da glauben, sich auf nem uC genauso benehmen zu müssen wie auf dem PC, benutzen sowas. Das ist die Sorte, die sich auch über das Fehlen von Dotnet auf'm 8 Bit Atmel mokiert. W.S.
W.S. schrieb: > Stefan Frings schrieb: >> Warum hast du nicht einfach printf oder sprintf benutzt? > > Weil man sowas bei einem uC-Projekt nicht benutzt. Was natürlich Blödsinn ist. Wenn ich den Speicher hab und die Laufzeit nicht kritisch ist, spricht nichts dagegen sprintf einzusetzen. Für nicht verbrauchten Flash gibts kein Geld zurück.
Karl Heinz Buchegger schrieb: > Was natürlich Blödsinn ist. > Wenn ich den Speicher hab und die Laufzeit nicht kritisch ist, spricht > nichts dagegen sprintf einzusetzen. Diese Argumentation ist natürlich genauso Blödsinn. Es kommt draufan, in welcher Richtung man die Anwendung optimiert. Für eine, bei der es auf Stromverbrauch oder Bauteilkosten ankommt, wird man anders optimieren als bei einer, wo Ziel ist, die Sache irgendwie schnell zum Laufen zu bringen.
HattenWirGerade schrieb: > Karl Heinz Buchegger schrieb: >> Was natürlich Blödsinn ist. >> Wenn ich den Speicher hab und die Laufzeit nicht kritisch ist, spricht >> nichts dagegen sprintf einzusetzen. > > Diese Argumentation ist natürlich genauso Blödsinn. > > Es kommt draufan, in welcher Richtung man die Anwendung optimiert. OK. Ich hab noch den Stromverbrauch vergessen. Ich könnte allerdings auch noch argumentieren, dass der Stromverbrauch in der Laufzeit implizit mit drinnen ist. Je langsamer, desto länger kann der µc nicht in den Sleep gehen, desto mehr Strom verbraucht er. Aber wollen wir jetzt wirklich auf des Kaisers Bart rumreiten?
Karl Heinz Buchegger schrieb: > Aber wollen wir jetzt wirklich auf des Kaisers Bart rumreiten? Nö. Aber ich sehe hinter solchen Bemerkingen wie der vom sprintf ganz deutlich den Willen zur Ahnungslosigkeit. Ich entsinne mich an eine Bemerkung (vor vielen Jahren) von jemandem, der sich darüber mokierte, daß er auf'm PIC ja nur lächerliche 8 Plätze im Stack hat, wo er doch gewöhnt sei, mindestens 8 K an Stack zu haben. Ahnungslos, großkotzig und eigentlich unfähig, aber mit der Attitüde des Großmeisters. Genauso ist das hier mit sprintf und Konsorten. Immer kommt das Argument "ja wenn ich doch auf dem uC sooo viele ungenutzte Ressourcen habe, warum sollte ich da selber nachdenken oder gar sparsam sein?" Bei so einem Burschen würde ich anregen, daß sein Chef ein bissel sparsamer mit dem Salär wäre. Alternativ könnte man dem Burschen nahelegen, seine Algorithmen zu überdenken, damit man den nächstkleineren und billigeren uC einsetzen kann. W.S.
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.