Wer es noch nicht gesehn hat. Auf der Seite
http://www.shop.robotikhardware.de/shop/catalog/news_zeigen.php?id_news=27
gibt einen interessanten AVR Wettbewerb. Wer sowieso was in der
beschriebenen Richtung bastelt, könnte 500 Euro gewinnen.
Da gewöhnlich recht wenige Teilnehmer bei solchen Wettbewerben
mitmachen, ergibts sich sicherlich eine brauchbare Gewinnchance.
Bastler wrote:
> Auf der Seite> http://www.shop.robotikhardware.de/shop/catalog/news_zeigen.php?id_news=27> gibt einen interessanten AVR Wettbewerb.
Die Software muss (zumindest teilweise) in BASCOM geschrieben sein,
somit dürften die wirklich guten Projekte wegfallen. Selbst schuld wer
solche dummen Regeln aufstellt.
gast wrote:
> Die Software muss (zumindest teilweise) in BASCOM geschrieben sein,> somit dürften die wirklich guten Projekte wegfallen. Selbst schuld wer> solche dummen Regeln aufstellt.
Das ist natürlich ein absolutes KO-Kriterium.
Aber als MC sind alle Atmels zugelassen (8051, AVR, ARM7, AMR9, Cortex
M3).
Peter
Im Zusammenhang mit dem "leicht nachzubauen" finde ich diese Regel
absolut begrüßenswert. Basic-Derivate sind im Vergleich zu C oder gar
Assembler extrem leicht zu erlernen und insb. leicht zu verstehen, auch
für Programmieranfänger.
Das Ziel ist doch klar: Man möchte ein Projekt finden, prämieren und
vorstellen, welches die breite Masse anspricht und nicht nur ein paar
Freaks oder Leute die sich schon ewig damit beschäftigen.
Gruß
Dominique Görsch
@ Dominique
> Das Ziel ist doch klar: Man möchte ein Projekt finden, prämieren und> vorstellen, welches die breite Masse anspricht und nicht nur ein paar> Freaks oder Leute die sich schon ewig damit beschäftigen.
Und dann macht man eine Programmiersprache zur Grundbedingung für die
man wenn überhaupt nur schwer eine Freeware-Entwicklungsumgebung finden
kann?
Genau lesen.
"Zumindest ein Beispielprogramm muss in Bascom-Basic beiliegen und einen
Teil der Fähigkeiten demonstrieren."
Also wer sowieso etwas in der Richtung entwickelt und nicht zu arrogant
ist, um ein paar Zeilen Basic zusammenzubringen, für den ist das doch in
Ordnung. Es zwingt ja nicht dazu, den gesamten Code in Basic zu
schreiben.
ich zitiere:
Mit der Einsendung erlaubst du die lizenzkostenfreie Veröffentlichung
und den Nachbau und Ausbau des Projektes! Ebenfalls gestattest du die
Veröffentlichung im Roboternetz.de oder auf der Robotikhardware CD.
Ich sage einfach mal frech dass die damit Geld verdienen wollen.
(zb.: mit bausätzen oder sowas....)
Gruß Anselm
>Du glaubst doch nicht wirklich, dass irgendwo in der Industrie mit>BASCOM programmiert wird!?!
Nein, das glaube ich nicht. Das weiß ich.
gez. Katapulski
Gast wrote:
> In meinem Bekanntenkreis sind es sogar 90% !
Wenn diese Aussage stimmen soll, hast Du also mindestens 10 Bekannte,
wovon 9 hauptberuflich mit Bascom programmieren.
Ich kann Dir sagen, das sämtliche Programmierer bei mir in der Firma zu
exakt 0% in Bascom/Basic programmieren.
Sondern hauptsächlich C/C++ und etwas Erlang/Java.
Peter
Katapulski wrote:
>>das sämtliche Programmierer bei mir in der Firma...> Wieviele Programmierer gibt es bei Dir in der Firma außer Dir selbst?> ;-)
5 Programmierer und dann noch ich, der hauptsächlich Hardware entwickelt
und nebenbei auch mal etwas dafür programmiert (MCs, CPLDs).
Ich bin also gar kein richtiger Programmierer.
Es ist ganz angenehm, selber entscheiden zu können, was besser in
Hardware geht und was besser in Software.
Anfangs, als ich nur Hardware gemacht habe, hat sich ein Programmierer
geweigert (es sei zu kompliziert), ein Signal in Software zu invertieren
und ich mußte einen Transistor mit Heißkleber auf das Board draufpappen
lassen. Das passiert mir jetzt nicht mehr.
Peter
Ach so: Zurück zu der Frage, ob BASCOM nicht nur von Bastlern verwendet
wird. Ich habe hier 3 Leute, die ein Ingenieurbüro führen. Sie schreiben
eine ganze Menge ihrer Sachen damit. Dabei geht es vor Allem um einfache
Ablaufsteuerungen für Maschinen, von denen oft nur ein Exemplar gebaut
wird. Dort sind die Abläufe nicht so zeitkritisch und es kommt nicht
darauf an, das letzte Byte im Flash nicht zu belegen. ;-)
Ich selbst bin auch ein Fan davon, wobei ich in letzter Zeit auch an
AVR-Assembler nicht vorbeigekommen bin, denn die Library-Dateien in
Bascom
sind ja auch in Assembler geschrieben. Wenn man daran etwas zu ändern
hat,
muß man ja verstehen, was dort vorgeht.
gez. Katapulski
na is das nich generell so?
kleine sachen bzw projekte die nicht wirklich zeitkritisch sind werden
in bascom geschrieben..aber sobald es auf genaue zeiten ankommt nimmt
man c oder besser assembler?
wobei ich mir assembler recht schwer vorstellen wenns um sehr große
projekte geht?
also ich habe bisher genau 0 mal in basic programmiert und bin ehrlich
gesagt stolz drauf. gut ich bin nicht normal und nicht der nabel der
welt, aber basic habe und werde ich nie einsetzen.
ps: ja. asm und richtig grosse projekte sind nicht wirklich lustig, aber
geschickt passagen per inline asm rein gefrickelt oder spezielle
funktionen... das ist durchaus akzeptabel bis sinnvoll.
senf
Obwohl ich auch Bascom verwende (nicht ausschließlich) bezweifle ich
ernsthaft das 70% der AVR Anwender Bascom benutzen.
Ich denke das C verbreiteter ist. (Ich mag C nicht und bin froh das ich
es nciht mehr machen muß. Dann schon lieber Assembler!)
Die meisten wissen nicht mal was wirklich wichtig am Programmieren ist.
Es ist das "wie" und nicht die Programmiersprache.
Wer meint Programmieren zu können weil er eine bestimmte
Programmiersprache benutzt, der tut mir leid.
In den einschlägigen Foren findet man viele Hilferufe quer durch alle
Programmiersprachen.
Das rumbetteln nach fertigen Libs und Routinen ist nicht nur bei Bascom
zu sehen.
Assembler zu programmieren hat zumindest den Vorteil das die meisten
dann wenigstens genau wissen was intern im Controller abgeht.
Bei so einem Wettbewerb eine Sprache vor zu schreiben ist natürlich eine
ziemlich dumme Einschränkung. Aber ich bin sicher das man nur ein wenig
googlen muß um ähnliches mit z.B. C zu finden.
Ich denke in diesem Wettbewerb steht Finanzielles Interesse dahinter.
Aber bei welchem Wettbewerb ist es das nicht?
> also ich habe bisher genau 0 mal in basic programmiert und bin ehrlich
gesagt stolz drauf. gut
Bist du noch keine 14? So ein Schwachsinn kenne ich eigentlich nur von
jungen Schülern die meist weder C, Assember noch Basic auch nur
annährend beherrschen. Sie meinen wenn Sie in C etwas kleines
zusammenfriemeln wären Sie Könner. Die haben nicht verstanden um was es
geht und werden es vermutlich auch nie. Beim Programmieren geht es um
Aufgaben, Ziele, Problemstellungen die in möglichst kurzer Zeit mit
möglichst geringen Aufwand durch geeignete Algorithmen perfekt gelöst
werden müssen. In den meisten Fällen ist man mit Bascom hier viel
produktiver und das zu erkennen, das zeichnet den Profi-Programmierer
aus. Sicher gibt es auch Aufgaben wo C und Assembler angesagt ist, auch
das muss dann ein Profi erkennen, aber das ist relativ selten der Fall.
Peter Dannegger wrote:
> Ich kann Dir sagen, das sämtliche Programmierer bei mir in der Firma zu> exakt 0% in Bascom/Basic programmieren.
Kein ernst zu nehmender Entwickler schreibt in BASIC. Aber das ist ja
wohl kein Geheminis.
Michael G. wrote:
> Kein ernst zu nehmender Entwickler schreibt in BASIC. Aber das ist ja> wohl kein Geheminis.
Ich hab nie verstanden wieso. Ich bin seit Jahren VB-Entwickler. Ich
schreibe ebenso funktionale wie ansprechende Anwendungen in VB wie meine
Kollegen in Visual C oder C#. Ich hatte bisher kein Problem, welches ich
in VB nicht gelöst bekam. Zugegeben ich bin mit Basic groß geworden.
TI-99/4A, C64, C128D, PC mit QuickBasic, Visual Basic, Gambas und auf
dem µC Bascom, ... das zieht sich wie ein roter Faden durch mein Leben.
Ich behaupte, dass es darauf ankommt, dass ein Entwickler sein Werkzeug
beherrscht.
Mag sein, dass man vielleicht mit Basic nicht so Laufzeit- und
Speicheroptimiert entwickeln kann, wie vielleicht in C oder noch
hardwarenaher in Assembler, oder das VB nicht so hip ist wie C oder
Java, aber das hat mich noch nie gestört. Ich nutz ja auch unter Linux
immernoch das gute alte Perl, obwohl es nicht so hip ist wie Ruby on
Rails. ;)
Gruß
Dominique Görsch
PS: Ach ja, ich nutz VB nicht nur aus Spaß, sondern hab damit schon
einige Kunden glücklich gemacht. :)
Hallo und guten Morgen,
mir fallen die Worte meines Profs in einer Vorlesung in der es um Pascal
ging ein als er nach Syntax gefragt wurde: "Ich bin doch kein wandelndes
Pascal-Lexikon, wenn Sie soetwas wollen dann gehen Sie in die
Bibliothek, einem echten Entwickler kommt es doch nicht auf Syntax an,
dem ist es egal ob er sein Programm in Pascal, Basic, C, C++, Assembler
oder gar JAVA schreibt."
Und heute weiss ich: Recht hat er!
Es kommt drauf an, dass man versteht, was man machen möchte. Eine
Programmiersprache ich der Weg zum Ziel, nicht mehr und nicht weniger.
Die eine Sprache ist eben für Wege des Typs A besser geeignet, die
andere Sprache für Wege des Typs B und/oder für Entwickler A und/oder
Entwickler B.
Dieses ganze "ich hasse Basic" oder "C ist das einzig Wahre" ist totaler
Bockmist und kommt von Leuten, denen die Sprache wichtiger ist als ein
gutes Ergebnis und von Toleranz haben die auch noch nichts gehört.
Nur mal so zum Nachdenken.
Grüsse und einen guten Start in die neue Woche
Michael
Michael S. wrote:
> Es kommt drauf an, dass man versteht, was man machen möchte. Eine> Programmiersprache ich der Weg zum Ziel, nicht mehr und nicht weniger.
Wenn das Ziel lautet: Möglichst portablen Code zu erzeugen, dann ist
BASCOM aber nunmal der falsche weg. Denn es ist und bleibt ein
proritärer Compiler. Für kleine Quick&Drity Projekte vielleicht ok, ab
wenn das Projekt in 5 Jahren vielleicht mal neu auf einem größeren µC
laufen soll, dann ist BASCOM eindeutig die falsch Wahl. Und wenn es
irgendwann MSC nicht mehr gibt gibt, kann man alles nochmal neu
programmieren.
@gast:
proprietär, das meinst ;)
Die größte Schwäche von Basic ist die Nichteinhaltung von Normen. Jeder
Compiler kocht sein eigenes Süppchen - aber in den Grundzügen passt es
dann doch wieder.
Ich selbst programmiere (inzwischen) sehr gern mit C, früher war ASM
mein Favorit - aber Basic hat auch seinen Reiz.
Basic haften von früher viele Vorurteile an, es sei langsam, ineffektiv.
Wenn man sich den C64-Interpreter mal genauer anschaut, sieht man auch,
dass der damalige Programmierer alles getan hat, es langsam zu machen
(da wundert dann nicht mehr, dass dieses Basic von Microsoft kam).
Inzwischen ist Basic schon lange erwachsen geworden und kann es
problemlos mit anderen Sprachen aufnehmen.
Schlußendlich ist es eine Frage der Umsetzung. Während man bei C ständig
im Datenblatt schauen muss, welches Bit in welchem Register gesetzt
werden muss, ist es bei Basic eben die Befehls-Referenz ;)
Schlussendlich muss man zugeben, dass Bascom für µC-Anfänger ein
wesentlich einfacherer Einstieg als C ist. Ich habe schon min. 5
Anfängern Bascom empfohlen, und alle sind sehr zufrieden, weil
unglaublich schnell Ergebnisse erzielt werden. Ich selbst bin noch ein
Wackelkandidat, mir ist Bascom noch etwas zuviel "Black-Box", man
bekommt schon zuviel Arbeit abgenommen - aber ich wanke bereits ;)
Halle Leute,
wenn man hier liest wird man das Gefühl nicht los dass sich in diesem
Forum eine Unmenge ignorranter Dummköpfe bewegen.
Ich schreibe seit fast 30 Jahre Software und hatte nie ein Problem mit
einer Programmiersprache. Meine ersten Programme wurden noch auf einem
Blatt Papier codiert und dann mit einer 16er Tastatur in den Controller
gehackt (war übrigens bereits ein 8048). Lange Zeit gab es für mich
nichts anderes als Assembler. Als erste Hochsprache habe ich Basic
gelernt, war ein Horror aber nicht wegen der Sprache. Mit der
Hochsprache wusste ich plötzlich nicht mehr was die Hardware wann
tatsächlich tut. Ich habe Industriesteuerungen mit Basic programmiert,
da dieses Basis damals die einzige Programmiersprache war welche in
ihrer Syntax Befehle zur Unterstützung von Multitasking enthielt. Ich
habe aber auch Programmiersprachen benutzt, welche viele von Euch nicht
mal kennen (kleiner Auszug Fortran, Ada, Forth, Smalltalk, ...). Wichtig
bei einer Problemlösung ist aber das WIE und nicht das WOMIT.
Daher lasst diejenigen, welche gerne Software in Basic schreiben, diese
in Basic schreiben, diejenigen die C lieben werden ihre Programme in C
schreiben, andere verwenden Assembler, Pascal oder Java. Wenn das
Ergebnis dem Ziel angemessen ist ist das doch OK.
Wenn ein Wettbewerb eine Programmiersprache vorschreibt wird das seine
Gründe haben, seien diese kommerziell oder auch anderer Natur. Ich kenne
das Roboter-Forum und weiss, dass dort ein Grossteil der Leute in Bascom
programmiert, vielleicht ist auch das der Grund.
Und wer an diesem Wettbewerb nicht teilnehmen möchte, kann es ja bleiben
lassen. Wer aber gierig auf den Gewinn von € 500,- ist, der soll die
Bedingungen akzeptieren und nicht maulen.
Gruss an alle und weiter viel Spass
ein Alter Hase
marvin m. wrote:
> Schlussendlich muss man zugeben, dass Bascom für µC-Anfänger ein> wesentlich einfacherer Einstieg als C ist. Ich habe schon min. 5> Anfängern Bascom empfohlen, und alle sind sehr zufrieden, weil> unglaublich schnell Ergebnisse erzielt werden.
Da stimme ich dir uneingeschränkt zu. Es ist einfach, aber es nimmt
einem das selbständige Denken zumindest teilweise ab, und das ist
gefährlich:
> Schlußendlich ist es eine Frage der Umsetzung. Während man bei C ständig> im Datenblatt schauen muss, welches Bit in welchem Register gesetzt> werden muss, ist es bei Basic eben die Befehls-Referenz ;)
Es gab hier im Forum schon Leute, die Software in BASCOM in der
Codesammlung für ein Oszilloskop mit einem AVR gepostet haben, im Code
übelst rumgepfuscht haben, um eine hohe Datenrate AVR->PC zu erzielen,
aber nichtmal wussten dass es einen ADC Prescaler gibt, mit dem man die
ADC Taktrate und somit die Samplerate einstellen kann (der daher mit
einem langsamen Takt lief, weshalb die Messungen einfach nur Mist
waren). Sowas kann ich C nicht passieren, denn denn wenn man die
Register nicht selbst setzt, setzt sie keiner, und das merkt man
schnell.
Und wenn man hier im Forum liest, merkt man schnell, dass es vor allem
Leute sind die in BASCOM programmieren, die bei kleinsten Problemen die
es so nicht vorgefertigt gibt, aufgeben, da sie mit dem Datenblatt
überfordert sind (bzw. nichtmal wissen dass es hilfreich wäre das mal zu
lesen).
Das ist der Grund wieso zumindest ich kein BASCOM mag: Man kann zwar
programmieren, aber hat letzendlich Null Ahnung von einem µC, wenn man
aktiv nichts dagegen unternimmt. In C wird man quasi zur Selbständigkeit
gezwungen.
>Das ist der Grund wieso zumindest ich kein BASCOM mag: Man kann zwar>programmieren, aber hat letzendlich Null Ahnung von einem µC, wenn man>aktiv nichts dagegen unternimmt. In C wird man quasi zur Selbständigkeit>gezwungen.
Das stimmt so nicht. Die Lernkurve ist nur anders. In Bascom steigt man
tatsächlich ohne tiefere Microprozessorkentnisse ein und kommt auch
schnell zum Ziel, dem fertigen Programm. Erst nachdem an einige
Programme geschrieben und höhere Anforderungen an da sProgramm hat lernt
man STück für Stück die internen Eigenschaften des Controllers kennen.
Da hilft übrigens auch die gute Bascom Dokumentation kräftig beim
lernen.
C und erst Recht Assembler programmierer quelen sich von Anfang an duch
das Microcontroller Interna. Sie sind froh wenn Sie nach Stundne von
Arbeit endlich ein paar Buchstaben zum PC sendne können - also Aufgaben
die Bascom in einer Zeile erledigt. Das führt dazu das C und Assembler
Einsteiger nicht selten nach Tagen oder Wochen die Lust verlieren und
den Mikrocontroller nie mehr anfassen.
Also mir ist der bequeme Weg lieber, zumal er keinen Nachteil bietet.
Und wie man stolz sein kann eine Programmiersprache "nicht zu können"
ist mir auch schleierhaft. Man muss nicht alle können, aber darauf muss
man trotzdem nicht stolz sein.
Also ich käme mir schon ziemlich hilflos vor, wenn ich ohne Arrays,
Strukturen, Funktionspointer usw. auskommen müßte.
Und pro Rechenoperation immer ne extra Zeile, läßt den Quellcode doch
schnell lang und unübersichtlich werden.
Ich halte C für viel mächtiger und universeller.
Vielleicht kann mir ja mal ein Bascom-Experte zeigen, wie dieses
einfache Scheduler Beispiel in Bascom aussehen würde:
Beitrag "Wartezeiten effektiv (Scheduler)"
Und Filesysteme, TCP/IP usw. habe ich bisher nur in C geschrieben
gesehen.
Oder kennt jemand sowas auch als Bascom-Source?
Peter
Zum einen gibt es Array´s und zum anderen kann man auch direkt auf
Speicherstellen zugreifen, was in etwa einem Pointer entspricht.
Das nur einzelne Rechenoperationen pro Zeile möglich sind ist in der Tat
ein kleines verbesserungswürdiges Manko von Bascom, allerdings solltest
du sowas erstmal in Assembler machen - dort brauchst du zahlreiche
Zeilen für solch kleine Operationen. Da gibts übrigens auch keine
Strukturen.
Natürlich gibts für Bascom auch Lib´s für TCP und Filesysteme, alles
kein Problem.
In jedem Fall ist ein Bascom Programm im Source wesentlich kürzer als
ein C Programm und zudem wesentlich besser lesbar. gerade deshalb ist es
ja so beliebt.
Der [?]-Code ist nicht portabel... wenn ich das nur schon hoere... Ist
er eh nicht. Weder in C noch in sonstwas. Ausser vielleicht auf den
naechst groesseren AVR. Portabilitaet bedeutet die Idee ist portabel,
nicht der Code. Und um die Idee bestmoeglich portieren zu koennen muss
die Spache uebersichtlich und intuitiv sein. Leider gehoert u+=(1<<1)
nicht dazu.
Bastler wrote:
> zum anderen kann man auch direkt auf> Speicherstellen zugreifen, was in etwa einem Pointer entspricht.
Davon habe ich nicht geredet, sondern von Funktionspointern.
Funktionspointer (Callbacks) werden in größeren Programmen sehr häufig
benötigt.
Abgesehen davon, ist ein Speicherzugriff keinesfalls einem Pointer auch
nur ähnlich.
Wenn ich in C einen Pointer auf ein Strukturelement zeigen lasse, muß
ich nicht wissen, wie er diese Struktur intern abgelegt hat.
Ich kann mich einfach voll darauf verlassen, daß der Compiler die
richtige Anzahl Bytes in der richtigen Reihenfolge mit dem richtigen
Offset zu der richtigen Basisadresse liest.
> Natürlich gibts für Bascom auch Lib´s für TCP und Filesysteme
Davon habe ich nicht geredet, sondern wie man Bibliotheken erstellt.
Bibliotheken sind nichts statisches, man muß sie geänderten
Erfordernissen anpassen können oder Fehler beheben (Bibliotheken werden
ja nicht von Gott erschaffen).
Wenn für Bascom deartige Bibliotheken erstellt wurden, dann mit
Sicherheit in C.
Entweder es wurde für Bascom ein C-Interface (Calling-Konventionen,
Stack, Register) erstellt oder jemand hat sich die Mühe gemacht, den
Assembleroutput des C-Compilers mit Bascom zu verwursten.
> In jedem Fall ist ein Bascom Programm im Source wesentlich kürzer als> ein C Programm und zudem wesentlich besser lesbar.
Aber nur, wenn Du die verwendeten Bibliotheken (Blackboxes) nicht
mitzählst.
Allerdings ist die Philosophie bei C ne andere. Bibliotheken werden
erstmal lange Zeit als Quelltext (z.B. im Example-Verzeichnis) belassen
und nur wenn sie sich bewährt haben und fehlerfrei scheinen, wird ne
Objekt-Bibliothek gemacht. Daher scheint es, daß für C weniger
Bibliotheken bestehen, was aber nicht der Fall ist.
Peter
Ohh wrote:
> Der [?]-Code ist nicht portabel... wenn ich das nur schon hoere... Ist> er eh nicht. Weder in C noch in sonstwas.
Gut geschriebener C-Code ist sogar sehr gut portabel. Schau dir mal
FreeRTOS an, elm chans FATFS-Bibliothek oder Peter Danneggers
Entprellungsroutinen. Die sind wunderbar portabel und wurden schon auf
einem halben Dutzend verschiedener Architekturen getestet.
Ich bin kein Freund der Sprache Basic, finde aber dass BASCOM durchaus
eine Daseinsberechtigung hat. Wenn es um einfache Steuerungsaufgaben
geht und es nicht auf Portabilitaet oder das letzte Prozent Effizienz
ankommt (Einzelstuecke, Prototpen), dann ist BASCOM gut geeignet.
Peter Dannegger wrote:
> Wenn für Bascom deartige Bibliotheken erstellt wurden, dann mit> Sicherheit in C.
Es gibt auch einen TCP/IP-Stack komplett in Bascom. Sogar fein
säuberlich erklärt wie alles Funktioniert und leicht anzupassen. Inkl.
kleinem Webserver und "Treiber" für einen RTL8019AS:
http://members.home.nl/bzijlstra/software/examples/RTL8019as.htm
Gruß
Dominique Görsch
>Davon habe ich nicht geredet, sondern von Funktionspointern.>Funktionspointer (Callbacks) werden in größeren Programmen sehr häufig>benötigt.
Bascom ist sehr maschinennah! Natürlich kannst du auch Adressen direkt
anspringen und manipulieren was dann einem Funktionspointer entspricht.
Du kannst auch mitten im Code Assembler Code einfügen.
Aber gewöhnlich ist der Pointer Kram in Bascom garnicht notwendig, was
die größte Fehlerquelle der C-Programmierer vermeidet
Bastler wrote:
> Bascom ist sehr maschinennah!
Ja ne, is klar.
Maschinennah heißt nicht, dass Inline Assembler möglich ist. Also Print
"Hallo" finde ich nicht gerade sehr maschinennah.
Wenn jemand mal versucht hat, mit einem 12F675/etc Video-Signale zu
erzeugen, weiss genau, dass es hier auf den letzten CPU-Cycle ankommt,
damit das Timing stimmt.
Da geht kein BASIC! Auch bei einem Software-UART geht kein BASIC (es sei
denn, dieses hat effiziente ASM-Librarys eingebaut).
Ausschnitt einer Video-Generator Routine
1
......
2
RLF GPIO,F ;ROTATE BIT 6 OUT OF CARRY
3
RLF INDF,W ;ROTATE BIT 7 INTO CARRY
4
RLF GPIO,F ;ROTATE BIT 7 OUT OF CARRY
5
BCF GPIO,0
6
BTFSC LINECTR,2 ;CHECK IF ON 5TH LINE
7
BSF GPIO,0 ;MAKE A SEPARATOR DOT
8
NOP ;MAKE DOT SAME SIZE
9
BCF GPIO,0 ;REMOTE THE DOT, IF ANY ;;22 INSTRUCTIONS... 4.4 US
10
BTFSC FSR,1 ;SKIP IF DATE OUTPUTED
11
GOTO PUTTIME
12
INCF FSR ;NEXT VRAM LOCATION
13
.....
Wenn man solche Realtime Anwendungen macht, dann muss man ASM
programmieren.
Mit Realtime meine ich Mikrosekunden! Der Vorteil ist jener, dass der
Programmierer selbst optimieren kann. Man muss einen Kompromiss zwischen
Geschwindigkeit (CPU-Cycle) und Speicherbelegung (RAM, ROM) machen.
Vor allem, da man in einem 12F675 keinen Hardware-Shifer (SPI) oder
andere HIlfsmittel hat.
Ausserdem muss man mit dem RAM (64 Bytes) und dem ROM/Flash (1K Words)
auskommen.
Wenn man nur Taster abfragt, ist das egal, oder wenn man Aufgaben, die
mit 5 MIPS zu schaffen sind auf einem ARM7TDMI macht.
Man sollte den MCU nicht als "Blackbox" betrachten!
>Wenn jemand mal versucht hat, mit einem 12F675/etc Video-Signale zu>erzeugen, weiss genau, dass es hier auf den letzten CPU-Cycle ankommt,>damit das Timing stimmt.
Sicherlich sind solche Spezialanwendungen nur mit etwas Assemblercode
machbar, das will keiner bestreiten. Aber es spricht ja nix dagegen das
man solchen Code in ein Bascom Programm einbettet. Es gibt übrigens
sowas schon für Bascom!
Sprache hin -- Sprache her.
Im Endeffekt sind sie gleich mächtig. In der Sinne, daß beide ebenso
mächtig sind wie Turing-Maschinen ;-)
Soviel zur Theorie.
In der Praxis will man die Resourcen der Hardware möglichst gut nutzen,
also nicht unnötig Platz und Zeit vertrödeln.
Wie ein Programm umhgesetzt wird, ist nur soweit an die Sprache
gebunden, wie diese spezifiziert ist. Darüber hinaus bleibt viel Raum,
dichten und/oder schnellen Code zu finden. Er muss nur genutzt werden.
Wenn man BASCOM mit avr-gcc vergleicht und schaut, was beide aus
1
i := i-1
machen, dann braucht gcc idR dazu 2 Takte und maximal 4 Bytes Code,
während BASOM einen Call(!) macht
1
LD ZL,X+
2
LD ZH,X
3
SBIW ZL,0x0001
4
ST X,ZH
5
ST -X,ZL
6
RET
weil es Werte nie in Registern hält, sondern nur auf einem eigenen
Soft-Stack operiert.
Allein die Laufzeit des BASCOM-Codes wäre ein absolutes Killerkriterium
in vielen meiner Applikationen.
Beispiel 1
6 Nixie-Röhren (jede braucht 4 Ports) hängen nebst Lautsprecher etc an
einem SPI-Bus mit 4 Expandern 74*595. Per 20kHz bzw alle 800 Ticks
müssen 4 Bytes gesandt werden. Das Senden ist kein Problem, das macht
die Hardware. Aber über den SPI läuft für jede Kathode ne Soft-PWM zum
Dimmen/Überblenden, und die Daten müssen für jeden Frame neu berechnet
werden. Selbst eine Verspätung von einem Främe lässt die Röhren zappeln.
Beispiel 2
Eine Uhr hat zur Anzeige eine 3*(9 LED + 1 Taster) Matrix. Die LEDs
werden per Soft-PWM angesteuert. In einer PWM-Lücke wird eine LED-Zeile
als Photodioden geschaltet und die Umgebungshelligkeit gemessen, um den
LEX-Helligkeit an die Umgebungshelligkeit anzupassen.
Beispiel 3
Pixel auf ne Oszi-Röhre pinseln. Die erreichbaren Pixel/Sekunde
kann man sich aufteilen in Pixel/Frames * Frames/Sekunde, also
Bildauflösung * Zeitauflösung. Je mehr, desto besser. avr-gcc schafft
bei einem ATmega88@24MHz 32000 Pixel/Sekunde. Wieder ist das Ding nicht,
die Pixel zu setzen, sondern in Echtzeit zu berechnen (Vektorfonts,
Linien, Kreise, Fraktale, Morphing).
Ergo
Vom Peis-Leistungs-Verhältnis sehe ich keinen Grund für BASCOM,
zumindest was den erzeugten Code angeht. Es scheint so programmiert, wie
ein unbescholtener Ingenieur sich einen Compiler vorstellt: Jedes
Hochsprach-Element wird in eine bestimmte, vordefinierte
Assembler-Sequenz abgebildet. Fertig.
Kann man breiten Code durch nen immer fetteren AVR kompensieren, ist man
bei der Geschwindigkeit fix am Deckel. Und warum soll ich nen
ARM/i386/TriCore/PPC nehmen, wo ein AVR reicht? C-Code kann ich so
schreiben, daß er ebenso auf dem PC wie auf nem AVR-Winzling läuft.
Komplexere Software fang ich auf dem PC an und hab dort die volle Power
von Grafik uns Analysetools, was ich in nem Simulator nicht hätte.
Was an BASCOM nett zu sein scheint sind die ganzen Bibliotheken und daß
es vielen den Einstieg in die µC-Welt einfach macht und nicht gleich
abschreckt. Allerdings gibt's auch genug Teenager, die ihren Asuro in C
proggen.
Was mir schleierhaft ist, ist daß BASCOM noch nichtmal schafft,
komplexere Ausdrücke zu verarbeiten. Sowas bringt ein simpler, frei
verfügbarar Parser wie bison frei Haus, und der erzeugte Code muss
dennoch nicht unter die GPL. Mir scheint, da hat wer seine Hausaufgaben
nicht gemacht...