PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Assembler oder Bascom?



squelver
03.08.2006, 09:13
Hi O:)

Ich gelte als Einsteiger und bin kein Mathe-Genie, das ist Neuland für mich und arbeiten möchte ich mit einem der ATMega-Reihe.

Ich will mir demnächst n Testboard zulegen, zum Erfahrungen sammeln und anschliessend direkt mein Wissen bei meinem Projekt anwenden.

Nach längerem Lesen und suchen in diesem Forum und vielen bei google zu findenen Themen und Seiten stellt sich für mich nun die Frage:

Assembler oder Bascom?

Worin liegt genau der Unterschied?
Was bringt mich tiefer in die Materie des Programmieren?
Wovon werde ich in Zukunft mehr haben?
Was ist flexibler?
Kann man ohne weiteres von einem zum anderen wechseln?

Vieleicht könnt ihr mir die Richtung weisen ;)

MFG Andreas

Schokohoernl
03.08.2006, 09:40
Hallo!

Der größte unterschied zwischen ASM und Basic ist, dass ASM direkt befehle für den microcontroller sind. die AVR's können so um die 100 befehle.
BASOM, bzw. Basic ist ein compiler. D.h. Den programmcode den du geschrieben hast, wird in einzelne ASM befehle umgewandelt.

der große vorteil von ASM ist, dass du genau weisst, was der µC ausführt und du den code sehr klein halten kannst. bei basic hast du ja letztendlich keine ahnung, welche befehle ausgeführt werden, und ob der code wirklich optimal ist, oder sachen enthält, die man auch platz oder zeitsparender machen könnte (meistens tut er das nämlich).

tiefer in die materie bringen tut dich ASM besser. das weisst du dann wirklich, welche register gerade angesprochen werden oder welche bits du gerade hin und her schiebst.


meine erfahrung:
ich bin mit ASM nie wirklich zurecht gekommen. war mir einfach etwas umständlich. BASCOM ist mir auch in sofern leicht gefallen, weil ich schon basic kenntnisse hatte und so recht flott komplexere programmgebilde meistern konnte.

letztendlich musst du wissen, ob du lieber direkt ASM programmierst und etwas mehr hirnen musst, oder lieber etwas sachter anfangen willst und den compiler teilweise für dich hirnen lässt.

MfG

Schoko

Mehto
03.08.2006, 09:48
Worin liegt genau der Unterschied?
Assebler ist die direkte Programmiersprache für den µC, Bascom übersetzt dein Basic Programm für dich später in Assembler bzw. gleich als Hexfile.
Da Bascom so übersetzen muss das es auf jeden Fall funktionieren muss ist der Code später nicht gut optimiert. Das heißt längere Ausführungszeiten und ein großes Programm ( Der Atmega8 hat z.B. nur 8KB, in Basic sind die raltiv schnell voll, in Assembler fast unmöglich, zumindest in der Anfangsphase.)

Was mich bei Bascom ziemlich überascht hat, ist die lange übersetzungszeit, das dauert je nach Programmgröße und Rechnerleistung locker 20sek.
Bei Assembler geht das meist in weniger als 1sek. (Aber ist natürlich nicht zu vergleichen, Bascom muss ja erst alles in assembler übersetzen)


Was bringt mich tiefer in die Materie des Programmieren?
Eindeutig Assembler, da tust du jedes bit sozusagen einzeln setzen und weißt genau was man am µC macht (Wenn man bei großen und komplexen Programmen noch durchblickt....)

Wovon werde ich in Zukunft mehr haben?
Ich sag Assembler, wenn du das beherscht bist du der Meister der µC.
Basic wird ja oft auch als Kinder.gartensprache bezeichnet, aber da halt ich mich mal schön raus...

Was ist flexibler?
In diesem Fall Basic.

Kann man ohne weiteres von einem zum anderen wechseln?

In Basic so weit ich weiß kein Problem, in Assembler kommts drauf an wie verschieden der µC Typ ist. Wenn man sauber programmiert kann man den COde relativ schnell anpassen (Wenn z.b. Register oder Ausgänge anderst gesetzt werden müssen)
Hat der µC aber einen anderen Befehlsatz muss man leider das komplette Programm neu schreiben und hat den alten Code nur als Vorlage.
Aber ich glaub Bascom unterstützt auch nur den einen Atmel Befehlssatz.

