Forum: Mikrocontroller und Digitale Elektronik Assembler einfacher als c?


von huhu (Gast)


Lesenswert?

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);



}

von Zotteljedi (Gast)


Lesenswert?

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.

von Mike (Gast)


Lesenswert?

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

von huhu (Gast)


Lesenswert?

Ist denn noch kein anderer Debugger für C auf MC Basis erfunden?
mfg

von ...HanneS... (Gast)


Lesenswert?

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.

...

von Gunter (Gast)


Lesenswert?

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

von Rufus T. Firefly (Gast)


Lesenswert?

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.

von ...HanneS... (Gast)


Lesenswert?

@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).

...

von Peter D. (peda)


Lesenswert?

"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

von Hagen (Gast)


Lesenswert?

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

von Rahul (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.