Ich versuche gerade von Assembler auf C umzusteigen, weil größer Programme in Assembler einfach Zeitraubend sind, aber irgendwie ist mir das Programmieren mit c noch viel zu unübersichtlich, ich hab keine Ahnung was mein Programm überhaupt macht, jedenfalls nicht das was es soll! Hab das Programm mit AVR-Studio debuggt aber dort kann ich nicht sehen was in den Variablen steht. Sehe nur die Register des MC und versuche mir irgendwas zusammenzureimen?! Ausserdem kann ich keine Unterprogramme überspringen, wenn denn das Unterprogramm eine Information von aussen abfragt, diese natürlich nicht bekommt, hängt der debugger. Das ist mist so! Gibt es einen anderen Debugger? Hier das kleine nicht funktionierende Programm. Der MC hängt sich bei dtostrf(i,2,3,z) auf. #include <stdlib.h> #include <stdio.h> #include "lcd.h" int main(void) { char z[8]; double i; lcd_init(LCD_DISP_ON); lcd_clrscr(); i=134/7; dtostrf(i,2,3,z); lcd_puts("Verdammt"); lcd_puts(z); }
Warum es nicht funktioniert kann ich Dir leider auch nicht sagen, allerdings wird die Zeile i=134/7; vermutlich nicht das tun, was Du willst. In i steht dann 19.00000 drin ("Integer Division"). Was Du willst ist eins von i = 134.0/7; i = 134.0/7.0; i = 134/7.0; i = (double)134/7; i = (double)134/7.0; i = 134/(double)7; i = 134.0/(double)7; i = (double)134/(double)7; (ich hoffe ich hab keins vergessen) Ansonsten kann ich Dir nur Mut zusprechen, C verwenden zu können ist IMHO eine sehr schöne Sache im Umgang mit Mikrocontrollern.
C lässt sich auch mit dem AVR-Studio debuggen. Sogar ziemlich gut, wie ich finde. Allerdigns müßte ich die Anleitung, wie das jetzt ging, noch mal suchen. Mike
Ja, ASM ist einfacher! Man braucht auch nur das Datenblatt, die Befehlsliste und verdammt viel Zeit. Trotzdem ist es besser, wenn man auch C kann. Ich kann es leider (noch) nicht, meine Programme sind aber noch so klein, dass es in ASM noch vertretbar ist. ...
Hi, wunderschön C-typisch! So Probleme habe ich mit Pascal nicht. Aber 100 Mio. (C-)Fliegen können ja bekanntlich nicht irren ... Schau Dir mal die AVRco Demo von http://www.E-Lab.de an !!! Da hast Du dann auch ein (weitestgehend dokumentiertes!) ASM-Listing. C kann nur der DRITTE Schritt sein! Grundlagen sind zwingend in ASM zu lernen / zu verstehen. Gute Programmierung lernt man z.B. in Pascal. Mit so einem Hintergrund ist es dann (für willige Autoren)auch möglich gute (also verständliche und WARTUNGSFAEHIGE) C-Programme zu schreiben. Schöne Grüße Gunter
Bevor hier jetzt religiöse Streitereien ausbrechen: Das Problem liegt nicht in der verwendeten Programmiersprache, sondern nur in der Unfähigkeit von huhu, mit seinem Entwicklungswerkzeug umzugehen. Ohne ihm zu nahe treten zu wollen, was da schief geht, kann man mit einem Debugger herausfinden. Und wenn man sich den gemischten C/Assembler-Quelltext ansieht, dann kann man, genügend Assemblerkenntnisse vorausgesetzt, sogar ziemlich genau herausfinden, was da vor sich geht und die beliebten Pointerfehler und ähnliches durch hinsehen erkennen. Statt im Debugger über die Funktion dtostrf hinwegzusteppen, könnte man ja mal _hinein_steppen und nachsehen, was da passiert.
@Gunter, Wenn ich PASCAL als Nonplusultra akzeptieren soll, muss ich auch BASCOM akzeptieren. Und schon sind wir beim Glaubenskrieg. Wo ich dir aber unbestritten Recht gebe, ist die Tatsache, dass man beim AVR auch mit einer Hochsprache unbedingt ASM-Kenntnisse haben muss (gilt nicht für den PC). ...
"So Probleme habe ich mit Pascal nicht." Du hast immer Probleme, wenn Du eine Sprache nicht kannst, völlig egal ob Basic, Pascal oder C. Es gibt keine idiotensichere Sprache ! Ich habe mit Basic angefangen (aufm KC85). Dann habe ich Turbo-Pascal gemacht (russischer 8086 mit 4 Diskettenlaufwerken und 256kB RAM-Disk). Dann habe ich C gelernt und fand es zuerst schwierig. Dann habe ich C benutzt und nun liebe ich es. Besonders auf Mikrokontrollern, da es verdammt nah an Assembler ist bezüglich Geschwindigkeit, Speicherverbrauch und Möglichkeiten. Basic oder Pascal kommen mir nicht mehr auf den Bildschirm. Viele Routinen teste ich auf dem PC (Borland-C), da C ja portabel ist. Überhaupt würde ich empfehlen, wenn man noch nicht so firm mit C ist, erstmal auf dem PC rumzuspielen. Es macht allerdings auch Spaß, z.B. mit dem JTAG-Debugger direkt auf der Hardware zu testen, z.B. für die Silabs-MCs unter Keil µVision3. Man kann sowohl im Quelltextfenster als auch im Assemblerfenster debuggen. Mit dem AVR-Studio habe ich noch nicht gearbeitet. AVR-Programme teste ich direkt auf dem MC mit Debugausgaben über die UART oder mit LEDs bzw. Teilprogramme ohne Hardwarezugriff eben unter Borland-C. Da 1997 bei der Einführung der AVRs die C-Compiler noch lange nicht ausgereift waren, habe ich auch mit Assembler angefangen. Ich kann also gut die WINAVR-Listings mit dem erzeugten Assembler lesen und verstehen. Peter
Es stimmt schon das PASCAL einfacher zu erlernen ist und sich in dessen Resultaten nicht hinter C verstecken muß. PASCAL war ja auch die erste Programmiersprache die systematisch entwickelt worden ist umd die Programmierung den Studenten beizubringen. Allerdings wenn du es als Anfänger nach zB. 4 Wochen schaffst in PASCAL ein komplizierters Problem zu lösen dann schaffst du das in 6 Wochen mit C auch. Die Frage muß lauten was es für Support und freie Sourcen gibt und wie hoch die Kosten sind. Darunter fällt auch die Entscheidung wie und ob man sich an eine Firma binden möchte. Aus dieser Sicht meine ich sollte man C lernen, denn mit AVRCo bindet man sich an eine Firma. Zudem sind die Kostenz zB. im Vergleich zwischen WinAVR und AVRCo dramatisch unterschiedlich. Assembler ist genauso einfach wie jede andere Programmiersprache, punkt. Nur muß man beim Wechsel der Architektur immer wieder Assembler lernen was bei einer portablen Sprache eben nicht der Fall ist. Und wie oben schon bemerkt liegen die Grenzen beim Asembler in der maximalen Komplexität des Programmes. @Peter: mein "Lebenslauf" ist so ähnlich wie deiner :) Gruß Hagen
Unser 8051-Compiler (Franklin?) spuckt immer noch eine .LST-Datei aus, in der in der ersten Spalte die "Zeilennummer" in der zweiten die Assembler-Befehle und in der dritten quasi als Kommentar die C-Programm-Zeile und dann noch eine Spalte mit den eigenen Programm-Kommentaren aus. Ob das huhus Compiler auch macht, weiß ich ja nicht / kann ich nicht beurteilen, aber es hilft auf jeden Fall, wenn man ASM-Kenntnisse hat, zu verstehen, was der C-Code macht. Dies gilt in beide Richtungen... (wenn man sich bei 8051 vertippt, kommt 0815 raus... komisch. Ist jetzt nicht böse gemeint!) Zum Thema Programmiersprachen: Ich habe damals mit Applesoft-Basic auf einem Apple ][ angefangen, 6502-Assembler war mir damals etwas zu kompliziert (im Alter von 10-12 Jahren hat man auch noch andere Interessen) Als die PCs dann aufkamen (XT mit 4,77MHz lach), wurde TurboPascal und TurboBasic gelernt. Durch meinen Bruder kam ich dann zum 8051. Während meines Versuchs an der Uni Informatik zu studieren, haben sie versucht, mir ML (irgendsone MetaLanguage) beizupulen... Modula-2 war auch dazwischen, erste C-Versuche auf Unix-Maschinen (1995). Jemand schon mal was von "Fifth" gehört? Multitaskingfähige Sprache auf dem 8051. Leider nicht 2000 kompatibel. An der FH dann VisualBasic (für mich die einfachste Art, "hübsche" Windows-Programme zu schreiben) und C (8051, AVR und PC). Mir stellt sich die Frage, warum man solche Sprachen wie Basic unbedingt auf einem AVR implementieren muß. Basic hatte 1986 schon einen wahnsinnigen Overhead (Basic-Interpreter). Ich hab mal gehört, in der DDR waren Programmierer in Basic ziemlich gut, und haben häufig optimalsten Code produziert. Glückwunsch! Der AVR wurde doch IMHO in Anlehnung an C entwickelt (C-optimiert, im Gegensatz zu so manchen anderen Controllern). Alleine schon wegen der Portabilität (millionen Basic-Dialekte, 1 ANSI-C). Klar hat C so seine Eigenheiten, aber wenn man sich näher (beruflich oder als Hobby) mit µControllern beschäftigt, kommt man doch über kurz oder lang weder an ASM noch an C vorbei. Mir hilft immer wieder Kernighan oder Ritchie... Bis jetzt lagen die Fehler in dem Bereich zwischen meinen Ohren bzw. in der Syntax (wohl beliebtester Fehler überhaupt)... Eigentlich gibt es zwischen den Programmiersprachen gar nicht sooo, großen Unterschiede: Alle arbeiten doch nach dem E-V-A-Prinzip. Manche besser als andere. Ich denke, es gibt Basic-Compiler, die besser als so mancher C-Compiler sind, je nach Aufwand, den der Programmierer des Compilers getrieben hat. Muß man sich eigentlich unbedingt mit JAVA auseinandersetzen? Für mich ist das eine Sprache, die mit bunten Sachen verbunden ist. Bunte Sachen kosten nur unnötig Speicher... [Beitragsende] Gruß Rahul
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.