Wenn du spielen wilst: Bascom
Wenn du ernthaft zu Ergebissen kommen wilst und auch verstehen möchtet was im µC genau vor sich geht : Assembler

Tipp: Wiso kein C? C hat grob gesagt die Vorteile von Basic und Assembler zusammen. Einzigster NAchteil wenn man nur C lernt, man muss bei zeitkritischen Sachen aufgeben oder Assembler lernen (bei Basic ist man an diesem Punkt schon viel früher angelangt)

Wenn du kein Hardwarefreak werden möchtest nimm C !
Wenn doch Assembler.

Aber meine absulute Empfehlung:
Zuerst Assembler und dann C O:)

Viele Grüße,
Mehto

( Bin übrigens noch bei Assembler, hab aber vor irgendwann mal auf C hochzusteigen und beides zu benutzen, komm aber zur Zeit Prima mit Assembler zurecht...)

urkel_
03.08.2006, 10:27
Hi O:)

Assembler oder Bascom?

Worin liegt genau der Unterschied?
Was bringt mich tiefer in die Materie des Programmieren?
Wovon werde ich in Zukunft mehr haben?
Was ist flexibler?
Kann man ohne weiteres von einem zum anderen wechseln?

Vieleicht könnt ihr mir die Richtung weisen ;)

MFG Andreas

Die Unterschiede von Bascom und Assembler wurden ja schon recht gut erläutert.

Wovon Du mehr in der Zukunft haben wirst, hängt sehr stark davon ab was Du machen möchtest. Wenn Du eher Zeitkritische Anwendungen (z.B. Videoanwendungen oä.) machen möchtest, musst Du auf Assembler zurückgreifen. Möchtest Du eher Anwenderschnittstellen oder einfache Steuerungen machen, ist C oder Bascom ganz gut.

Flexibler ist man wenn man Assembler und C kann . Eine unschlagbare Kombination. Mit Bascom, gibt es für AVRs und 8051 (es gibt für andere µC andere Basic Derivate), ist man IMO sehr bedingt flexibel.

Ohne weiteres wechseln? Man kann sicherlich recht leicht von einer Programmiersprache zu einer anderen wechseln, wobei Assembler da eigene Regeln hat. Allerdings kannst Du das nicht auch auf die µC übertragen. Damit will ich sagen, Du kannst "relativ" leicht von Bascom zu C wechseln. Allerdings sind die Befehlssätze/Register von AVRs und PICs (nur als Beispiel) sehr unterschiedlich. Es ist aber auch nicht unmöglich ;)

Ich würde Dir empfehlen erst C zu beginnen und dann Assembler. Damit hast Du es anfangs nicht ganz so schwer. Bist aber am Ende sehr schnell am Ziel. Weiterer Vorteil davon ist, beim neuen AVR-Studio 4 sind beide Sprachen schon dabei (kostenlos).

squelver
03.08.2006, 14:03
Das ja richtig geil erklärt, auch wenn hier die Meinungen teilweise auseinander gehen :mrgreen:

Ich tendiere zu "Assembler" O:)

Vielen Dank @all ;)

Andree-HB
03.08.2006, 14:47
...das Schöne an Bascom sind aber ja die sehr schnellen, sichtbaren Erfolgserlebnisse. Einen Text auf ein Display zu bekommen ist eine Sache von 5 Zeilen, man braucht sich keinerlei eigene Gedanken um Timings und Initialisierungsstrings zu machen.

...im Gegensatz dazu steht man allerdings auch sofort auf dem Schlauch, wenn die anzuschliessende Hardware nicht durch die eingebauten Funktionen und Bibliotheken unterstützt wird.

- auch hier wieder zwei Seiten der Medaille -

chr-mt
03.08.2006, 15:14
..im Gegensatz dazu steht man allerdings auch sofort auf dem Schlauch, wenn die anzuschliessende Hardware nicht durch die eingebauten Funktionen und Bibliotheken unterstützt wird.
Nein. Das ist leider ein Vorurteil.
Wenn man ein Datenblatt hat, kann man auch nicht unterstützte Hardware mit Bascom ansprechen.
Wieso sollte das nicht gehen ?
Habe ich schon öfter gemacht.
Wenn man weiß, wie die Hardware anzusteuern ist, ist das meistens problemlos möglich.
Warum sollte das in C besser gehen ?

