Hallo an alle, ich habe mal eine grundsätzliche Frage zu Assembler. Ich bin erst vor wenigen Wochen mit uC gestartet und habe mit Bascom angefangen, weil ich da schon einige Kenntnisse hatte. Nach einem Beitrag hier im Forum haben mich dann einige von Euch 'freundlich' darauf hingewiesen ;-), dass man mit Assembler die Programmierung besser hinbekommt und besser versteht was im uC eigentlich vorgeht. (Ich will aber keinen neuen Tread starten, welche Sprache die beste ist - gibts schon genügend). Also habe ich mich etwas in Assembler eingearbeitet und mit dem Tutorial befasst. Einige Codes habe ich dann auch hinbekommen (LCD/Uhr). Aber wenn ich ehrlich bin, also so richtig 100%ig habe ich nicht alles verstanden. Man kann dann versuchen, hier im Forum zu fragen und einige Schnipsel auffangen, um seinen Code funktionsfähig zu bekommen. Manchmal wird man aber im Forum auch etwas 'von der Seite angeredet', wenn eine Frage gar zu einfach oder primitiv erscheint. Ich hatte mir auch noch ein Buch besorgt, das habe ich aber zurrückgegeben, weil da für mich nur 'Böhmische Dörfer' drinstanden. Also meine Frage, auch an die Erfahrenen oder Profis: Ist Assembler nur durch Studium des Tutorials und der Datenblätter im Selbststudium einigermaßen gut zu erlernen? Oder braucht's da mehr? Mein Anspruch war eigentlich auch, irgend wann mal, für eine eigene Aufgabenstellung eigenständig meinen Code zu entwerfen und nicht nur nachzubauen. Wäre nett, wenn mir der Eine oder Andere seine Erfahrung mitteilen würde. Axel
>Also meine Frage, auch an die Erfahrenen oder Profis: Ist Assembler nur >durch Studium des Tutorials und der Datenblätter im Selbststudium >einigermaßen gut zu erlernen? Oder braucht's da mehr? Mehr brauchts tatsächlich nicht. Außerdem gibts im Netz auch noch viele andere (ebenfalls gute) Tutorials.
Am Anfang isses schwer, aber schon möglich ich habs ja auch hinbekommen ;) Allerdings würd ich empfehlen bei was einfachem zu beginnen, z.B. Ansteuerung eines Schieberegisters (ohne interne SPI) oder einer 7SegAnzeige oder so, und dann schritt für schritt überlegen: - Was muß passieren - Wie würde ich das normalerweise programmieren - Wie setz ich das in ASM um (Befehlsliste ist da hilfreich) Ist natürlich etwas erfahrung dabei, am Anfang verdrehts einem son bischen die Gehirnwindungen, mach aber Spaß :)
Datenblatt zum Chip lesen, verstehen was die Befehle machen und erstmal selbst loslegen mit programmieren. Wenn man dann mal an seine Grenze stösst, dann in fremdem Code nachsehen wie Andere es machen, sonst lernt man nix. Erst wenn man selbst verstanden hat was die Befehle tun, kann man nachvollziehen was in fremdem Code steht. Ich schreibe ausdrücklich nachvollziehen nicht abtippen. bye Frank
Hallo Axel, du machst das schon richtig. Am Anfang brauchst du Durchhaltevermögen und mußt dich auch mal stunden- oder tagelang durch ein Problem durchbeißen. Aber mit wachsender Erfahrung wird es dir dann nach und nach möglich, deine Vorstellungen auch umzusetzen. Was hilft ist natürlich das Datenblatt deines Controllers wälzen, auch wenn man nicht immer alles bis gar nix auf Anhieb versteht. Und dann versuchen in kleinen Progrämmchen das auszuprobieren, was man sich da rausgezogen hat. Und nicht zuletzt gibt es dieses hilfreiche Forum, mit dem man auch erst lernen muß umzugehen und sich vor allem nicht durch bescheuerte Antworten abschrecken lassen darf. Früher oder später wirst du wahrscheinlich nicht um C herumkommen. Welchen Hintergrund hast du? Hast du beruflich oder in der ausbildung mit solchen Saachen zu tun? Viel Spaß Boxi
Hallo Ich hab das so gemacht: Fertigen Code genommen und mit die Funktionen auf einem Testboard angeschaut. Dann überlegt was ich verändern könnte und es auch versucht. So Stück für Stück eingearbeitet. bye
ich habe mit der seite angefangen. http://www.avr-asm-tutorial.net/ ich habe nur die blink-LED progamme abgeschrieben, dann modifiziert. am anfang ein lauflicht drausgemacht. dann irgendwelche muster. Zuerst das einfache ohne hardware-timer und dann das mit timer und interrups. Den Rest habe ich dann mit den datenblatt und dem instucten-set von Atmel gemacht. Das geht dann schon relativ einfach und ist nur mit mäßig frust verbunden :) zum üben. schreibe in ASM for/while schleifen, if then strukturen. Das hilft ungemein :) und halte dich bei denen nicht daran wie das andere machen. versuche selber mal rauszufinden wie das geht. im blinkledprogramm ist ja schon alles drin
> Mehr brauchts tatsächlich nicht.
Sowas nennt man pädagogisch-didaktische 'Blinde-Kuh' spielen.
Du kannst hier auch Anfängerfragen stellen, nur mußt Du es dem Antworter nicht unnötig schwer machen. Wenn der erstmal ne halbe Stunde recherchieren muß, wovon Du überhaupt sprichst, ist klar, daß er verärgert reagiert. Wenn Du Dich also auf irgendwelche Codebeispiele beziehst, nicht lange um den heißen Brei reden, sondern exakt URL, Filename, Zeilennummer angeben, wo Du das Problem hast. Wenn Du einen Beispielcode modifizierst, dann nicht umständlich erklären, wo Du X durch Y ersetzt hast, sondern das komplette File als Anhang schicken. Und niemals irgendwas aus dem Gedächtnis aufschreiben, sondern immer Copy&paste! Wenn dann noch das Subjekt beschreibend ist, also nicht "helft mir!!!", dann sollten auch gute Antworten kommen. Wenn Du Schwierigkeiten mit Grundlagen hast (wie berechnet man einen Basiswiderstand, LED-Vorwiderstand, was sind Binärzahlen, AND, OR, was ist SRAM, EEPROM, was sind Adressen, Daten usw.), dann sag das. Sonst wird sowas vorausgesetzt. Peter
Axel Hüser wrote: > Hallo an alle, > > ich habe mal eine grundsätzliche Frage zu Assembler. Ich bin erst vor > wenigen Wochen mit uC gestartet und habe mit Bascom angefangen, weil ich > da schon einige Kenntnisse hatte. Nach einem Beitrag hier im Forum haben > mich dann einige von Euch 'freundlich' darauf hingewiesen ;-), dass man > mit Assembler die Programmierung besser hinbekommt und besser versteht > was im uC eigentlich vorgeht. (Ich will aber keinen neuen Tread starten, > welche Sprache die beste ist - gibts schon genügend). Es gibt ähnliche Hinweise (Assembler ist doll zum Verstehen und Ausreizen eines µC). Es gibt auch gegensätzliche (Assembler ist für Programmieranfänger nicht so doll). Ich kann beiden zustimmen ;-) > Also habe ich mich etwas in Assembler eingearbeitet und mit dem Tutorial > befasst. Einige Codes habe ich dann auch hinbekommen (LCD/Uhr). Aber > wenn ich ehrlich bin, also so richtig 100%ig habe ich nicht alles > verstanden. Genau an der Stelle möchte ich einhaken: Das Tutorial ist nicht in Stein gemeisselt. Es kann jederzeit verständlicher und ausführlicher geschrieben werden. Die Autoren von Tutorials sind oft keine Anfänger mehr und es fällt schwer sich in den Wissensstand eines Anfängers einzudenken. Hilf' den Autoren, sag' wo es klemmt. Du bist sicher nicht der Einzige, der an manchen Stellen Probleme hat. Wenn keiner seine Probleme meldet, kann es nicht verbessert werden. > Man kann dann versuchen, hier im Forum zu fragen und einige > Schnipsel auffangen, um seinen Code funktionsfähig zu bekommen. Manchmal > wird man aber im Forum auch etwas 'von der Seite angeredet', wenn eine > Frage gar zu einfach oder primitiv erscheint. Kann passieren. Eine Frage "Ich mache gerade das Beispiel x aus dem Tutorial durch, verstehe aber a im Schritt C nicht. Kann mir jemand dabei helfen?" wird funktionieren. > Ich hatte mir auch noch > ein Buch besorgt, das habe ich aber zurrückgegeben, weil da für mich nur > 'Böhmische Dörfer' drinstanden. > > Also meine Frage, auch an die Erfahrenen oder Profis: Ist Assembler nur > durch Studium des Tutorials und der Datenblätter im Selbststudium > einigermaßen gut zu erlernen? Oder braucht's da mehr? Meiner Ansicht nach, sollte man eine Grundidee haben, wie Programmierung an sich funktioniert. Wie man dann ein Programmkonstrukt (Abfrage/Entscheidung oder eine Schleife) realisiert, kann man sich aus den vorgegebenen Sprachelementen zusammensuchen. Das Einarbeiten in das Programmieren an sich, fällt (fiel) mit mir Hochsprachen wesentlich leichter. Assembler in allen möglichen Varianten lerne ich nebenbei beim Debuggen von Hochsprachencode. > Mein Anspruch war eigentlich auch, irgend wann mal, für eine eigene > Aufgabenstellung eigenständig meinen Code zu entwerfen und nicht nur > nachzubauen. Das wirst du auch irgendwann schaffen. Wenn es dich tröstet: Viele Leute, auch welche die langjährig programmieren, suchen sich bei einem neuen Projekt erst Beispielcode, der in die geplante Richtung geht und ändern den ab, bis die Sache verstanden ist. Was komplett eigenes kann man dann immer noch machen. > Wäre nett, wenn mir der Eine oder Andere seine Erfahrung mitteilen > würde. > > > Axel
> Ist Assembler nur > durch Studium des Tutorials und der Datenblätter im Selbststudium > einigermaßen gut zu erlernen? Oder braucht's da mehr? Du brauchst zwingend ein gutes Buch das dir die Assemblerprogrammierung anhand eines Prozessors erklaert. Wichtig ist dabei nicht das du die Befehle eines Prozessors kennst oder aehnlichen Unsinn. Sowas lernt man naemlich automatisch nebenbei. (1) Du musst die Hintergruende verstehen, also was Zeiger sind und wo man sie einsetzt, was ein Stack macht, wieso schieben und multiplizieren identisch ist, Unterschied zwischen schieben und rotieren, Bedeutung von And/Or/Xor, Verhalten bei Ueberlauf eines Registers. Was ein IRQ macht usw..usw... Wenn du das alles mal fuer einen Prozessor verstanden hast dann kannst du den Dialekt des naechsten Prozessors verstehen indem du einfach nur das Datenblatt liesst. Und dieses wissen ist es auch das du spaeter mitnimmst und brauchst um eine beliebige Hochsprache einzusetzen. Wenn man glaubt sich das sparen zu koennen und einfach nur schaut was mov a,b macht wird man immer nur Loser 2.er Klasse bleiben. Olaf 1: In meinem Falle war das uebrigens Programing of Z80 von R.Zaks. Das Buch waer auch heute noch gut, aber ist eher unbrauchbar weil du die Beispiele nicht an einem praktischen Prozessor nachvollziehen kannst da du keinen Microcontoller auf Z80 Basis hast. Aber dein Buch sollte halt in die Richtung gehen....
@Axel Hüser: Ich dachte auch, dass mir ein Buch helfen könnte und kaufte das AVR-Buch von Stolpe (Elektor). Nunja, wirklich geholfen hat es mir nicht, wenn Du mal reinschnuppern willst, kann ich es Dir gerne mal für ein paar Wochen leihen. Ein gutes Buch betreffs AVR-ASM-Einstieg kann ich Dir nicht empfehlen, ich kenne keins und ich werde nicht alle durchprobieren. Wenn es Dir nicht um die Erklärung des Befehlssatzes geht, sondern eher um Allgemeines oder um Algorithmen, dann solltest Du auch mal die Online-Version des Rowalt-Buches lesen. Das ist zwar nicht für ASM sondern orientiert sich an BASCOM, hat aber auch für den ASM-Anfänger recht interessante Informationen. Es gibt zumindest Denkanstöße. Das Wichtigste wird wohl (wie überall beim Lernen) sein, dass Du nicht zu große Schritte auf einmal machst. Du solltest in eigenen Programmen darauf achten, dass Du jede Codezeile (im Zusammenspiel mit den beteiligten Codezeilen) auch wirklich verstehst und auch sagen kannst, warum Du das so und nicht anders gemacht hast. Nur Copy & Paste reicht da nicht. Zu den "schrägen Antworten". Wenn der Helfende sieht, dass die Frage unüberlegt war oder dass der Fragende nur zu faul war, ins Datenblatt zu schaun, dann gibt es schon mal (auch von mir) eine schräge Antwort. Ist die Frage jedoch eindeutig, dann gibt es auch eine eindeutige Antwort. Manchmal ist die Antwort aber auch etwas in Humor eingebettet, also nicht gleich beleidigt sein. Und wenn Du auf ASM-Fragen mal BASCOM- oder C-Antworten bekommst, dann ignoriere sie doch einfach. Besonders schräge Antworten ernten die, die mit Null Vorkenntnissen gleich die ultimative Weltverbesserungslösung realisieren wollen und dabei nicht erkennen, dass die Naturgesetze nicht im Gesetzbuch stehen, also nicht umgangen, gebrochen oder ignoriert werden können... ...
Ich hab mir damals ein gutes Buch gekauft, dass benutze ich heute noch als nachschlagewerk, das hat zwar 40 euro gekostet, aber war den preis auf alle fälle wert. Das behandelt sogar auch den einstieg in c. Den Name weiss ich grade nicht mehr ist aber vom oldenbourg verlag.
Hallo, kann es sein, dass es sich dabei um dieses Buch handelt? http://www.oldenbourg-wissenschaftsverlag.de/olb/de/1.c.1186622.de Kennt noch jemand dieses Buch? Möchte mir nämlich auch ein Buch zulegen, um weiter in die materie eintauchen zu können! Danke im Vorraus auf eure Antworten MFG
Hi Ein gutes Buch ist für den Anfang auf jeden Fall zu empfehlen. Als ich mit Programmieren angefangen habe, war an Internet überhaupt noch nicht zu denken. Da ging es gar nicht ohne. Wenn das oben genannte halbwegs das hält, was es verspricht, scheint das ein guter Einstieg zu sein. Noch ein kleiner Tipp: Versuche dein Programm in überschaubare 'Häppchen' einzuteilen. Die kannst du dann im Simulator ausgiebig testen. Am besten in einem seperaten Programm, das nur die notwendigen Initialisierungen enthält. MfG Spess
ich hab mit diesem: http://www.amazon.de/Mikrocomputertechnik-Controllern-AVR-RISC-Familie-Programmierung-Assembler/dp/3486580167/ref=sr_1_3?ie=UTF8&s=books&qid=1196439233&sr=8-3 angefangen, ich glaub das zuvorgenannte ist da nur die dritte Auflage davon, kanns aber absolut empfehlen. Die verwendeten AVRs sind zwar nicht unbedingt die Aktuellsten, aber das kann man meist einfach übertragen. Zur Not schaut man halt doch in Datenblatt und sucht sich das beschriebene Register für seinen Chip raus. DAS TEIL IST GUT.
Ich habe mit Hilfe des AVR Instruction Set (1) asm auf AVR gelernt. Zugegeben, ich konnte vorher schon auf dem C64 BASIC programmieren. Das wichtigste, um auch nach einer Woche Unterbrechung an seinem Project weiter zu kommen ist, dass man sein Programm in funktionale Abschnitte einteilt. Hochsprachler würden sagen "Objekt orientiert". Weiterhin ist auf ein Programmablaufplan (2) sehr vorteilhaft, um sich später noch im vielen (zumeist unkommentierten) Code zu zurecht zu finden. Außer der AVRStudio Hilfe (Präprozessoranweisungen) habe ich nix weiter gebracht, um diverse kleinere Sachen erfolgreich umzusetzten. (1) http://www.atmel.com/dyn/resources/prod_documents/doc0856.pdf (2) http://de.wikipedia.org/wiki/Bild:Flussdiagramm_%28Programmablaufplan%29.png
Hi! Ich denke 'nur' das Datenblatt zu lesen wird nicht helfen weil da zb. nicht drinnsteht wie man in ASM eine Wurzel zieht, 16x16 Bit multipliziert, oder 1024 x 1,6 rechnet. Dazu muss man dann schonmal irendwo "mausen" gehen, auch wenn es nur mit den Augen ist.(Grundlagenwissen mal vorrausgesetzt) Das I-Net ist aber recht hilfreich und Fragen kostet nichts. Eine genaue Problembeschr. ist allerdings sehr hilfreich. -und Dummschwätzer sind überall zu finden. Viel Erfolg, Uwe
Hallo an alle, also erstmal vielen Dank für Eure Erfahrungsberichte. Es hat mich sehr darin bestärkt, jetzt mit Assembler doch weiter zumachen. Ich war schon fast wieder soweit, auf Basic umzusteigen. "Welchen Hintergrund hast du? Hast du beruflich oder in der ausbildung mit solchen Saachen zu tun?" Also ich programmiere nur zu meinem Vergnügen, um am Wochenende mal etwas von meinem Job abschalten zu können. Es macht mir halt viel Spass. Früher habe ich viel VBA programmiert, deshalb zuerst meine Vorliebe für Basic. Vielleich habe ich mir am Anfang auch etwas zuviel zugemutet (LDC, Uhr). Ich werde mir erstmal nochmal Blink-LEDs, Lauflicht und Taster zu Gemüte führen. Das Datenblatt von meinem Atmega, sowie die Befehlscodes verwende ich auch immer. Ich werde mich vielleicht mal noch nach einem Buch umsehen. Also Danke nochmal Axel
Ich denke du hast das schon richtig erkannt, ein Projekt mit LCD und einer Uhr ist für den Anfang sicher zu komplex. Sowas endet nur darin, dass einem die Lust am Programmieren vergeht. Vergleich das einfach mal mit einer Fremdsprache, die du in der Schule lernst, da kann man nach einer Woche eigentlich auch noch nichts, versuch dich dann mal mit einem aus dem entsprechenden Land zu unterhalten, der wird dich nur schief angucken. Dein Compiler bzw. dein µC ist ja eigentlich nichts anderes als jemand, der eine "Fremdsprache" spricht. Ich kann dann leider manche Beiträge hier im Forum nicht verstehen, wo geschrieben wird "Ich bin Anfänger und ich will eine Funkuhr programmieren. Wie mach ich das?" Ich denke jeder muss sich als erstes mit den einfachen Dingen (LED, Taster, 7-Segment usw.) beschäftigen. Da kommen auch schnell die Erfolge und man hat Spaß am Programmieren. Das ganze steigert man dann halt immer weiter. Es geht am Anfang ja auch nicht darum, dass man wirklich was für den Alltag brauchbares programmiert. Mein Devise war da eigentlich immer: "Vor dem Anwenden kommt das Lernen".
Wenn du wirklich ASM programmieren möchtest (was ich für nen Anfänger nicht so toll finde) hol dir den GCC (z.B. Winavr, kostenlos). Wenn du dann nicht weiter kommst, kannst du versuchen die Funktion in C zu schreiben, was normalerweise leichter fällt und dann einfach das .lst-File anschauen. Da steht dann jeweils eine Zeile C code und darunter der erzeugte ASM code. Da kann man sich dann ganz nett Ideen holen wenn man nicht weiter kommt.
Martin wrote: > dann nicht weiter kommst, kannst du versuchen die Funktion in C zu > schreiben, was normalerweise leichter fällt und dann einfach das > .lst-File anschauen. Da steht dann jeweils eine Zeile C code und > darunter der erzeugte ASM code. Da kann man sich dann ganz nett Ideen > holen wenn man nicht weiter kommt. Nach dieser Methode sollte man aber wirklich erst dann verfahren, wenn man in der Befehlsreferenz des Controllers nichts passendes findet und wirklich nicht mehr weiter weiss. Der Code der Funktionsbibliotheken der avrlibC sind sehr generell gehalten und enthalten oft "Sicherheitsmechanismen" die man oft gar nicht braucht. Auch sind sehr oft irgendwelche mathematischen Berechnungen sehr komplex gehalten (Gleitkomma) und oft es es möglich mit Hilfe von Tabellen oder maschinennahen Rechenoperationen (siehe beispielsweise div_t) sehr viel schneller und unkomplizierter arbeiten zu lassen. Ich bin zwar generell kein Freund von Assemblerprogrammierungen, dennoch ist es richtig und wichtig, es zu beherrschen. Denn nur wer Assembler beherrscht, weiss wie man in C performanten und grössenoptimierten Code schreibt.
Niels Hüsken wrote: > ... Denn nur wer Assembler > beherrscht, weiss wie man in C performanten und grössenoptimierten Code > schreibt. Danke... ...
Niels Hüsken wrote: > Hannes Lux wrote: > >> Danke... > > Wofür? Weil ich diese Aussage von Dir nicht erwartet hatte. Hattest Du nicht bisher Jeden davon abbringen wollen, Assembler zu lernen? Oder habe ich da etwas verwechselt? Bit- & Bytebruch, Hannes
Hannes Lux wrote: > Hattest Du nicht bisher Jeden davon abbringen wollen, Assembler zu > lernen? Oder habe ich da etwas verwechselt? Nicht Grundsätzlich. Ich rate jedem Anfänger und "unbedarften" sich erstmal mit C oder Basic zu beschäftigen, solange, bis man ungefähr weiss, was die Hardware von einem will. Ich finds grauhenhaft, wenn die Studis hier mit ihren ersten Gehversuchen mit LC-Displays ankommen, mit irgendwelchen vorgefertigten Assemblercode, den sie selber nicht verstehen, und der natürlich auch auf Anhieb nicht funktioniert. Ich denke, in C oder Basic kann man sich als Anfänger deutlich schneller einlesen, als direkt mit dem grossen Assembler-Hinkelstein wie Obelix in die Haustür einzufallen.
Niels Hüsken wrote: > Ich denke, in C oder Basic kann man sich als Anfänger deutlich schneller > einlesen, als direkt mit dem grossen Assembler-Hinkelstein wie Obelix in > die Haustür einzufallen. Nunja, das ist Ansichtsache. Ich hatte bei AVRs mit dem AT90S1200 begonnen. Da war nichts mit C oder ASM, später bei Tiny12/15 auch nicht, ich vermisste es aber auch nicht. Und nun ist AVR-ASM für mich der Weg des geringsten Widerstandes. Ein Programm tut halt das, was man programmiert hat und nicht das, was ein Compiler optimiert hat. Und da der AVR auch nur Assembler (in Form von Maschinencode, der nur in ASM eindeutig notiert werden kann) kann, habe ich die wenigsten Missverständnisse, wenn ich in seiner Sprache mit ihm spreche... ;-) Nein, ich bin kein Gegner von C, wer auf anderen Plattformen C bereits beherrscht, der soll auch auf dem AVR in C arbeiten. Aber der stellt auch nicht solche allgemeinen Fragen und weiß vermutlich auch, dass das Benutzen einer Hochsprache das Lesen des Datenblattes nicht erspart. Nein, ich bin auch kein Gegner von BASIC, habe schon mit verschiedenen Dialekten gearbeitet und nutze es auf dem PC immer noch. Aber mit BASCOM kann ich mich nicht anfreunden. ...
Hannes Lux wrote: > des geringsten Widerstandes. Ein Programm tut halt das, was man > programmiert hat und nicht das, was ein Compiler optimiert hat. ..was nicht immer ein Vorteil sein muss, denn manchmal kann der Optimierer recht hilfreich sein. C wurde vorwiegend entwickelt, um den Assemblercode lesbarer zu machen. Und das ist den Herren Kerningham und Richie ausgesprochen gut gelungen. > Nein, ich bin auch kein Gegner von BASIC, habe schon mit verschiedenen > Dialekten gearbeitet und nutze es auf dem PC immer noch. Aber mit BASCOM > kann ich mich nicht anfreunden. Ich selber würde auch nie mehr einen Basiccompiler anfassen wollen, aber man darf die ganze Geschichte halt nicht immer nur aus der ICH-Perspektive sehen.
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.