Hallo,
wiedermal das leidige Thema Programmiersprache des AVR. Ich habe mal
FASTavr getestet und komme da eigentlich gut mit zurrecht. Erzeugt
wirklich sehr kleinen Quell-Code. Kostet allerdungs ca. 120 als
Vollversion und hat nur englische Anleitung und Beispiele. BASCOM
erzeugt, im Vergleich, grossen Quellcode, preislich liegt es ähnlich.
Wer hat Erfahrung, evtl. günstige Bezugsquellen, vielleicht ganz andere
Basic-Compilier, ich als alter C-Controller kann mich nicht an C oder
gar Assembler gewöhnen.
Gruss
Alexander
Hi,
ich würde Dir zu Bascom raten.
Die Vollversion interressiert doch nur für größere Programme.
Bei größeren Programmen büßt FastAVR seinen Vorteil wieder ein, und
produziert bei größeren Projekten längeren Code als Bascom.
Ich habe unter Bascom eine Klimasteuerung programmiert, als der Speicher
fast aufgebraucht war FastAVR genommen und total enttäuscht gewesen.
Anfänglich war der FastAVR-Code um 20% kleiner, ab 3kB etwa gleich, dann
schlechter.
Aus 7.5kB(Bascom) wurden 8.5kb(FastAVR).
Es wurden u.a. Tasten, LCD, A/D, I2C, DS1621, Basic+ASM Routinen
verwendet.
Aufgefallen ist das Bascom mit Zeichenketten sehr effektiv umgeht.
Doch hat FastAVR einen Vorteil den ich gern nutze. Es produziert top
lesbaren und KOMMENTIERTEN ASM-Quelltext, der sich in seiner Struktur an
das Basiclisting anlehnt.
Es ist als ASM-Lehrer für BASIC-Kundige unschlagbar.
cu tb
Hallo,
ja, ich habe jetzt FASTavr und bin auch von den Mühen des Programmierers
entzückt, es gibt eine sehr umfangreiche Newsgroup und Mailinglist, auch
hier wird fleissig weitergearbeit. Ich habe mich auch lange mit dem
vertreibenden Ingenieurbüro darüber unterhalten und habe mich (zwar
zähneknirschend) zum Kauf entschlossen.
Gruss
A. Arndt
www.AR-Online.de, hier entsteht ein AVR-Basic-Forum, reinschauen...
hallo, was für projekte erstellst du mit fastavr.
wie kann man in fastavr rc5-code senden, ich sehe nur eine routine zum
empfangen. ich habe einen robby mit: kompas cmps03, tsop1736, lcd,
srf04, srf08, sharpsensor, motorantrieb rs232 funk usw.
dieses möchte ich alles mit fastavr ansteuern können wenn ich es mir
beschaffe. kannst du ein bisschen berichten.
mfg pebisoft
ich habe jetzt fastavr ausreichend getestet.
ein toller compiler. er erzeugt hex-code und auf wunsch auch asm-code
für avrstudio4 (avrstudio erzeugt den gleichen code weil es die
gleichen compiler sind: asm32avr)und zum selberfiltern , wenn man noch
eingreifen möchte. und das testen mit dem avrstudio ist spitze.
so etwas habe ich schon lange gesucht. den code von bascom kann man
nicht astrein filtrieren und hier und da noch nach optimierungen
suchen.
bascom hat zwar einpaar mehr routinen, aber diese sind nicht das gelbe
vom ei. z.b. sind die lib-dateien von bascom veraltet und die neuen
muss man bezahlen. der bascom simulator ist nur ein darsteller der aber
nicht die genauen werte ausgibt wie avrstudio, er zieht nur eine
sichtbare show ab. Bascom habe ich wieder verkauft und habe mir jetzt
fastavr bestellt. da ich auch in win-avr-c geproggt habe fällt es mir
leicht, die routinen in fastavr umzusetzen. in fastavr kennt die
programmierfreiheit keine grenzen. habe jetzt schon fast alle
robotersensoren angesprochen. da ich z.z noch die demo habe, kann ich
jedes modul nur einzeln proggen, aber es funktioniert.
ich wollte immer ganz nah am asm-sourcode sein, war aber zu kopliziert
diesen zu schreiben. jetzt lernt man auch sehr viel vom asm-code.
mfg pebisoft
Hallo
Gibt es für FastAVR oder Bascom auch deutsche Anleitungen/Bücher?
Könnt ihr kurz zusammenfassen, für welchen Anwender Bascom sinnvoller
ist (oder umgekehrt)?
Danke
moin
bascom ist für leute die drauf los proggen wollen und schnell mal das
ergebnis zusehen. stellt keinen asm-sourcecode her. hat mehr wörter als
fastavr, ist langsam in der ausführung , schleppt zuviel ballast mit
rum.
fatsavr ist für leute , die sich mit dem kleinen avr auseinandersetzen
wollen. kleine feinheiten herauspicken, präzise timing, den avr
sozusagen damit beherrschen. stellt asm-sourcre-code her zum
nachvollziehen. ist von der tiefe her fast wie winavr-c, auch so
schnell aber in den wörtern nicht so schwierig.
weil es die tiefe hat wie winavr-c habe ich jetz nach dem verkauf von
bascom fastavr gekauft.
ich bin 57 jahre alt und habe viel zeit , bin pensionär.
von fastavr habe ich sehr spät gehört, schade. aber jetzt habe ich es.
wenn du länger proggen willst, wirst du merken, das du mit bascom bald
am ende bist, da fängt dann fastavr erst an interessant zu werden. wenn
du nur einmal schnuppern willst und eben mal schnell was proggen willst,
ohne das du wissen möchtest wie man hier und noch einmal in code was
tunen kann, dann ist bascom für dich
die richtige wahl.
mfg pebisoft
Da ich auch manchmal in ASM programmiere, ist dann wohl FastAVR besser
für mich. Gibt es auch gute Turorials oder Bücher für dieses Programm?
Viele Grüsse
moin
bücher brauchst du nicht. die hilfedatei mit den beispielbefehlen ist
sehr gut.
was du brauchen tust ist ein buch über den avr mit den resterinhalten
und timereinstellungen, pwm, kompare usw.
ich habe vorher auch immer nach bücher ausschau gehalten, die mir die
progsprache erklärten. dann habe ich festgestellt, das basic kann ich
doch ist doch ein alter hut, wo ich dann immer nachschaue , auch jetzt
immer noch kräftig, wie muss ich welche register einstellen und
interrups starten, zähler aufrufen usw. das avr-buch (deutsch) liegt
immer neben mir auf dem tisch.
schau im roboternetzforum unter bücher, dort werden einige beschrieben.
die bücher für den avr speziell sind nicht billig.
mfg pebisoft
Die ASM-Ausgabe von FASTAVR ist meines Erachtens nicht zum Erlernen von
ASM geeignet, da nicht wirklich effektiver Code erzeugt wird, wie
anhand eines einfachen Beispiel unschwer zu sehen ist:
Multiplikation von 2 Byte Variablen und Addition einer Konstanten Zahl
auf einem AVR mit HW-Mul:
B1 = B1 + B2 + 5
Dim B1 as Byte, B2 as Byte
B1 = B1 + B2 + 5
FASTAVR erzeugt hier:
;-Line--0014----b1 = b1 * b2 + 5--
lds zl,b1
push zl
lds zl,b2
pop r24
mul zl,r24
movw zl,r0
push zl
ldi zl,Low(5)
pop r24
add zl,r24
sts b1,zl
Es wird eine Variable (b1) zuerst in das zl-Register geladen und dann
mit push und pop über den Stack in das register r24 verschoben, anstatt
diese gleich in das register r24 zu laden. Um dann zum Ergebnis der
Multiplikation (in r0) die Zahl 5 zu addieren wird dieses mit einem
Word-Verschiebe Befehl in das zl-Register verschoben, dort kann es aber
nicht bleiben, da die Konstante 5 auch in dieses Register geladen wird.
Daher das gleiche Spiel wie zu Beginn mit dem Verschieben in das
r24-Register mit den Umweg über den Stack bevor die Addition
vorgenommen wird. Das Ergebnis hätte aber ohnehin in r0 verbleiben
können, anstatt es höchst ineffektiv zweimal weiter zu verschieben.
Auch die Verwendung von Pointer-Register (hier Z) zur
Zwischenspeicherung von Variablen lässt meines Erachtens nicht auf ein
durchdachtes durchgängiges Konzept schließen.
Ein effektiver Code könnte z.B. so aussehen:
lds r24, b1
lds r24, b2
mul r24, r25
ldi r24, 5
add r24, r0
sts b1, r24
FASTAVR hat einen um 75% größeren Code mit sogar doppelter
Ausführungszeit.
Die ASM-Ausgabe von FASTAVR ist zwar ein nettes Feature, führt aber
einem ASM-Anfänger sicher nicht zu einem effektiven Programmierstil in
ASM.
Ich denke, man muss das immer im ganzen sehen: Da spuken schliesslich
noch mehr Routinen umher und das Umgelade aus dem Zl register ist
sicher mit dem Softwarestack begründet. Denn was passiert, wenn Du B1
und B2 als Integer deklarierst und mit 50000 addieren willst?
Das hier:
1
;-Line--0011----B1=B1*B2+50000--
2
ldszl,b1
3
ldszh,b1+1
4
pushzh
5
pushzl
6
ldszl,b2
7
ldszh,b2+1
8
popr24
9
popr25
10
callM1616
11
pushzh
12
pushzl
13
ldizl,Low(50000)
14
ldizh,high(50000)
15
popr24
16
popr25
17
addzl,r24
18
Adczh,r25
19
stsb1,zl
20
stsb1+1,zh
21
22
;-Line--0015----Do'placeyourcodeinnextline--
23
L0000:
24
25
;-Line--0017----Loop--
26
rjmpL0000
27
L0001:
28
29
;******EndOFUSERBASICCODE****************
30
31
32
;////// 16x16 hardware multiplay /////////
33
M1616:mulzl,r24
34
movwr22,r0
35
mulzl,r25
36
addr23,r0
37
mulzh,r24
38
addr23,r0
39
movwzl,r22
40
ret
41
42
;SystemGlobalVariables:0bytes
43
;UserGlobalVariables:4bytes
Da ist nunmal so eine Struktur bei FastAVR drinne. Zum Lernen ist das
nichts, da gebe ich Dir Recht!!
Geht bei BASCOM eigentlich B1*B2+5 in einem Zug?
Es gibt noch viel schlimmere Sachen als unnötig lange Ausführungszeiten
bei mathematischen Operationen.
Angenommen ich will wissen, ob es einen Watchdog reset gab.
If MCUCR.WDRF then
Reset MCUCR.WDRF
mach_dies()
Else
mach_jenes()
End if
erzeugt diesen Code:
1
;-Line--0012----Ifmcucr.wdrfThen--
2
inr24,MCUCR
3
sbrsr24,WDRF
4
rjmpL0001
5
L0002:
6
7
;-Line--0013----mach_dieses()--
8
callmach_dieses
9
10
;-Line--0014----Else--
11
rjmpL0000
12
L0001:
13
14
;-Line--0015----mach_jenes()--
15
callmach_jenes
16
17
;-Line--0016----EndIf--
18
L0000:
Was passiert aber nun, wen ich es genau andersrum machen will, so in
der Art:
If NOT MCUCR.WDRF then
mach_jenes()
Else
RESET mcucr.wdrf
mach_dieses()
End if
Gibt erstmal 'ne Fehlermeldung - sieht man sich den ASM Text an, weiss
man auch warum:
1
;-Line--0012----IfNotmcucr.wdrfThen--
2
inr24,MCUCR
3
sbrcr24,0x0WDRF
4
rjmpL0001
5
L0002:
6
7
;-Line--0013----mach_jenes()--
8
callmach_jenes
9
10
;-Line--0014----Else--
11
rjmpL0000
12
L0001:
13
14
;-Line--0015----Resetmcucr.wdrf--
15
inzl,MCUCR
16
cbrzl,0x08
17
outmcucr,zl
18
19
;-Line--0016----mach_dieses()--
20
callmach_dieses
21
22
;-Line--0017----EndIf--
23
L0000:
SBRS und SBRC werden unterschiedlich behandelt. "0x" hat da nicht
wirklich zum Erfolg geführt.... 1.Beispiel funktioniert - 2.Beispiel
nicht/ wie auch 0xWDRF kennt der Assembler nicht, was auch prompt mit
einer Fehlermeldung quittiert wird.
"1. C:\..\watchdog.asm(24) : error : Garbage at end of line
Peek und Poke?
peek(&h60+x) z.B. soll gehen, geht aber nicht!
temp=&h60+x
peek(temp) geht allerdings.
usw.usf.
Allerdings kann man sehr schnell mit LCD und Tastermatritzen Eindruck
schinden. Das stimmt wohl!!
Gruß
AxelR.