Man sollte die Bascom Leute nicht immer als: "zu doof um eine Hardware anzusteuern" darstellen.

Klar, ein Anfänger, der sich nie ein Datenblatt ansieht, wird das nicht können und trotzdem mit Bascom Erfolge haben und das ist auch gut so.
Mit dem Interesse fängt vielleicht das tiefere Nachforschen statt.
Dann kann man immer noch eintscheiden, ob man Assembler dazunimmt, oder auf C umsteigt.


Einen Text auf ein Display zu bekommen ist eine Sache von 5 Zeilen
Ist doch genial, oder ?
Warum soll ich mich mit mehr abmühen, wenn's auch mit 5 Zeilen geht?
Coolnessfaktor ?


Flexibler ist man wenn man Assembler und C kann .
Oder Bascom und Assembler.
Bascom erlaubt es, Assemblerbefehle direkt in Basic zu benutzen, oder komplette Assemblerteile einzubinden.

Der größte Vorteil an Assembler ist für mich die eindeutige Zuordnung von
Befehl und Zeit.
Man weiß Mikrosekundengenau genau, was der uC wann macht.
Die höhere Geschwindigkeit brauche ich nicht unbedingt.
Muß auch nicht unbedingt sein, daß eine schlechte Assemblerroutine besser läuft als ein Bascom oder C Programm.


Wenn du ernthaft zu Ergebissen kommen wilst und auch verstehen möchtet was im µC genau vor sich geht : Assembler
Was bitteschön ist an Basic nicht "ernsthaft" ? ;)


Gruß
Christopher

urkel_
03.08.2006, 16:13
Flexibler ist man wenn man Assembler und C kann .
Oder Bascom und Assembler.
Bascom erlaubt es, Assemblerbefehle direkt in Basic zu benutzen, oder komplette Assemblerteile einzubinden.


Oder so ;) Sorry hatte ich nicht mehr dazugeschrieben.

pebisoft
03.08.2006, 16:47
Einzigster NAchteil wenn man nur C lernt, man muss bei zeitkritischen Sachen aufgeben oder Assembler lernen.

schwätzer...

pebisoft
03.08.2006, 16:49
Weiterer Vorteil davon ist, beim neuen AVR-Studio 4 sind beide Sprachen schon dabei (kostenlos)...

stimmt nicht.!!!!!!!!!!!!!!!!!!!!!

das winavr-c muss installiert werden und wird im studio 4 eingebunden.

Mehto
03.08.2006, 17:08
schwätzer...
*g* dein Beitrag bringt mich wieder zum schmunzeln... Ahnung von nichts, davon aber jede Menge...

Ok, Zeitkritisch ist ein weit dehnbarer Begriff, aber irgendwann geht dann mit einer Hochsprache nicht mehr weiter (z.b.: schnelles manipulieren von Bits verbunden mit einer schnellen Daten ein und Ausgabe). Aber je nach dem was man macht kommt man da nicht so schnell an. Aber gut, ich bin ja kein C Experte, da können vielleicht andere genau berichten.

Auf deinem Küchenbrettroboter wirste das warschneinlich nicht brauchen, da haste recht. Da reicht bei dir sogar Basic aus.



Weiterer Vorteil davon ist, beim neuen AVR-Studio 4 sind beide Sprachen schon dabei (kostenlos)...

stimmt nicht.!!!!!!!!!!!!!!!!!!!!!

das winavr-c muss installiert werden und wird im studio 4 eingebunden.
Beim neuen AVR Studio ist es wirklich schon dabei, oder wie kommt das, das es bei mir auch drauf ist ohne das ich etwas zusätzlich installiert habe und nur Assembler nutze?

Sorry, aber du schreibst wie ein 13 Jähriges Kind. Sag mal, investierst du deine Rente in Drogen? :-k

Dieser Beitrag ist nur an Pebisoft gerichtet. Bascom ist wirklich eine gute Software hinter der viel Knowhow steckt, ich möchte sie echt nicht runter machen. Gerade für Anfänger ist das das Tor zur Welt der µC.
Ich hab ja auch echt nichts gegen Bascom, aber wenn da jemand so nen mist schreibt....

Hanni
03.08.2006, 18:40
Weiterer Vorteil davon ist, beim neuen AVR-Studio 4 sind beide Sprachen schon dabei (kostenlos)...

stimmt nicht.!!!!!!!!!!!!!!!!!!!!!

das winavr-c muss installiert werden und wird im studio 4 eingebunden.
Beim neuen AVR Studio ist es wirklich schon dabei, oder wie kommt das, das es bei mir auch drauf ist ohne das ich etwas zusätzlich installiert habe und nur Assembler nutze?

Naja, es fällt zwar scher, aber manchmal hat Pebisoft doch recht ....

Sicherlich kannst du im neuem AVR Studio auswählen, ob es ein C oder Assembler Projekt ist, allerdings fehlt immernoch der Compiler um dieses zu übersetzen.

Das einzige was beim neuem AVR Studio tatsächlich dabei ist, ist eine Schnittstelle zum GCC.

Jedenfalls ist dieses mein Wissensstand (und ich glaube nicht, das sie von SP2 zu SP3 plötzlich den GCC mit reingepackt haben.).

Zum Thema Zeitkritisch:
Es gibt nunmal Dinge, die nur in Assembler wirklich schnell und effektiv gelöst werden können. Als Stichwort möchte ich hier einmal eine Software PWM nennen, die mit 16 Kanälen und ca 500Hz Refreshrate eben nicht den kompletten µC blockiert.


Grüße,
da Hanni.

JanB
03.08.2006, 19:03
@Pebisoft:
Hallo Peter, Grüß Dich, lange nix mehr von dir gelesen.
Aber ich sehe, du bist immer noch ganz der Alte...
Richtig so ! Immer feste druff ! Zeigs den jungen Kerls !
Und bloss keine Schwäche zeigen. Etwa durch Höflichkeit
oder gar Freundlichkeit.
\:D/ \:D/ \:D/ \:D/

Gruß Jan

squelver
03.08.2006, 20:32
Suuuper Sache, also so wie ihr das Thema hier diskutiert, gefällt mir das, bis auf ein paar Begriffe, so bekomme ich nen sehr guten Einblick in eure Erfahrungen ;)

@Hanni
Was genau meinst du mit:
"Als Stichwort möchte ich hier einmal eine Software PWM nennen, die mit 16 Kanälen und ca 500Hz Refreshrate eben nicht den kompletten µC blockiert." ?

Hanni
03.08.2006, 20:54
Also gut. Der Begriff PWM (Pulsweitenmodulation) sollte dir in diesem Zusammenhang vielleicht ein Begriff sein. Ansonsten klick einfach mal drauf, dann landest du im entsprechendem Wiki Beitrag.

Die Problematik bei einer Software PWM ist die, das ich mich effektiv selbst um das kümmern muss, was mir sonst die Hardware abnimmt.

Praktisch zähle ich in einer Timer Interuptroutine eine Variable hoch und vergleiche diese mit den entsprechenden Werten für die einzelnen Kanäle.

Nimmt man einmal an, das der Mikrocontroller mit 16 MHz läuft, ich eine PWM mit einer Auflösung von 8 Bit haben möchte welche 500 mal je Sekunde Refresht wird, dann habe ich in etwa die folgenden Eckdaten:

Fosz = 16.000.000 Hz
Fpwm = 500 Hz
Aufl. = 256

Zeit zum Refresh der 16 Kanäle: 16000000 Hz / (500 Hz * 256) = 125 Takte

Wenn man nun bedenkt, das der µC nebenbei noch ein paar andere Dinge erledingen soll (z.B. Komunikation über die USART oder Tastenabfrage ... what ever :D ) kann man davon ausgehen, das man nicht mehr als die Hälfte der 125 Takte dafür verwenden sollte (bleiben rund 62 Takte) . Bedenkt man weiterhin, das auch der Sprung in die ISR, sowie die Sicherung des Statusregisters ein paar Takte frisst bleiben vielleicht 45 Takte übrig.

Würde die ganze Sache nun mehr als die besagten 125 Takte benötigen würde dieses den µC mehr oder weniger komplett blockieren.
(der µC kommt dann aus der Interupt Routine heraus, führt einen weiteren Befehl aus und landet wieder in der Interupt Routine ...)

Das ist das was ich in diesem Zusammenhang als zeitkritisch bezeichne.
Bascom sichert übrigens (per default) sämtliche Register (ob nun nötig oder nicht ...) und das SREG damit braucht diese Programmiersprache nur dafür das es mal eben in einer Interuptroutine ist schon alleine so um die 130 Takte.
Wie genau sich das bei C verhält ist mir nicht bekannt.

Der Vorteil an Assembler ist im Übrigen, das nur du bestimmst, wo sich welche Daten befinden ... also z.B. in Registern oder im RAM

So, ich hoffe nun einmal, das es das war was du nun wissen wolltest, wenn nicht schrei einfach :D

Grüße,

da Hanni.

Mehto
03.08.2006, 20:56
...allerdings fehlt immernoch der Compiler um dieses zu übersetzen.
Ups, kann gut sein. Man kann nämlich wenn man ein neues Projekt anlegt zwischen C und Assembler wählen, da ich aber immer auf Assembler drücke und den C Teil nie getestet habe dachte ich da wäre alles dabei.
Dann möchte ich mich für mein unwissen entschuldigen
](*,)

squelver
03.08.2006, 21:02
@Hanni
Jea, sehr geil, genial erklärt, vielen vielen Dank \:D/
Da wäre noch eine Frage, welche Rechnerleistung brauche ich zum Programmieren? Oder könnte ich das auch auf nem alten 386er schreiben?

PS.: Hab mir eben schon mal AVR-Studio runtergeladen ;)

izaseba
03.08.2006, 21:08
@copious,

wenn Du auf so Sachen wie AVR-Studio verzichten kannst ist das Programmieren mit einem 386-er (wenn man einen noch auftreiben kann) sicher denkbar

Gruß Sebastian

squelver
03.08.2006, 21:13
@izaseba
Ich mein nur, würde da nicht n altes Laptop ausreichen?
Bekommt man denn Assembler auch so irgendwo?
Oder wie meinst du das mit dem verzichten?

@all
nach welchen Punkte wähle ich den richtigen Atmega(?) aus?

EDIT:
Ist dieses Tutorial: http://www.mikrocontroller.net/tutorial/
zu empfehlen?

izaseba
03.08.2006, 21:39
Mit verzichten mein ich daß AVR-Studio sicher nicht mit 386 laufen würde, ich weiß noch nichtmals, ob man irgendein Windows mit solchem Rechner am laufen bekommt.
Es gibt da ein Angebot an Komandozeilen Assembler, ich glaube sogar, daß man den Assembler von AVR-Studio per Komandozeile aufrufen kann.
Man kann das Programm mit einem einfachem Texteditor schreiben und in der Komandozeile(Eingabeaufforderung) assemblieren.
Ist zwar nicht so Komfortabel aber es geht.

Meine Lieblingsprogrammierumgebung ist z.B.

Emacs - ein Texteditor mit Syntaxhighlighting und anderem schnickschnack
avra - ein Assembler
gcc, avr-gcc
avrdude - Avr-downloader

Mit diesen Programmen könnte ich wahrscheinlich auf einem 386 arbeiten :-) zwar ohne Grafische Oberfläche, aber machtbar wäre das schon.

Wenn Du auf Deinem Laptop Win am laufen hast sehe ich da keine Schwirigkeiten mit AVR-Studio ....

Gruß Sebastian

EDIT:
Ja man kann mit Diesem Tut was Anfangen,
schau Dir auch mal diese (http://www.avr-asm-tutorial.net/avr_de/index.html) Seite an


nach welchen Punkte wähle ich den richtigen Atmega(?) aus?

Das mußt Du Dir selber beantworten, Du weißt ja was Du vor hast

chr-mt
03.08.2006, 21:42
Hi,

nach welchen Punkte wähle ich den richtigen Atmega(?) aus?
Das kommt ganz darauf an, was du machen willst.
Guck' dir mal die Übersicht bei Atmel an.
Sind dir viele Ports wichtig, oder viel Speicher, viele Hardware PWM's, oder
ADCs oder eher mehrere Hardware USARTs ?
Ich würde vielleicht mit sowas in der Größe Mega 16 oder 32 anfangen.
Gibt's auch noch als DIP und man kann viel mit machen.

Gruß
Christopher

squelver
03.08.2006, 21:56
Besten Dank nochmal an euch, ihr alle habt mich sehr weit gebracht ;)
Ich werde die Tage mal n Schema posten, aus dem hervorgeht, wie ich mir das alles vorstelle \:D/

Hanni
04.08.2006, 01:18
@Hanni
Jea, sehr geil, genial erklärt, vielen vielen Dank \:D/
Da wäre noch eine Frage, welche Rechnerleistung brauche ich zum Programmieren? Oder könnte ich das auch auf nem alten 386er schreiben?

PS.: Hab mir eben schon mal AVR-Studio runtergeladen ;)

Naja, solange auf dem Rechner mindestens Win9x läuft sollte es gehen.

Grüße,
da Hanni.

squelver
04.08.2006, 07:54
Hier gehts zu meinem Schema O:)

https://www.roboternetz.de/phpBB2/viewtopic.php?t=21774&start=22

urkel_
04.08.2006, 08:45
Einzigster NAchteil wenn man nur C lernt, man muss bei zeitkritischen Sachen aufgeben oder Assembler lernen.

schwätzer...

Dann zeig mir mal wie man eine Videoanwendung in Bascom oder C schreibt! Wie wärs mit mischen eines Videosignales mit einem selbstgenerierten Text.

Wenn Dus schon besser weisst, dann argumentier auch und lass nicht nur dumme Kommentare los. Ich glaub beleidigen lassen muss ich mich nicht!

Das mit dem GCC Kompiler stimmt so, aber man kann sich den auch kostenlos herunterladen. Bascom kostet immerhin 98,-€ (Listenpreis) oder bezweifelst du das auch?

PicNick
04.08.2006, 13:40
@urkel_ : Bitte Dich, ignorier' das. Pebisoft ist absolut therapieresistent.

urkel_
04.08.2006, 13:47
Alles schön und recht, aber er muss ja nicht gleich beleidigend werden!

squelver
04.08.2006, 14:33
Nun hab ich mich entschieden, ich werde "Bascom" verwenden. O:)

Hanni
04.08.2006, 15:35
Nun hab ich mich entschieden, ich werde "Bascom" verwenden. O:)

Deswegen bist du ja kein schlechter Mensch :D
Wenn du übrigens einmal über den Bascom Tellerrand hinausschauen möchtest / musst, weisst du ja wo du uns findest.

Grüße,
da Hanni.

squelver
04.08.2006, 16:45
Nun hab ich mich entschieden, ich werde "Bascom" verwenden. O:)

Deswegen bist du ja kein schlechter Mensch :D
Wenn du übrigens einmal über den Bascom Tellerrand hinausschauen möchtest / musst, weisst du ja wo du uns findest.

Grüße,
da Hanni.

Na klar ;)

ich hätte schon Lust auf Assembler, nur so wie ich mich kenne, könnte ich etwas ungeduldig werden, wenns darum geht, endlich n Ergebnis zu erhalten :mrgreen:
Die Zeit um mich ausführlich mit Assembler zu beschäftigen könnte ich wohl nicht aufbringen. 8-[
Aber mal schauen, was kommt \:D/

pebisoft
04.08.2006, 18:14
Das mit dem GCC Kompiler stimmt so, aber man kann sich den auch kostenlos herunterladen....

das war nicht der ...punkt....er ist nur nicht im avr-studio enthalten...fakto...
du solltest lernen, dich präzise auszudrücken.

Hanni
04.08.2006, 18:39
...allerdings fehlt immernoch der Compiler um dieses zu übersetzen.
Ups, kann gut sein. Man kann nämlich wenn man ein neues Projekt anlegt zwischen C und Assembler wählen, da ich aber immer auf Assembler drücke und den C Teil nie getestet habe dachte ich da wäre alles dabei.
Dann möchte ich mich für mein unwissen entschuldigen
](*,)

Was er schon getan hat @ Pebi ...

Nobody is perfekt ... auch du nicht. (Punkt)

Grüße,
da Hanni