Nur aus reinem Interesse: Gibt es hier jemanden der ernstzunehmende
Programme in BASCOM schreibt?
Beantwortet bitte nur die Frage, wenn jemand über „BASCOM vs. Irgendeine
andere Programmiersprache“ diskutieren will: Jeder kann sich hier einen
eigenen Thread dafür aufmachen.
Ich bin jetzt Kein Basic Fan, aber man kann da auch ordentlich was
machen von der Perfotmance ist es halt schlechter als c oder Assembler.
Bei Basecom bist du halt nicht so nahe an der Hardware.
(Gast) schrieb:> Beantwortet bitte nur die Frage, wenn jemand über „BASCOM vs. Irgendeine> andere Programmiersprache“ diskutieren will: Jeder kann sich hier einen> eigenen Thread dafür aufmachen.
Oh schon wieder....
(Gast) schrieb:> Nur aus reinem Interesse: Gibt es hier jemanden der ernstzunehmende> Programme in BASCOM schreibt?
Ja, denn ich schreibe Programme, die einen Zweck erfüllen und
funktionieren; demnach ernstzunehmen sind.
@Jan R. Warum hast du geantwortet?
Ob ein Programm "ernsthaft" ist oder nicht, macht sich nicht an der
Programmiersprache fest. Nur weil eine bestimmte IDE es erlaubt,
unübersichtlich und liederlich zu progrsammieren, muss man das ja nicht
so machen.
Ein guter Programmierer hat sicher seine persönliche Lieblingssprache
oder gewisse Zwänge (z.B. verfügbare Bibliotheken, Teamarbeit) bedingen
eine konkrete Programmierumgebung - d.h. aber nicht, dass alles andere
automatisch Mist ist.
Hallo,
auch wenn gleich wieder viele über Bascom schimpfen werden hier unsere
Erfahrung und Nutzung:
Wir nutzen es für alle Elektroniken und zwar ausschließlich.
C wird zwar ebenfalls beherrscht.
Die Software für die MCUs lässt sich mit Bascom wesentlich schneller
erstellen als mit C (ACHTUNG: Unsere Erfahrung, andere sehen das
bestimmt etwas anders).
Man muss aber erstmal sehr viel Erfahrung mit Bascom gesammelt haben, um
Projekte damit Umzusetzen. Es gibt immer wieder mal Stellen an denen man
sonst hängen bleibt (Ohne ersichtlichen Grund).
Ist man damit vertraut, dann können sehr gute Programme in sehr kurzer
Zeit
erstellt werden.
Für richtig Zeitkritische Anwendungen (RT) sehe ich Bascom eher als
schwierig an.
Normalerweise antworte ich nicht auf solche Fragen von einem (Gast),
weil es oft genug nach Stunksuche aussieht. Trotzdem: Hier ein Link
zur Codesammlung von MCS-Electronic (Hersteller von Bascom). Dort
kannst Du auch ziemlich umfangreiche und anspruchsvolle Aufgaben-
lösungen finden:
http://www.mcselec.com/index.php?option=com_content&task=category§ionid=7&id=79&Itemid=57
Bascomnutzer schrieb:> Für richtig Zeitkritische Anwendungen (RT) sehe ich Bascom eher als> schwierig an.
Daß Inline-Assembler möglich ist, ist Dir nicht bekannt?
Kai Mauer schrieb:> Daß Inline-Assembler möglich ist, ist Dir nicht bekannt?
Das ist bekannt. Es gibt immer eine Möglichkeit sowas zu lösen.
Die Frage ist immer wie RT die Anwendung sein muss. Die Reaktion auf
einen Interrupt ist so leicht umzusetzen. Wenn die RT Anforderung sehr
komplex ist, dann wird es schon aufwendiger.
Je nach Projekt.
(Gast) schrieb:> Gibt es hier jemanden der ernstzunehmende Programme in BASCOM schreibt?
Ist dir der Vektor-Antennen-Analyzer FA-VA3 von DL1SNG „ernsthaft“
genug?
Ich programmiere das Meiste in Bascom... der Umfang an fertigen
Funktionen ist enorm und eine Idee ist nullkommanix in Code umgesetzt.
Ich habe anfangs auch schon Funktionen selbst gebaut, bevor ich bemerkt
habe, dass diese in den unzähligen Bascom-Funktionen bereits vorhanden
sind.
Das Einzige was mich wirklich nervt, ist die Tatsache, dass im Code als
Operanden keine arithmetische Mehrfachoperationen oder Klammerausdrücke
verwendet werden können, so dass man alles in Einzelschritten erledigen
muss. Ich kann es nicht nachvollziehen, wieso man sich seitens der
Entwickler durch diese Flapsigkeit den Sprung über die semiprofessionele
Hürde hinaus vergeben hat.
Durch die Möglichkeit, an jeder Stelle auch Assemblerbefehle verwenden
zu können, relativiert sich dieses Manko etwas, indem man manche Abläufe
eben auf Registerebene erledigt. Ausserdem lassen sich selbstgestrickte
Assemblerfunktionen als Bibliotheken einbinden. Ich programmiere eh
gerne maschinennah und weiß dann, was der µC im Detail macht, ob und wo
noch Optimierpotenzial ist.
Wenn ich mir den compilierten Bascom-Code im Disassembler anschaue, kann
ich nicht feststellen, dass Bascom generell "langsamen" Code generiert.
Manches würde ich in Handarbeit vielleicht anders angehen. Es hängt wie
immer von den eigenen Erfahrungen und nicht zuletzt von der Kenntnis der
unzähligen Bascom-Funktionen ab, wie komplex und effektiv man damit
coden kann.
Gruss
Man liest immer wieder "Bascom, weils schneller geht". Heutzutage ist
schnell doch eigentlich das wichtigste! Bascom müßte demnach viel
populärer sein.
Warum heißt es hier also immer C ist besser, bzw. wird gegen Bascom
geflamt (ehrliche Frage)?
kamillentee schrieb:> Man liest immer wieder "Bascom, weils schneller geht". Heutzutage ist> schnell doch eigentlich das wichtigste! Bascom müßte demnach viel> populärer sein.
jeder der regelmäßig µC Programm hat auch in C seine eigenen libs, damit
ist es auch nicht langsamer als mit Bascom.
Es gibt Leute (C), die schwatzen viel von Portierbarkeit. Andere wollen
nur ein Problem geloest haben und nachher vergessen.
Ja, es gibt auch Loesungen, die man portieren moechte. Sofern das denn
ueberhaupt geht.
Jetzt Nicht schrieb:> Andere wollen nur ein Problem geloest haben und nachher vergessen.
Das ist kein Grund, denen, die in C programmieren, zu unterstellen,
dass sie etwas anderes möchten. Auch die wollen ihr Problem gelöst
haben und es danach vergessen. Wenn man die Sprache kennt und sich
über die Zeit seine eigenen Codeschnipselchen oder Bibliotheken
gezimmert hat und/oder auf solche aus dem Netz zurückgreifen kann,
ist das absolut kein Problem.
Aber es ist eben auch überhaupt keine Frage, dass man deshalb nun
mit einem Tool wie Bascom irgendwie schlechter arbeiten müsste als
jemand, der all seinen Kram in C macht. Bascom hat neben der anderen
Programmiersprache einfach einen anderen Anspruch und verhilft damit
(vermutlich – ich kenne es nicht selbst) Einsteigern und
Gelegenheitsprogrammierern zu einem schnellen Start.
@kamillentee
Jeder der "seine" Programmiersprache aus dem FF kennt, beherrscht und im
Detail versteht was dabei auf der Hardware abläuft, kann damit schnell
und effektiv coden. Jedem Tierchen sein Plaisierchen...
Dem Basic-Dialekt als solchem, hängt ja leider noch der urzeitliche
Nimbus einer Interpreter-Ausführung an, die im Gegensatz zum
Compiler-Basic oder sonstigen compilierten Hochsprachen doch deutlich
langsamer war. Aus dieser Ecke, des leicht verständlichen,
hardwarefernen Dialekts für Anfänger, der langsamen Code produziert,
kann sich Basic eben nur schwer befreien. Dabei steht die
Funktionsvielfalt, die hardwarenahe Einflussmöglichkeiten und die
Geschwindigkeit des generierten Codes der modernen Basic-Varianten, den
anderen Sprachen in nichts mehr nach.
Bei den Basic-Dialekten erscheint mir die Syntax ungeschlagen intuitiv
und spontan einleuchtend, so dass jeder Neueinsteiger und jeder
"Fremdsprachler" sowieso, den Quellcode ohne Klimmzüge verstehen kann.
Bei den anderen Hochsprachen geht das ohne gründliche Einarbeitung in
ihre syntaktischen und systemischen Eigenarten nicht so einfach. Auch
was das Procedere der Weitergabe der Quellcodes und den diversen Dateien
und Bibliotheken zur Compilierung betrifft.
kamillentee schrieb:> Man liest immer wieder "Bascom, weils schneller geht". Heutzutage ist> schnell doch eigentlich das wichtigste! Bascom müßte demnach viel> populärer sein.> Warum heißt es hier also immer C ist besser, bzw. wird gegen Bascom> geflamt (ehrliche Frage)?
Weil es (zu oft) nicht stimmt.
Bascom ist nur dann schneller, wenn man von den mitgelieferten fertigen
Modulen profitiert. Wenn man etwas erledigen will wofür es kein fertiges
Modul gibt, geht es entweder langsam oder schlimmstenfalls gar nicht.
Bascom ist vergleichbar mit Fertigteilhäusern. C ist ein Haufen Steine,
Mörtel und eine Auswahl an Maurerkellen. Assembler ist eine Lehmgrube.
Und so wie es auf dieser Stufenleiter immer mehr einzelne Schritte zum
fertigen Haus werden, je (scheinbar) einfacher das gewählte Werkzeug
ist, so steigen andererseits auch die kreativen Möglichkeiten. Aus
Steinen kann man ein Haus bauen, daß es als Fertighaus nicht gibt. Aus
Lehm kann man sich sogar Ziegel in einer Form machen, die man sonst
nicht fertig bekommt.
Axel Schwenke schrieb:> Aus Lehm kann man sich sogar Ziegel in einer Form machen, die man sonst> nicht fertig bekommt.
Aber es ist eben noch mehr Aufwand. ;-)
Andererseits kann man gewiss auch im Fertigteilhaus problemlos leben,
sofern man nicht gerade Extrawünsche hat, für die es keine Fertigteile
gibt und die sich auch nicht ohne Weiteres in das Fertigteilkonzept
integrieren lassen.
Solange ich an jeder Stelle Assemblerbefehle im Quellcode platzieren
kann, habe ich mit Bascom ein Fertighaus mit Lehmgrube... muss ja nicht
immer ein Swimmingpool sein... ;-)
Axel Schwenke schrieb:> Bascom ist vergleichbar mit Fertigteilhäusern. C ist ein Haufen Steine,> Mörtel und eine Auswahl an Maurerkellen. Assembler ist eine Lehmgrube.
Das erscheint mir nicht ganz richtig. Bascom würde ich eher mit einer
ganzen Reihe von Fertig_Bauteilen wie sie im Plattenbau üblich sind,
vergleichen. Die kann man benutzen -muß man aber nicht. Es ist natürlich
auch möglich, sich "Großbauteile" aus einzelnen Steinen und Mörtel
selbst
zu bauen, wenn es das "Ferigbauteil" nicht gibt oder nicht so gibt,
wie
man es sich vorstellt.
Axel Schwenke schrieb:> Bascom ist vergleichbar mit Fertigteilhäusern. C ist ein Haufen Steine,> Mörtel und eine Auswahl an Maurerkellen. Assembler ist eine Lehmgrube.>> Und so wie es auf dieser Stufenleiter immer mehr einzelne Schritte zum> fertigen Haus werden, je (scheinbar) einfacher das gewählte Werkzeug> ist, so steigen andererseits auch die kreativen Möglichkeiten. Aus> Steinen kann man ein Haus bauen, daß es als Fertighaus nicht gibt. Aus> Lehm kann man sich sogar Ziegel in einer Form machen, die man sonst> nicht fertig bekommt.
Ach deshalb gibts mittlerweile so viele Fertighäuser :-P
Ich programmiere Mittlerweile auch in Bascom. Weils schneller geht!
Und Zeit ist Geld!
kamillentee schrieb:> Warum heißt es hier also immer C ist besser, bzw. wird gegen Bascom> geflamt (ehrliche Frage)?
Ich sehe hier eigentlich viel öfter das Bascom 'Anhänger' gegen alles
was nicht Bascom ist 'flamen'
Warum eigentlich?
Bascom kann doch noch nichteinmal ordentliche mathematische Ausdrücke
verarbeiten, geschweige denn iterative Programmierung, da stürzen die
Programme gerne aus unersichtlichen Gründen ab. Unser Fazit war: je
anspruchsvoller das Projekt um so schlimmer werden Fehlersuche,
Übersichtlichkeit und Stabilität. Von der jahrzentealten, völlig
überholten IDE fangen wir erst gar nicht an. Wer sich das heutzutage in
anebetracht der zahlreichen, auch kostenlosen Alternativen antut, bitte.
Nicht mehr als ein Spielzeug für Hobbyisten.
@ Alex W. (a20q90)
>Ich programmiere Mittlerweile auch in Bascom. Weils schneller geht!
Weil du nie eine ordentliche Hochsprache gelernt hast?
Auch wenn C nicht der Weisheit letzter Schluß ist, es ist ein sehr weit
verbreiteter Industriestandard. Auf den unterschiedlichsten Plattformen,
vom winzigen uC bis zur fetten Workstation (auch wenn es diesen begriff
heute so kaum noch gibt). Wenn man die Finger von den linken Tricks in C
lässt und alles etwas konservativer angeht, kommt man mit C sehr gut und
schnell zu soliden Ergebnissen.
BASCOM hat schon seine Berechtigung für Anfänger und
Gegenheitsprogrammierer. Es soll auch Leute geben, die BASCOM in
größerem Umfang im proifessionelem Umfeld einsetzen. Wenn sie damit gute
Ergebnisse erreichen, OK. Das Gleiche gilt für Arduino & Co. Mir wären
aber diverse Einschränkungen zu nervig, allen voran die verkrüppelten
Formeln mit nur EINER Operation pro Zeile! Wenn es etwas flotter sein
soll (Interrupts), ist der BASCOM-Compiler nicht so toll, der sicher mal
pro forma ALLE Register.
@Udo Schmitt (urschmitt)
>Ich sehe hier eigentlich viel öfter das Bascom 'Anhänger' gegen alles>was nicht Bascom ist 'flamen'>Warum eigentlich?
Viele Menschen haben einen geistigen Horizont mit dem Radius Null. Das
nennen sie dann ihren Standpunkt.
In BASCOM habe ich vor einiger Zeit ein Projekt unter der Adresse
www.ups.bplaced.de gefunden.
Das Projekt ist so umfangreich, dass ich glaube, dass damit auch alles
zu machen ist.
Alex W. schrieb:> Falk Brunner schrieb:>> Weil du nie eine ordentliche Hochsprache gelernt hast?>> Das schließt Du woraus?
Fragen mit Gegenfragen zu 'beantworten' bringt einen nicht wirklich
weiter. Wenn du sie einfach beantwortest hättest wäre uns das herumraten
und Schlussfolgerungen ziehen erspart geblieben.
Wie wäre es wenn die BasCom 'Profis' statt sich hier zu zoffen sich mal
um die Anfragen kümmern, die für bascom hier im Forum reinkommen.
z.B:
Beitrag "Benötige Unterstüzung bei Variablen"
@ Franz (Gast)
>Fragen mit Gegenfragen zu 'beantworten' bringt einen nicht wirklich>weiter. Wenn du sie einfach beantwortest hättest wäre uns das herumraten>und Schlussfolgerungen ziehen erspart geblieben.
Nun, für die nicht ganz so auffassungsschnellen.
>> Weil du nie eine ordentliche Hochsprache gelernt hast?>Das schließt Du woraus?
Das schließe ich aus der Aussage von ihm, die da lautete.
"Ich programmiere Mittlerweile auch in Bascom. Weils schneller geht!"
C ist nicht wirklich langsamer in der Entwicklung, WENN man ein paar
sinnvolle Codeschnipsel für LCD-Ansteuerung, UART, SD-Karte etc. hat.
Das ist der kleine Vorteil von BASCOM/Arduino etc., dass dort all diese
Codeschnipsel drinstecken.
> Wie wäre es wenn die BasCom 'Profis' statt sich hier zu zoffen sich mal
um die Anfragen kümmern, die für bascom hier im Forum reinkommen.
z.B:
Beitrag "Benötige Unterstüzung bei Variablen"
Weshalb sollte man jeden Artikel lesen ? Wenn's um Bascom geht koennte
das auch schon im Titel drin stecken. Das waer effizienter.
Falk Brunner schrieb:> Wenn es etwas flotter sein soll (Interrupts), ist der BASCOM-Compiler >nicht so
toll, der sichert mal pro forma ALLE Register.
Das ist die Default-Einstellung. Es geht auch individuell.
Optionen: ...ON interrupt label [NOSAVE|SAVE|SAVEALL]...
Gut, dass hier nur Leute schreiben, die mit der Materie vertraut sind...
:-)
Simpel schrieb:> Es geht auch individuell.
Neugierig:
Warum eigentlich nicht automatisch? Er sollte doch wissen, welche
Register er zerstört und daher sicher muss.
@ Simpel (Gast)
>Das ist die Default-Einstellung. Es geht auch individuell.>Optionen: ...ON interrupt label [NOSAVE|SAVE|SAVEALL]...
Wozu soll ein SAVEALL gut sein?
NOSAVE ist bestenfalls für reine ASM-Funktionen/Interrupts gut.
Was macht SAVE? Intelligent sichern? Warum ist DAS nicht der
Standardwert?
Jetzt Nicht schrieb:> Weshalb sollte man jeden Artikel lesen ? Wenn's um Bascom geht koennte> das auch schon im Titel drin stecken. Das waer effizienter.
Dumme Ausrede, jetzt kennst du den Thread ja, aber du solltest auch
richtig zitieren lernen.
Ist einfacher als Bascom, einfach Markierenund den richtigen Butten im
Beitrag unten rechts drücken.
Als typischer Gelegenheitsprogrammierer habe ich meine ein, zwei
Projekte pro Jahr früher in BASCOM Basic gemacht. Die haben (meistens)
auch funktioniert und tun das heute noch.
Das auch in diesem Thread angesprochene Ärgernis, dass pro
mathematischem Ausdruck eine eigene Zeile fällig ist und die
vorsintflutliche IDE haben mich inzwischen zu LunaAVR geführt. Das ist
doch schon wesentlich angenehmer! Ach, hätte es das doch schon vor 10
Jahren gegeben.
Etwas ärgerlich bei Luna sind die Bugs der jeweils aktuellen Betas, da
suche ich immer wieder Fehler in meinem Code, die in Wirklichkeit im
Compiler stecken.
Es ist eben noch eine recht junge Sprache. Ich muss aber auch sagen,
dass die gemeldeten Bugs innerhalb kürzester Zeit abgestellt werden.
Ein Plus bei Luna ist für mich die Nähe zu C (im Vergleich mit Bascom),
so dass bewährter Code, z.B. die 'Standardlösungen' von Peter Dannegger
für Tasterentprellung und Drehgeber oder Display Treiber recht einfach
in Luna übertragen werden kann, wenn man Grundkenntnisse in C hat. Beim
Bascom Basic fiel mir das noch viel schwerer.
Zusammenfassend kann ich aus meiner Sicht sagen, dass in jeder Sprache
'ernstzunehmende' Programme geschrieben werden können. Nur muss man sich
bei manchen Sprachen mehr plagen oder ärgern als bei anderen.
Soll also jeder das Werkzeug benutzen, das für ihn persönlich das
geeignetste ist.
Allerdings sollte man die verschiedenen Sprachen zumindest oberflächlich
kennen, wenn man urteilen will.
Erwin Endres schrieb:> in Plus bei Luna ist für mich die Nähe zu C (im Vergleich mit Bascom),> so dass bewährter Code, z.B. die 'Standardlösungen' von Peter Dannegger> für Tasterentprellung und Drehgeber oder Display Treiber recht einfach> in Luna übertragen werden kann, wenn man Grundkenntnisse in C hat.
Wenn du Peters Tastenentprellung fehlerfrei portierst, dann könntest du
doch auch in C programmieren.
Warum hast du dann eine ich sag mal so viel exotischere
Programmiersprache wie Luna gelernt, zumal du selbst schreibst das du
dann oft Fehler suchst, die nicht in deinem Code sondern an Luna liegen.
In C ist es ziemlich schwer auf einen Bug zu stossen.
Erwin Endres schrieb:> Soll also jeder das Werkzeug benutzen, das für ihn persönlich das> geeignetste ist.
Seh ich genauso, allerdings muss eine sachliche Diskussion um Vor und
Nachteile möglich sein, ohne dass glaich wieder der Kindergarten
losgeht. Aber das funktioniert leider selten.
Vor einer Stunde habe ich hier auf den Thread verwiesen, in dem ein
Bascom Anfänger Hilfe benötigt.
Resonanz bis jetzt: NULL!
Versucht zu helfen haben die, die eher wenig mit BasCom zu tun haben.
Traurig
Ihr Nurmis und JetztNichts und bascomnutzer, ...
könnt ihr nur in diesen Diskussionthreads diskutieren oder auch mal
einem Gleichgesinnten helfen?
Udo Schmitt schrieb:> Wenn du Peters Tastenentprellung fehlerfrei portierst, dann könntest du> doch auch in C programmieren.
Nach einem halben Jahr oder längerer Programmierpause fällt es mir
jedesmal wieder von neuem schwer, mich an die C Syntax zu
erinnern/gewöhnen. Da ist Luna oder auch Bascom für mich deutlich
intuitiver.
Außerdem ist es schon zweierlei, ob man einen Algorithmus in eine andere
Sprache überträgt oder ein komplettes Programm schreibt.
Btw: Die bewährten Peda Routinen sind inzwischen auch in Luna als
Bibliotheken enthalten.
> Traurig> Ihr Nurmis und JetztNichts und bascomnutzer, ...
Wie war das mit dem Kindergarten?
Und was sind Nurmis? Finnische Leichtathleten?
Hallo Udo,
Udo Schmitt schrieb:> Wenn du Peters Tastenentprellung fehlerfrei portierst, dann könntest du> doch auch in C programmieren.
Die hat er nicht portiert, das war ein anderes Team, die jetzige Lib
(Interface genannt) ist in Assembler codiert und entsprechend schnell.
PeDa's Drehimpulsgeber Algorithmus zur Auswertung eines Drehencoders
habe ich gerade für 4 Drehimpulsgeber als Lib (interface) implementiert
und Mehrfach Drehimpulsgeber (MultiRotaryEncoder) genannt.
> Warum hast du dann eine ich sag mal so viel exotischere> Programmiersprache wie Luna gelernt, zumal du selbst schreibst das du> dann oft Fehler suchst, die nicht in deinem Code sondern an Luna liegen.> In C ist es ziemlich schwer auf einen Bug zu stossen.
Da hast Du bestimmt etwas falsch verstanden, die LunaAVR V2015 R1 Beta
sind ja genau deshalb veröffentlicht um, Fehler die durch
Codeoptimierungen entstanden sind, zu finden.
Sie dienen nicht der Programmgenerierung für produktive Projekte.
Die Stabel heißt *LunaAVR V2014 R2.4*
# http://avr.myluna.de/doku.php?id=de:lunaavr_2014.r2
Uwe S. schrieb:> Die hat er nicht portiert, das war ein anderes Team, die jetzige Lib> (Interface genannt) ist in Assembler codiert und entsprechend schnell.
Doch, hat er schon! ;)
Das war bevor die Routinen als Interface zur Verfügung standen...
Mir fällt gerade der Name nicht mehr ein, aber der Typ, der den
Tricopter gebaut hat, hat auch alles in Basecom geschrieben. Ist alles
Open Source. Einen Kopter finde ich jetzt schon etwas anspruchsvoller,
das macht kein Anfänger. Und zu langsam darf die Sprache dann auch nicht
sein. Achso, der Typ hat auch was mit Biologie studiert und das
hinbekommen, man muss also nicht immer Informatiker oder E-Techniker
sein, um etwas "ernsthaftes" auf die Beine zu stellen :-)
Dennis
Erwin Endres schrieb:> Und was sind Nurmis? Finnische Leichtathleten?
Das waren die Nutzernamen der Nutzer die hier sehr 'aktiv' 'pro BasCom'
diskutiert haben.
Beispiel:
nurmi schrieb:> Wenn sich die C-'Profis' um alle C-Probleme kümmern würden, würden sie> in diesem thread wenigstens nicht stören.
Es fällt mir hier schon länger auf das vor allem bei Themen um BasCom
schnell sehr hitzig diskutiert wird, wenn aber ein Anfänger mal eine
Frage stellt, dann findet man praktisch nie diejenigen, die den "Flame"
Threads den Mund am weitesten aufmachen.
Jetzt habe ich sie praktisch auf den BasCom Thread gestossen, aber
keiner hat geholfen. Ich selbst kenne etwas Basic von ganz früher auf
dem PC aber lein BasCom, deshalb kann ich dem genannten Thread nicht
helfen.
Udo Schmitt schrieb:> Es fällt mir hier schon länger auf das vor allem bei Themen um BasCom> schnell sehr hitzig diskutiert wird,
Ach, das siehst du falsch. Hitziges Herumflamen gibt es hier zu
eigentlich allen Themen.
Aber, wenn wir mal ein paar Jahre zurückdenken, dann war Visual Basic
der damalige Renner, eben weil man damit recht schnell Programme mit
einer ganz ordentlichen Windows-Oberfläche hingekriegt hat und weil man
sich eben nicht durch kryptische Sprachsyntax durchbeißen mußte.
So ähnlich läuft's eben auch mit Bascom. Da kriegt man relativ
hardwarefern seine eigentliche Anwendung eben hin - sofern selbige eher
geradlinig ist. Das sit durchaus gut für Leute, die ihren Daseinssinn
nicht im Programmieren sehen, sondern anderweitige Ingenieur-Ziele
verfolgen.
Ein bissel ähnlich sieht das mit den Pascal-Implementierungen von mikroe
aus. Die sind durchaus in ihrem Ansatz für ähnliche Leute gedacht wie
das Klientel von Bascom - allerdings auf anderer Hardware.
Das Ganze hat natürlich auch seine Kehrseite: Bascom auf einer anderen
Platform als AVR geht sicherlich, Mikropascal auf anderen ARM's als
denen, die vom Hersteller bereits berücksichtigt wurden geht vielleicht
auch, aber WER sollte das machen bzw. einpflegen?
W.S.
Udo Schmitt schrieb:> Traurig> Ihr Nurmis und JetztNichts und bascomnutzer, ...> könnt ihr nur in diesen Diskussionthreads diskutieren oder auch mal> einem Gleichgesinnten helfen?
Dieser thread war überhaupt nicht als Diskussionsthread angelegt. Bis
auf die Unklarheit, was mit "ernstzunehmend" genau gemeint sei, war die
Frage des TO selten klar und er hatte auch noch vorbeugend geschrieben,
das er eben nicht eine Diskussion "BASCOM vs. Irgendeine andere
Programmiersprache" wünscht. Wer das nicht mehr weiß, kann das ja ganz
oben nochmal nachlesen.
Wenn das Wort Bascom auftaucht, fühlen sich aber immer wieder
irgendwelche User berufen den thread abseits des Themas zu zerreden.
Obwohl nicht mein thread aber Danke dafür :(
Um da mitzuhalten werde ich wohl, anstatt den Gleichgesinnten zu helfen,
den erkennbaren "C-Spezialisten" empfehlen müssen auf Bascom
umzusteigen.
>Ihr Nurmis und JetztNichts und bascomnutzer, ... könnt ihr nur in diesen
Diskussionthreads diskutieren oder auch mal einem Gleichgesinnten helfen?
Sorry, ich verwend kein Bascom, dafuer Pascal.
Einen Tiny2313 wuerd ich sein lassen. Hat zu wenig von allem. Allenfalls
in ASM. Die Kostenersparnis gegen einen vernuenftigen Mega ist marginal.
Jetzt Nicht schrieb:> Einen Tiny2313 wuerd ich sein lassen. Hat zu wenig von allem. Allenfalls> in ASM. Die Kostenersparnis gegen einen vernuenftigen Mega ist marginal.
Wenn dann tauscht man ihn gegen einen Tiny84 oder gleich 841. Der
Vorteil der Tinys im Vergleich zu megas ist die Größe vs. Handlebarkeit.
SOIC ist für viele (auch für mich) ein optimales Gehäuse. Weil es
relativ klein ist, sich aber sehr prozessicher löten lässt. Sowohl von
Hand als auch per Hobby-Reflow. Megas bieten sowas nicht. Die sind
entweder groß, oder haben gleich richtig winzige Gehäuse, welche dann
oft Probleme beim löten machen.
Ich als Bascomfan siehe ich die Sache so...
Wenn einer ein Quereinsteiger ist wie ich, habe Elektronik nicht
gelernt, kam ich mit Bascom sehr schnell zum Erfolg.
Sowas wie RGB Steuerung, Uhr, Thermometer usw..was man halt am Anfang
baut wenn man sich mit uC anfängt.
Wenn ich aber sehe, wieviel Threads existieren "LCD Anzeige nur schwarze
Balken", oder ADC Werte..dann sehe es ist meistens C. Habe zwar auch mal
versucht mit C was zu machen, aber mir persönlich ist ein C Code
schlechter "lesbar"( haufen klammern ) usw aber ist meine persönliche
Meinung.
Also für Hobby sehe Bascom wirklich super ausreichend.
Die andere Seite wie Industrie ( unsere Zulieferer schreiben
ausschliesslich in C..) also scheint mir als Industriestandard zu sein.
Ist schon fast wie Microsoft und Linux.
ich komme sehr viel bei Großkunden herum..also keine 100 Man Buden..habe
NIRGENDS..Linux bisher gesehen , (Windowsserver, Axapta..Office) oder
sind diese "Free Programme" bisher nicht über den Weg gelaufen, trotz
daß ich relativ viel in EDV Bereich bzw. Produktion unterwegs bin.
Dann ist die Frage wieder warum :
Industrie - C und Windows
Privat - Linux..naja wer was mag..und wöfür er Geld hat...Lol
Udo Schmitt schrieb:> Jetzt habe ich sie praktisch auf den BasCom Thread gestossen, aber> keiner hat geholfen.
Auch die hier Beteiligten vermögen im von Dir verlinkten Thread im
Moment nichts auszurichten, weil wesentliche Informationen seitens des
TE fehlen. Das hättest Du aber durchaus erkennen können.
Udo Schmitt schrieb:> Vor einer Stunde habe ich hier auf den Thread verwiesen, in dem ein> Bascom Anfänger Hilfe benötigt.
Der TE ist im Moment abgetaucht, wofür es mehrere Gründe gibt:
a) er muss arbeiten
b) er hat wild geändert und jetzt geht's, er weiß aber nicht mehr warum
c) der Fehler war so simpel, dass er sich geniert, sich wieder zu melden
d) es war was ganz was Anderes
Jetzt Nicht schrieb:> Einen Tiny2313 wuerd ich sein lassen. Hat zu wenig von allem. Allenfalls> in ASM.
Hm, also ich hatte da ganz nette Sachen untergebracht:
USB-HID-Geräte mit V-USB, Software-PWM mit so vielen Kanälen wie Pins
plus Animationen damit usw. Allerdings mit C und nicht BASCOM. :o
Das Problem an BASCOM ist ja nicht, dass es ein BASIC-Dialekt ist,
sondern der dilletantisch schlecht implementierte Compiler. Genug
Alternativen gibt es ja, wenn es BASIC sein muss.
Cyblord ---- schrieb:> Wenn dann tauscht man ihn gegen einen Tiny84 oder gleich 841.
Die haben allerdings beide nicht so viele Pins wie der 2313 und die Zahl
der Pins ist ja auch oft wichtig, nicht nur die Menge des Speichers. Was
übrigens diesen betrifft, steht ja auch für den 2313 bei
gleichbleibender Pinzahl der Upgrade-Pfad auf 2313A (neue
Hardwarefunktionen) oder 4313 offen (gleiche neue Hardware und
zusätzlich auch noch mehr Speicher).
> Der> Vorteil der Tinys im Vergleich zu megas ist die Größe vs. Handlebarkeit.> SOIC ist für viele (auch für mich) ein optimales Gehäuse. Weil es> relativ klein ist, sich aber sehr prozessicher löten lässt.
Nunja, 2313A und 4313 gibt's nach wie vor in DIP und SOIC. Also genau
so, wie es sein sollte.
Thomas der Bastler schrieb:> aber mir persönlich ist ein C Code> schlechter "lesbar"( haufen klammern ) usw aber ist meine persönliche> Meinung.
Alle Bascom-Beispiele, die ich bislang gesehen habe, sind grauenvoll
formatiert und minimalst kommentiert. Das erinnert mich an Zeiten, als
jedes Leerzeichen noch Platz im Programmspeicher belegte.
Das schreckt zunächst jeden Interessierten ab, der gerne strukturiert
programmieren möchte.
Aus Jux habe ich mir die Demo-Version geladen, um ein wenig zu spielen
und zu sehen, wieweit man mit 4K Code-Limit kommt. Aber offensichtlich
schaffe ich es nicht einen AVR ISP MKII Prommer anzusprechen. Die
Treiber von AVR Studio reichen wohl nicht und die Nachinstallation von
USBLIB-Treibern (oder so ähnlich) schaffen auch keine Verbindung. Ich
weiß nicht wie andere Anfänger damit klarkommen.
Simpel schrieb:> Das Einzige was mich wirklich nervt, ist die Tatsache, dass im Code als> Operanden keine arithmetische Mehrfachoperationen oder Klammerausdrücke> verwendet werden können, so dass man alles in Einzelschritten erledigen> muss.
Das würde ich nicht sonderlich schlimm finden, weil man dann sehen kann,
wie die Reihenfolge der Auswertung ist. Bei Assembler muß ich das ja
auch machen ;-)
c-hater schrieb:> Nunja, 2313A und 4313 gibt's nach wie vor in DIP und SOIC. Also genau> so, wie es sein sollte.
Sagmal hab ich die null gewählt oder warum meldet du dich dauernd von
den billigen Plätzen? Langeweile?
Dein DIP Gesülze nervt langsam aber sicher. Wenn dir die Features der
DIP Varianten reichen dann nimm sie. Niemand zwingt dich den 841 zu
verwenden.
Und den 84 gibts auch in DIP. Dafür hat er 8kb Flash und auch nen
HW-UART.
m.n. schrieb:> Aber offensichtlich> schaffe ich es nicht einen AVR ISP MKII Prommer anzusprechen. Die> Treiber von AVR Studio reichen wohl nicht und die Nachinstallation von> USBLIB-Treibern (oder so ähnlich) schaffen auch keine Verbindung. Ich> weiß nicht wie andere Anfänger damit klarkommen.
Die verwenden einfach die Hilfe, die MCS dafür bereitstellt:
http://avrhelp.mcselec.com/index.html?libusb.htm
Ich sage Dir: Das funktioniert tatsächlich...
m.n. schrieb:> Aber offensichtlich> schaffe ich es nicht einen AVR ISP MKII Prommer anzusprechen.
In der Tat..5 Min Google..dann weißt Du ja wie es geht, aber wenn man an
die Sache eh so rangeht.."ist sowieso nichts"..dann wirds an nicht
gehen.
Ich habe Bascom und den besagten USB Programmer..null Problem.Win7 64Bit
Ultimate.
Thomas der Bastler schrieb:> In der Tat..5 Min Google..dann weißt Du ja wie es geht, aber wenn man an> die Sache eh so rangeht.."ist sowieso nichts"..dann wirds an nicht> gehen.
Du meckerst ja so rum, als ob die Überschrift wäre:
"Darf man Bascom-Nutzer ernst nehmen?"
Soll ich darauf antworten?
Daß man bei einem AVR ISP MKII ein STK500 wählen muß, erschließt sich
mir allerdings nicht :-(
Thomas der Bastler schrieb:> aber mir persönlich ist ein C Code> schlechter "lesbar"( haufen klammern ) usw aber ist meine persönliche> Meinung.
Wenn man den C-Code vernünftig formatiert und einrückt, ist es IMHO kein
Problem, wenn man hingen keine Wert auf Formatierung legt kann man in
den meisten Programmiersprachen 'kryptische' Konstrukte erzeugen.
m.n. schrieb:> Daß man bei einem AVR ISP MKII ein STK500 wählen muß, erschließt sich> mir allerdings nicht :-(
Nur mal aus Interesse: Was glaubst Du, warum ich den Link zu der
Hilfedatei angegeben habe? Damit Du (immer noch falsch) behauptest,
daß der MK2 als STK500 angesprochen werden soll?
LIES die Anleitung oder schau Dir die Bilder an, falls Du mit dem Text
nicht klarkommst!
m.n. schrieb:> "Darf man Bascom-Nutzer ernst nehmen?"> Soll ich darauf antworten?
Darf man Leute ernst nehmen, die nicht mal einen Programmer in Betrieb
nehmen können?
Soll ich darauf antworten?
Kai Mauer schrieb:> Darf man Leute ernst nehmen, die nicht mal einen Programmer in Betrieb> nehmen können?
Nana.. nicht gleich weißglühen.
Also: Im Grunde habe auch ich etwas gegen alle µC, zu deren
Programmierung man zwangsweise einen speziellen Programmer braucht. Egal
ob es nun einer ist, der sich JTAG oder SWD oder was proprietäres nennt.
Natürlich geht so ein Equipment, und für jemanden, der das Geld für
einen JLINK oder ULINK2 oder was Vergleichbares hat, ist das auch gar
kein Thema. Ebenso nicht für diejenigen, die irgend ein Eval-Board mit
darauf enthaltenem JTAG/SWD-Adapter haben.
Aber: Es gibt trotzdem Leute, bei denen die Situation anders aussieht -
und genau deshalb sind mir µC sympathischer, die einen eingebauten
Bootlader haben, so daß man auch mit sehr simplem Equipment
(COM-Port+MAX232 oder USB-Serial Adapter vom Chinesen oder gar USB
direkt) zu Potte kommt.
Ja, früher gab's auch mal nen Atmel-Programmer für den PP, aber das ist
lang her. Heutzutage sind mir aus o.g. Gründen die ARM's und Cortexe von
NXP und ST mit ihren fest eingebauten Bootladern lieber als all die
bisherigen kleineren µC, wozu ich eben auch all die AVR's zähle.
So ein Cortex, der sich dank eingebautem USB-Lader schlichtweg ganz ohne
irgendwelches Geschirre programmieren läßt, wenn man mal von einem
Jumper und einem Taster absieht, erscheint mir derzeit als das ideale
Einsteiger-Equipment. Eigentlich wäre aus Sicht der Bascom-Leute
durchaus zu wünschen, für selbigen eben auch so eine Cortex-Plattform zu
haben.
W.S.
Erwin Endres schrieb:> Das auch in diesem Thread angesprochene Ärgernis, dass pro> mathematischem Ausdruck eine eigene Zeile fällig ist und die> vorsintflutliche IDE haben mich inzwischen zu LunaAVR geführt. Das ist> doch schon wesentlich angenehmer!
Jetzt nicht mehr! Ein Forum das nicht mal mehr für Gäste öffentlich
lesbar ist taugt nicht. Mein Interesse an LunaAVR ist damit auf null
erloschen. Schade drum!
W.S. schrieb:> So ein Cortex, der sich dank eingebautem USB-Lader schlichtweg ganz ohne> irgendwelches Geschirre programmieren läßt, wenn man mal von einem> Jumper und einem Taster absieht, erscheint mir derzeit als das ideale> Einsteiger-Equipment.
Je komplexer der Controller, desto schwieriger wird's für den Benutzer,
vor allem wenn er das Gros der Funktionalität nicht benötigt.
Andererseits gibt's das ja schon, es lässt sich als Programmer "Arduino"
unter Bascom einstellen (57600 Baud).
Damit wird der Bootloader der Arduinos verwendet und die Arduino
AVR-Plattform ist so direkt einsetzbar. Kaputt-fusen per Bootloader ist
ausgeschlossen, Lock-Fuses können natürlich nur über ISP gesetzt werden,
der Clock-Prescaler hingegen kann über den Code eingestellt werden.
Voila, eine überschaubare Plattform mit z.B. ATM328P mit genau den
gewünschten Vorzügen und nicht ein aufgeblasener Cortex.
W.S. schrieb:> Aber: Es gibt trotzdem Leute, bei denen die Situation anders aussieht -> und genau deshalb sind mir µC sympathischer, die einen eingebauten> Bootlader haben, so daß man auch mit sehr simplem Equipment> (COM-Port+MAX232 oder USB-Serial Adapter vom Chinesen oder gar USB> direkt) zu Potte kommt.
Blöde Frage, aber bei welchen (Mainstream)-MCUs ist das nicht der Fall?
MSP430, TI Stellaris, NXP LPC, STM32, Gecko. etc. haben allesamt
mindestens einen Bootloader über UART.
alt geworden schrieb:> Jetzt nicht mehr! Ein Forum das nicht mal mehr für Gäste öffentlich> lesbar ist taugt nicht. Mein Interesse an LunaAVR ist damit auf null> erloschen. Schade drum!
Eigentlich ist das eher schade für dich.
Aber so ist das, der eine verliert das Interesse an einer Sprache, weil
er den Programmer nicht zum Laufen bekommt, der andere weil er sich erst
bei einem Forum anmelden müsste, bevor er dort Rat und Hilfe bekommt.
Häkeln soll ja auch ein schönes Hobby sein...
Obwohl, da muss man Maschen zählen und links und rechts unterscheiden
können. Oder war das beim Stricken?
Kai Mauer schrieb:> Nur mal aus Interesse: Was glaubst Du, warum ich den Link zu der> Hilfedatei angegeben habe?
Das weiß ich doch nicht. Ich merke nur, daß Bascom-Fans wohl recht
empfindliche Gemüter haben. Vielleicht ist das auch eine Vorbedingung.
Kai Mauer schrieb:> Damit Du (immer noch falsch) behauptest,> daß der MK2 als STK500 angesprochen werden soll?
Wenn ich STK500 wähle, funktioniert die Programmierung. Warum, das ist
mir mittlerweile egal ;-)
drama schrieb:> Blöde Frage, aber bei welchen (Mainstream)-MCUs ist das nicht der Fall?
Bei so gut wie allen Automotive z.B.
Flug- und Medizintechnik wirds ähnlich sein.
m.n. schrieb:> Daß man bei einem AVR ISP MKII ein STK500 wählen muß, erschließt sich> mir allerdings nicht :-(
Du kannst mit STK500.EXE prima einen AVRISP MkII ansprechen, unabhängig
von der benutzten Programmierumgebung (allerdings braucht man MS
Windows). Hier mal ein Drag&Drop Batchfile, welches einen AT89S52
programmiert:
1
set prog="C:\xasm\AVR\STK500\Stk500.exe"
2
%prog% -cUSB -dAT89S52 -e -if%1 -pf -vf
3
pause
Da lässt du das Hexfile rauffallen, und der MC wird programmiert.
Ich finde es gut, das Bascom inkl. Compiler und Simulator auch unter
Linux (mit Wine) funktioniert. Zum Brennen muss man halt avrdude
verwenden.
Geht das mit AVR Studio auch, oder ist man da imer noch an MS gebunden?
Inline Assembler nutze ich auch, wenn's sehr schnell gehen muss. UNd
dank Simulator sieht man auf den Takt genau und für jede Programmzeile,
wie das Programm nachher läuft, wo er die Variable im Ram hinschreibt,
wie die Register belegt sind etc.
Ist mir "ernsthaft" genug. ;-)
Rainer, lern erstmal den Unterschied zwischen IDE und Toolchain bevor du
dich in Diskussionen um Bascom, C und Assembler stürzt.
Die avr-gcc Toolchain um AVRs in C zu programmieren gibts natürlich auch
für Linux. Das brauchts kein Wine. Und Eclipse läuft da auch nativ. Das
Atmel Studio hat damit wenig zu tun.
Aber die Tatsache dass Bascom nur auf Windows oder eben in Wine läuft,
als pro-Argument für Bascom herzunehmen, weil es so toll unter Linux
läuft, dazu gehört schon Chuzpe.
Falk Brunner schrieb:> @ Simpel (Gast)>>>Das ist die Default-Einstellung. Es geht auch individuell.>>Optionen: ...ON interrupt label [NOSAVE|SAVE|SAVEALL]...>> Wozu soll ein SAVEALL gut sein?> NOSAVE ist bestenfalls für reine ASM-Funktionen/Interrupts gut.> Was macht SAVE? Intelligent sichern? Warum ist DAS nicht der> Standardwert?
SAVE ist der Standardwert, das hatte Simpel flasch aufgeschrieben.
.
Quelle, Bascom hilfe:
Store: This is the default and is the same as when no parameter is
provided. The most common used registers, SREG, and RAMPZ are saved and
restored.
Saved : SREG , R31 to R16 and R11 to R0 with exception of R6,R8 and R9.
If RAMPZ exists, it will be saved as well.
Saveall: This will save all registers that SAVE will save, but it will
also save R12-R15. You should use this option when using floating point
math in the ISR.
Sogesehen wird fast alles gesichert, aber man kann das eben
beeinflussen.
bye uwe
Uwe R. schrieb:> Sogesehen wird fast alles gesichert, aber man kann das eben> beeinflussen.
Beantwortet aber noch nicht die Frage, warum nicht genau das
gesichert wird, was auch in der Funktion benutzt wird.
Ich mein', so macht das jeder andere Compiler auch …
Jörg Wunsch schrieb:> Beantwortet aber noch nicht die Frage, warum nicht genau das> gesichert wird, was auch in der Funktion benutzt wird.
Weil Bascom blöd ist?
Ich hab mir mal mit der Testversion die Umsetzung einiger Berechnungen
angeschaut. Danach war die Option Bascom für mich gestorben.
Jörg Wunsch schrieb:> Uwe R. schrieb:>> Sogesehen wird fast alles gesichert, aber man kann das eben>> beeinflussen.>> Beantwortet aber noch nicht die Frage, warum nicht genau das> gesichert wird, was auch in der Funktion benutzt wird.>> Ich mein', so macht das jeder andere Compiler auch …
Hmm, wäre keine schlechte sache, stimmt.
Halten wir erstmal fest: die Aussage das immer alle Register gesichert
werden ist falsch. Stattdessen werden viele gesichert, man kann es aber
auch ganz abschalten und nur die benötigten sichern. Die muss man dann
aber genau kennen (sollte in kritischen Assemblerfunktionen gegeben
sein).
Ein Automatismus wäre wünschenswert und würde Zeit/Fehlerquellen sparen.
Es geht aber ganz manuell (mit Lehmgrube sozusagen ;o)).
bye uwe
Nu ich oooch noch...
Wer mich kennt, der weiß, programmieren ist meine Sache nicht.
Andererseits kommt man manchmal nicht ohne aus, also habe ich mich
manchmal doch hingehockt und was zusammengestoppelt. Zu Z80-Zeiten war
das noch reiner Assembler, heute erfolgreich vergessen. Als es AVRs sein
mussten, lief mir zunächst irgendein C über den Zeh. Grottig! Lauter
Klammern und Gedöhns, zumindest für mich zunächst unverdaulich. In einer
Zeitschrift gab es in älteren Ausgaben einen Kurs in Bascom, der war
didaktisch gut gemacht, also das Steckbrett vorgekramt und los. Nach ein
paar Minuten schon die ersten Erfolge, die Befehle und die IDE
leuchteten auf Anhieb ein....
Fazit: Die wenigen Anwendungsfälle in denen ich was programmieren
musste, habe ich erfolgreich mit Bascom erschlagen! Was will ich als
Amateur also mehr? Ob nun Assembler oder C oder weis der Geier, das wird
alles seine Berechtigung haben. Wichtig für mich ist: Als
Gelegenheitsprogrammierer versteh ich was da abläuft und die IDE
erschließt sich mir. Es wird ja keiner mit vorgehaltener Tastatur
gezwungen damit zu arbeiten. Warum aber wollen mich die C-Jünger immer
zu ihrem Glück zwingen? Argumente wie "sauberere Code" oder bessere
IDE sind doch eh nur vorgeschoben. Am Ende zählt: Blinkte die Kiste,
zählt der Zähler... Nur das ist wichtig!
Zur Überschrift: Jedes Programm, für das ich mir "ne Waffel mache" ist
für mich ernsthaft!
Old-Papa
>Beantwortet aber noch nicht die Frage, warum nicht genau das>gesichert wird, was auch in der Funktion benutzt wird.>>Ich mein', so macht das jeder andere Compiler auch …
Nein tut er nicht. Banale Ausrede der Compilerbauer: Es kann nicht
vorhergesehen werden was Funktionsaufrufe alles mit sich ziehen.
Denn es gibt Leute, die spulen umfangreiche Switch/Case Konstrukte ab.
Das muss dann nicht zwingend lange Ausfuehrungszeiten nach sich ziehen,
ist aber nicht mehr mit einem Ein- oder Zweipasscompiler machbar. Da
waer dann Backtracking angesagt.
Ich haett auch erwartet, bei einer kurzen ISR, in der vielleicht ein
Zaehler incrementiert, ein Flag gesetzt, ein Register geladen wird,
waere es moeglich nach Bedarf zu sichern.
Jetzt Nicht schrieb:> Banale Ausrede der Compilerbauer: Es kann nicht vorhergesehen werden was> Funktionsaufrufe alles mit sich ziehen.
Dass man bei Funktionsaufrufen alle Register sichern muss, die
per ABI als durch den Aufrufer zu sichernd festgelegt sind, ist
logisch. Aber ob es überhaupt einen Funktionsaufruf gibt, kann
ein Compiler natürlich schon merken, und wenn es keinen gibt, dann
hat er einen guten Überblick, welche Register er selbst tatsächlich
zerstört.
> Denn es gibt Leute, die spulen umfangreiche Switch/Case Konstrukte ab.> Das muss dann nicht zwingend lange Ausfuehrungszeiten nach sich ziehen,> ist aber nicht mehr mit einem Ein- oder Zweipasscompiler machbar.
Das ist 'ne lahme Ausrede. Ein GCC ist auch ein Einpasscompiler.
Beweis:
1
% avr-gcc -Os -x c -mmcu=atmega8 -o - -S -
2
#include <avr/io.h>
3
#include <avr/interrupt.h>
4
uint16_t adcval;
5
6
ISR(ADC_vect)
7
{
8
adcval = ADC;
9
}
10
^D
11
.file ""
12
__SP_H__ = 0x3e
13
__SP_L__ = 0x3d
14
__SREG__ = 0x3f
15
__tmp_reg__ = 0
16
__zero_reg__ = 1
17
.text
18
.global __vector_14
19
.type __vector_14, @function
20
__vector_14:
21
push r1
22
push r0
23
in r0,__SREG__
24
push r0
25
clr __zero_reg__
26
push r24
27
push r25
28
/* prologue: Signal */
29
/* frame size = 0 */
30
/* stack size = 5 */
31
.L__stack_usage = 5
32
in r24,0x4
33
in r25,0x4+1
34
sts adcval+1,r25
35
sts adcval,r24
36
/* epilogue start */
37
pop r25
38
pop r24
39
pop r0
40
out __SREG__,r0
41
pop r0
42
pop r1
43
reti
44
.size __vector_14, .-__vector_14
45
.comm adcval,2,1
46
.ident "GCC: (GNU) 4.7.2"
47
.global __do_clear_bss
(Mir geht es hier ausdrücklich nicht um die Sprache C, sondern
um das Verhalten des Compilers. C als Eingabe dient nur als
einfach zu handhabendes Beispiel.)
Der Compiler liest direkt von der Standardeingabe, da kann er also
nicht zweimal darüber iterieren, denn nachdem er ein Zeichen gelesen
hat, ist es unwiederbringlich weg aus dem Eingabestrom.
Trotzdem kann er die benutzten Register optimieren. (r0/r1 optimiert
er nicht, sondern das ist eine Art Standard-Prolog/Epilog, durch die
Sonderrolle dieser Register für den AVR-GCC bedingt. Ja, das ist
verschenktes Optimierungspotenzial.)
Wenn GCC jetzt ein BASIC-Frontend hätte, könnte er auch in dieser
Sprache vergleichbares Optimierungspotenzial anbieten, denn die
Optimierung läuft ja viel weiter hinten ab.
Schicke Gerätebibliotheken kann man auch durchaus unabhängig von der
benutzten Programmiersprache anbieten; die Arduino-Umgebung ist der
beste Beweis dafür (und sicher auch ein Grund, warum diese Plattform
bei vielen beliebt ist).
Nachdem ich ein wenig mit BASCOM gespielt habe, wird schon klar, daß die
Möglichkeiten doch recht einschränkend sind.
Für den Einstieg ist es in Ordnung, da man schnell kleine Erfolge
erzielt. Und wer dabei bleibt, weil er keine besonderen Anforderungen
hat, soll es machen. Aber wer einmal auf den C-Zug aufgesprungen ist,
holt sich an vielen Stellen blaue Flecke ;-)
Mich hatte interessiert, wie es mit der 64-Bit double-Unterstützung
aussieht; das wäre für einige Berechnungen ein Vorteil gegenüber
AVR-GCC. Soweit ich aber sehe, gibt es dafür kein PRINT und auch kein
formatierendes PRINT USING.
Die Geschwindigkeit für mein Beispielprogramm ist gut; aber im Vergleich
dazu ist das Kompilat vom AVR-GCC etwa Faktor 2,5 schneller.
Die BASIC-Interpreter vor 30-40 Jahren hatten den Nachteil, daß
Syntaxfehler erst zur Laufzeit erkannt wurden, was sehr ärgerlich sein
konnte. BASCOM als Compiler vermeidet dies, was wiederum für einen
Anfänger hilfreich ist.
Wenn es um die Frage "BASIC oder nicht?" geht, würde mir eher ein
Interpreter auf einem größeren µC gefallen, wie es hier diskutiert wird:
Beitrag "PIC 32 schneller Basic Interpreter"
Dabei geht es dann nicht um schnellste Ausführungszeit, sondern um eine
flexible Programmentwicklung im Zielsystem. Dies wird auch dadurch
ermöglicht, daß die auszuführenden Programme im RAM liegen.
Mein Fazit: wer mit BASCOM spielen will, soll es tun. Und auch, wer
größere Programme als 4K benötigt, kann den Entwicklern ruhig ein paar
Euro zukommen lassen und ganz wichtig:
die Voreinstellungen für die Stacks kräftig erhöhen!
Wer aber an die Grenzen stößt, sollte sich nicht damit abplagen, diese
zu umschiffen, sondern auf C umsteigen.
> Ernstzunehmende Programme in BASCOM
ich hab nicht mal MINI code-beispiele von irgnedwelchen Programmen
gefunden
(immer nur mini-turtorials die kaum über blink.bas hinausgehen..)
kann mir wer helfen, würde mir bascom gerne anschauen
die kombi, BASCOM und Arduino klingt theoretisch ja recht interessant,
z.b. für Kinder zum Anfangen ?!
(für mich ist BASIC immer wesentlich kompliziert gewesen als alles
andere, z.b. musste ich mal Windows Scripts (WSH oder auch Excel) in
Basic schreiben/erweiter .. z.B. WANN man da genau Klammer setzten
muss,bei funktionsaufrufen, und wann nicht, ist mir bis heute unklar...)
Robert L. schrieb:> kann mir wer helfen, würde mir bascom gerne anschauen
Ja, Du Dir selbst, indem Du dort hingehst:
Hier ein Link
zur Codesammlung von MCS-Electronic (Hersteller von Bascom). Dort
kannst Du auch ziemlich umfangreiche und anspruchsvolle Aufgaben-
lösungen finden:
http://www.mcselec.com/index.php?option=com_conten...
Edith sagt: Die Seite läßt keine tiefen Links zu, Du kannst über
Applikation-> Bascom AVR zu der Quelltexctsammlung gelangen.
Falk Brunner schrieb:> Wenn es etwas flotter sein> soll (Interrupts), ist der BASCOM-Compiler nicht so toll, der sicher mal> pro forma ALLE Register.
Was man aber abschalten kann.
Ich frage mich wirklich warum dieses Null-Argument immer wieder
auftaucht.
Aber daran kann man wenigstens leicht erkennen wer sich wirklich damit
befasst hat.
Bernd T. schrieb:> Aber daran kann man wenigstens leicht erkennen wer sich wirklich damit> befasst hat.
An deinem Kommentar erkennt man dafür, dass du den Rest des Threads
nicht gelesen hast … Nein, ein „Null-Argument“ ist das nun nicht
gerade.
danke Paul Baumann
diese Seite hab ich zwar per google auch ein paar mal entdeckt, aber
nicht ernst genommen/ignoriert (aufgrund der Optik)
auch mit deiner Anleitung viel es mir schwer dort, Beispiele zu finden
(habs dann aber geschafft, auch wenn einige "russich" kommentiert sind,
oder zumindest mein Text-Editor kuriose Zeichen anzeigt?!)
egal: mir (Programmieren, Pascal, C usw) scheint das ganze extrem
"kompliziert" zu sein (in mehrerlei Hinsicht)
da Frage ich mich ernsthaft wie ein "Anfänger" da was zustande bringen
soll..
die Zielgruppe scheint eher "Lötkolbenspezialisten" zu sein, die (noch)
nicht Programmieren können...
Seit es Arduinos gibt, kannst das imho getrost vergessen..
Robert L. schrieb:> da Frage ich mich ernsthaft wie ein "Anfänger" da was zustande bringen> soll..>> die Zielgruppe scheint eher "Lötkolbenspezialisten" zu sein, die (noch)> nicht Programmieren können...
Du widersprichst Dir gleich im darauffolgenden Satz, merkst Du das
nicht?
Robert L. schrieb:> Seit es Arduinos gibt, kannst das imho getrost vergessen..
Das kannst Du vergessen, daß Du das vergessen kannst.
;-)
Die "Arduino-Sprache" ist auch ein C-artiges Ding. Wer das nicht will,
der benutzt weiter Bascom. Schon alleine die Bedienoberfläche ist viel
komfortabler und auch ziemlich umfangreich. Damit kann sich die Arduino-
Oberfläche nicht messen.
MfG Paul
@ Paul Baumann (paul_baumann)
>Die "Arduino-Sprache" ist auch ein C-artiges Ding.
Es IST einfaches, im Sprachumfang reduziertes C++. Wobei niemand
gehindert wird, mehr zu nutzen, der Compiler dahinter kann es (99,9% der
Anwender allerdings nicht, ich auch nicht).
> Damit kann sich die Arduino->Oberfläche nicht messen.
findest?
http://www.visualmicro.com/page/Arduino-for-Atmel-Studio.aspx
;-)
>Du widersprichst Dir gleich im darauffolgenden Satz, merkst Du das>nicht?
ja aber auch nein:
ich implizierte, dass sich inzwischen auch der
"Lötkolbenspezialist"/Programmieranfänger es nicht selber schwer machen
wird und einen "großen" µC verwenden und einen Haufen "Krempel"
rundherum löten wird
wenn er einen auch nicht größeren Arduion Pro/micro/nano/mini nehmen
kann und dort (s)einen Haufen "Krempel" rundherum lötet...
Hallo ich kann einigermaßen mit einem Fahrrad (Bascom) umgehen. Warum
soll ich unbedingt auf ein Einrad (C..) umsteigen? Klar, das Einrad ist
viel kompakter, man kann unwahrscheinliche Kunststücke machen, sogar auf
der Stelle drehen und und und. Aber das Ganze muss man auch erst lernen.
Und ist das alles notwending, wenn ich nur von der Kneipe nachhause
möchte?
Beispiele hinken ja immer, verdeutlichen aber auch ;-)
Old-Papa
BASCOM: rickshaw
C: fahrrad
noch fragen...
ernsthaft: ICH schreibe z.B: C Code auch einfach so (quasi "Pascal
ähnlich), dass ICH ihn wieder leichter lesen kann, und lasse viele
"Features" absichtlich aus ..
das was ich bisher in BASCOM gesehen hab, war mehr als kryptisch ..
anderen Code lesen, muss ein "Anfänger" eh nicht
und ob das bei den ASM libraries von Bascom einfacher ist??
Robert L. schrieb:> findest?
Ja, das finde ich.
Robert L. schrieb:> ich implizierte, dass sich inzwischen auch der> "Lötkolbenspezialist"/Programmieranfänger es nicht selber schwer machen> wird und einen "großen" µC verwenden und einen Haufen "Krempel"> rundherum löten wird> wenn er einen auch nicht größeren Arduion Pro/micro/nano/mini nehmen> kann und dort (s)einen Haufen "Krempel" rundherum lötet...
So, implizierst Du...
Es ist auch möglich jedweden Arduino aus Bascom heraus zu programmieren.
Aber gut: Ich merke, daß Du Recht haben willst und siehe da -Ich gebe
Dir Recht.
Ja, weil ich alt genug bin, um einzusehen, daß man Niemanden von seiner
einmal gefassten Ansicht abbringen kann.
MfG Paul
Old Papa schrieb:> Hallo ich kann einigermaßen mit einem Fahrrad (Bascom) umgehen. Warum> soll ich unbedingt auf ein Einrad (C..) umsteigen?
Wenn Bascom ein Fahrrad ist, müsste dann C nicht eher ein Motorrad sein?
Denn:
- Ein Motorrad ist schneller als ein Fahrrad.
- Wenn man mit dem Motorrad halbwegs umgehen kann, ist es auch weniger
anstrengend.
- Als Fahranfänger wird man das Motorrad ständig umschmeißen und darüber
fluchen, dass es so schwer wieder aufzustellen ist.
- Wer noch nie Motorrad gefahren ist, sollte erst einen Blick ins
Handbuch werfen, um danach Dinge wie Kupplung und Schaltung so
bedienen zu können, dass sie nicht gleich kaputt gehen.
- Fahrfehler haben auf dem Motorrad meist schlimmere Folgen als auf dem
Fahrrad.
Das Programm 'reziproker Frequenzzähler mit BASCOM-AVR' habe ich in zwei
Stufen optimiert (siehe Codesammlung). Zunächst wurden nur die Register
reduziert, die beim Interrupt gerettet werden, was schon eine deutliche
Geschwindigkeitssteigerung zeigte.
Im zweiten Schritt habe ich dann die Interruptroutinen komplett in
Assembler geschrieben, was recht einfach umzusetzen war, da auf die
globalen Variablen sehr einfach zugegriffen werden kann.
Die maximale Eingangsfrequenz erhöhte sich insgesamt von ursprünglich
100 kHz auf nun > 600 kHz, was ich noch skeptisch prüfen werde, aber
tatsächlich zu funktionieren scheint.
Damit sieht BASCOM ganz gut aus!
ernstzunehmende Programme kann man in jeder Sprache schreiben.
Da ich von Python und anderen Sprachen verwöhnt war, hatte ich beim
Beginn mit Mikrocontrollern keinen Bock auf das damals noch nötige
Zusammensuchen von GCC+IDE+libs. Stattdessen habe ich mit Bascom
angefangen und bin dabei hängen geblieben, siehe:
http://www.photonenhuette.de -> Anlage -> Programm.
Bascom hat den Vorteil, das es viele Funktionen mitliefert, andererseits
ist Basic nicht gerade förderlich um größere Projekte brauchbar zu
modularisieren
alt geworden schrieb:> Jetzt nicht mehr! Ein Forum das nicht mal mehr für Gäste öffentlich> lesbar ist taugt nicht. Mein Interesse an LunaAVR ist damit auf null> erloschen. Schade drum!
ich begreife hier nicht wieso man sich dann nicht einfach einen
Instant-Account bei gmail o.Ä. macht und sich anmeldet wenn es dir denn
sooo wichtig ist. Diese ganze Argumentation ist absoluter Nonsense.
Ich betreibe auch ein Forum für unseren Verein und wenn nicht
sicherzustellen ist das man jeden Tag auf irgendwelche juristisch
problematische Beiträge prüfen kann, muss man das Ganze einfach zur
eigenen Sicherheit nicht-öffentlich machen. So habe ich das dann auch
gemacht. Die entsprechende Gesetzgebung und die Pflichten dazu hast du
demnach noch nicht zu Gesicht bekommen wie mir scheint.
Das es genügend Bekloppte gibt (MWS wird z.B. komplett
ignoriert/ausgeblendet, ich will gar nicht wissen was die Tütensuppe
schreibt), sieht man ja an diesem Forum. Die Moderatoren haben hier
reichlich zutun.
Ehrhardt Balstein schrieb:> muss man das Ganze einfach zur eigenen Sicherheit nicht-öffentlich> machen.
Das mag für eine kleine geschlossene Benutzergruppe wie deinen Verein
passen, aber für etwas wie LunaAVR, bei der du ohnehin nicht mehr
jeden persönlich kennst, ist das Augenauswischerei. Wenn ich mich
(deine Argumentation) mit einem Instant-Account da drumrum mogeln
kann, dann kann man den Quatsch auch sein lassen, und jeden das
Forum dort lesen lassen.
> Wenn ich mich> (deine Argumentation) mit einem Instant-Account da drumrum mogeln> kann, dann kann man den Quatsch auch sein lassen, und jeden das> Forum dort lesen lassen.
Eine notwendige Anmeldung zum Lesen ist juristisch "nicht öffentlich".
Nehmen wir an irgendein Fanatiker kommt auf die Idee hier in das Forum
einen Beitrag zu schreiben der zu einem Anschlag aufruft. Wenn der
Betreiber des Forums wie es in meinem Fall nur ich bin nicht
schnellstens darauf reagieren kann, kann man sich recht schnell
mitstrafbar machen. Hier macht es dann den entscheidenden Unterschied ob
das Ganze öffentlich war oder nicht und das entscheidet dann auch im
schlimmsten Fall ob man kriminalisiert wird oder nicht.
Nun ist dieses Beispiel natürlich überzeichnet und mag am Ende des
Spektrums liegen, aber die Abstufung bis zu "harmlos" ist sehr breit.
Nicht jeder Forenbetreiber hat die Zeit und Muße und einen Wald voller
Moderatoren. Ich bin auch seit Jahren erstaunt das man z.B. hier
immernoch als Gast posten darf. Irgendwann wird den Moderatoren
vieleicht dann doch mal was durch die Lappen gehen, was sicher einen
Lernprozess zur Folge hätte. Zu wünschen ist es dem Betreiber nicht.
Ich kann mir gut vorstellen, das es bei anderen Foren ähnlich gelagert
ist wie bei meinem Vereinsforum.
Frank Esselbach schrieb:> Ob ein Programm "ernsthaft" ist oder nicht, macht sich nicht an der> Programmiersprache fest. Nur weil eine bestimmte IDE es erlaubt,> unübersichtlich und liederlich zu progrsammieren, muss man das ja nicht> so machen.
Was hat jetzt genau die IDE damit zu tun? Es liegt wenn, dann schon an
der Sprache selbst. Die IDE tut da nichts zu.
Es kommt darauf an, was man von der Sprache erwartet. Abgesehen vom
abgedroschenen "es liegt alles nur am Programmierer", was so natürlich
auch nicht stimmt, bieten verschiedene Sprachfamilien, verschiedene
Features.
Dabei ist der eigentliche Syntax (vulgo "Syntaktischer Zucker") völlig
egal. Die höheren Konstrukte wiederrum nicht.
BASIC Dialekte bietet vor allem eines, eine sprechende Syntax. D.h. viel
tippen für wenig Substanz. Dafür sieht der Code vielleicht für Anfänger
schöner aus, die Syntax lässt sich leichter merken. Es fehlen
kompliziert anmutende Sonderzeichen wie geschweifte Klammern oder
Semikolons. Das alles ändert Objektiv nichts, hat aber subjektiven
Einfluss und wird als leichter empfunden.
Aber gerade BASCOM offenbart einige große Schwächen. Es sind (oder waren
zumindest) nicht beliebig komplexe Ausdrücke möglich. Und das ist ein
No-Go für eine ernstzunehmende Programmiersprache. Dazu kommen eigene
(zusammengesetzte) Datentypen, die praktisch nicht existent sind. Das
sind nur 2 Punkte einer ganzen Liste.
Ein erfahrener Programmierer erkennt hier, dass man so für viele
Probleme keine elegante oder saubere Lösung realisieren kann, egal wie
gut man ist.
Die vielgescholtene Pointerarithmetik von C, offenbart dem Programmierer
auf elegante Weise viele Möglichkeiten ohne dafür viel Syntax aufwenden
zu müssen. Es lassen sich viele Konzepte (auch OO) recht gut umsetzen
ohne dass die Sprache selbst dafür Konstrukte enthalten muss. Bei allen
Schwächen die nackte Pointer mitbringen (no seatbelts), die aber für
eine hardwarenahe Entwicklung dennoch wünschenswert sind.
Fazit:
"Ernstzunehmend" ist sehr subjektiv und nicht zu definieren. Wem der
BASIC Syntax gefällt, und nicht an die Grenzen der Sprache stößt (weil
die Programme einfach bleiben oder er es nicht anders kennt), der ist
mit BASCOM glücklich.
Wer besseres kennt, der erkennt zu schnell den Käfig den BASCOM um das
eigene Programm errichtet.
Cyblord -. schrieb:> Die vielgescholtene Pointerarithmetik von C, offenbart dem Programmierer> auf elegante Weise viele Möglichkeiten ohne dafür viel Syntax aufwenden> zu müssen.
Ja, wunderbar. Diesem tollen C haben wir so ziemlich sämtliche
Einfallstore zu verdanken, die mit Buffer-Overflows, Pointern, zu langen
Strings usw. in den letzten Jahren aufgetreten sind. Weil dieses tolle C
sich zu fein ist, darauf zu prüfen. Bzw. weil die Programmierer glauben,
daß sie sooo klever sind und keine Prüfung brauchen.
Ich greif mir immer an den Kopf, wenn ich von wieder mal neu entdeckten
"Bugs" lese, die auf diese Weise einen Zugriff auf den Rechner erlauben.
Was unter Basic oder Pascal überhaupt nicht möglich wäre, weil da
einfach sauberer deklariert und geprüft wird, und solcher Dreck wie in C
von vornherein ausgeschlossen ist.
Aber ist ja cool und 1337, den Code so unübersichtlich wie möglich zu
machen. Und Bounds prüfen ist was für Weicheier.
Timm T. schrieb:> Ja, wunderbar. Diesem tollen C haben wir so ziemlich sämtliche> Einfallstore zu verdanken, die mit Buffer-Overflows, Pointern, zu langen> Strings usw. in den letzten Jahren aufgetreten sind.
Meinst du, das wäre bei den alten Assemblerprogrammen (für deren
Ablösung C letztlich verantwortlich ist) besser gelaufen?
> Was unter Basic oder Pascal überhaupt nicht möglich wäre, weil da> einfach sauberer deklariert und geprüft wird,
Auch beim typischen Pascal-Programm wurde das bounds checking für
gewöhnlich nur während der Entwicklungsphase benutzt, aber bei
Auslieferung aus Performancegründen deaktiviert. Damit bist du dann
kaum besser dran als bei C. Wenn die Bugs schon während der
Entwicklung aufgetaucht wären, dann hätten sie wohl auch die von dir
gescholteten C-Programmierer von vornherein beseitigt.
Inwiefern BASIC-Dialekte vie Bascom, um das es hier ja geht, in der
Tat noch Laufzeit-Boundarychecks machen, entzieht sich meiner Kenntnis.
Timm T. schrieb:> Aber ist ja cool und 1337, den Code so unübersichtlich wie möglich zu> machen. Und Bounds prüfen ist was für Weicheier.
Hmm also ich sprach von "elegantem Code". Wie du da jetzt auf
unübersichtlich kommst verstehe ich nicht.
Billige Polemik? Ja ich glaube so ist es.
Und Boundary Prüfung zur Laufzeit bläht dir viel Code in dein Projekt.
Wie soll das bei kleinen Controllern gehen? Das will man meist nicht.
Natürlich wäre es schön zu haben, bei einem ausgewachsenen PC Programm
das mit zig MB Binarys daherkommt und sich mal schnell 500MB Speicher
reserviert sieht das vielleicht anders aus. Aber dann nimmt eine andere
Sprache, welche die Sicherheitsfunktionen bietet, die man will. C bietet
sie nicht. Aber das ist Absicht.
Jörg W. schrieb:> Auch beim typischen Pascal-Programm wurde das bounds checking für> gewöhnlich nur während der Entwicklungsphase benutzt, aber bei> Auslieferung aus Performancegründen deaktiviert.
Bei welchen Anwendungen ist den ein Check der Bounds wirklich so
performancefressend, daß man den deaktivieren müßte? Die meiste Zeit
wartet der Rechner doch eh auf den Benutzer bzw. auf neue Daten.
Cyblord -. schrieb:> Und Boundary Prüfung zur Laufzeit bläht dir viel Code in dein Projekt.> Wie soll das bei kleinen Controllern gehen? Das will man meist nicht.
Bitte? Ich mache auf dem AVR immer Bound Checking bei Benutzereingaben
oder Daten, die über Uart reinkommen. Das ist halt so. Meistens sind
sowieso 20% eigentliche Aufgabe des Controllers und 80% User-Interface,
Display, Eingabe und Uart. Da kann ich mir die paar "wenn kleiner,
begrenze auf Minimum" und "wenn größer, begrenze auf Maximum", oder
"schreibe in Ringbuffer, wenn Buffer 90% voll, deaktiviere Uart" auch
noch leisten, und muß mich dafür nicht mit ominösen Programmfehlern
durch überschriebene Speicherbereiche rumschlagen.
Dafür hab ich hier eine sauteure Kläranlagensteuerung, die
vorschriftsmäßig Aktionen (Neustart, Strom weg, Pumpenfehler...)
protokolliert. Dabei aber regelmäßig die Datumsangaben verwürfelt, weil
der Programmierer anscheinend zu faul war, einen Plausibilitätscheck des
Datums zu machen. Das verkaufen die dann aber als "mit Protokollfunktion
gemäß gesetzlichen Vorgaben".
Cyblord -. schrieb:> Aber dann nimmt eine andere> Sprache, welche die Sicherheitsfunktionen bietet, die man will.
Nimmt man anscheinend nicht, sonst würde es nicht regelmäßig darauf
beruhende gravierende Sicherheitslecks geben. Das fängt schon mit der
bescheuerten Idee der nullterminierten Strings an...
Timm T. schrieb:> Bitte? Ich mache auf dem AVR immer Bound Checking bei Benutzereingaben> oder Daten, die über Uart reinkommen.
Das kannst du doch nicht mit einem eingebauten Boundary Check für alle
Arrays vergleichen... Dazu braucht man komplexe Datenstrukturen für
jedes Array, inkl. Funktionen die darauf arbeiten. Bei JEDEM Zugriff.
Heute ist ein Array nichts anderes als ein Pointer an das 1. Element.
Ich denke du übersiehst den Aufwand deiner eigenen Forderungen nicht
wirklich.
Hast du mal näher mit solchen Konzepten auf Compiler bzw. Laufzeitbasis
beschäftigt?
Mir kommen solche Forderungen immer etwas blauäugig vor. Als würde man
den Tischlerhobel kritisieren, weil der so scharf ist und außerdem kann
man damit ganz üble Macken in die Möbel machen. Man benötigt manchmal
auch derbes Handwerkszeug (C) für manche Aufgaben oder will es nutzen,
und nicht nur die große schwere teure CNC Maschine.
> Nimmt man anscheinend nicht, sonst würde es nicht regelmäßig darauf> beruhende gravierende Sicherheitslecks geben. Das fängt schon mit der> bescheuerten Idee der nullterminierten Strings an...
Auch hier müsste sonst eine spezielle String-Datenstruktur in der
Sprache eingebaut sein. Aber du kannst doch eine solche Struktur
einführen in deinen Projekten. Nur warum muss man das alles zwingend in
die Sprache selbst reinpacken?
C ist hardwarenah geplant. No Seatbelts ist ein Feature. Keine
Einschränkung. Auf kleinen Controllern machen deine Sicherheitskonzepte
keinen Sinn. Der Code dafür würde manchen AVR Flash bereits sprengen.
Timm T. schrieb:> Ich mache auf dem AVR immer Bound Checking bei Benutzereingaben oder> Daten, die über Uart reinkommen.
Dann schau dir doch bitte mal die Bugs an, die du kritisiert hast.
Nein, an einer Überprüfung externer Eingaben liegt das in aller
Regel nicht. Das sind deutlich subtilere Fallen, in die da getappst
wird.
Keiner behauptet, dass C der Stein der Weisen sei. Aber ehrlich, wenn
wir außer C nur BASIC gehabt hätten, dann würden Betriebssysteme wohl
auch heute noch in Assembler geschrieben werden, so wie es vor C und
UNIX gang und gäbe war. Ob das nun sicherheitsmäßig wirklich besser
gewesen wäre, wage ich mehr als zu bezweifeln.
Cyblord -. schrieb:> Bei JEDEM Zugriff.> Heute ist ein Array nichts anderes als ein Pointer an das 1. Element.
Doch ja, natürlich. Das Array hat eine Größe, und es wird geprüft, ob
die angesprochene Adresse innerhalb des Arrays liegt. Wenn nicht, gibts
schlimmstenfalls einen Programmfehler, aber es wird nicht außerhalb des
Arrays geschrieben. Das machen Basic und Pascal genau so.
Das kann man bewußt umgehen, wenn man mehr Peformance will. Aber dann
muß man wissen, was man tut, und macht das nicht "aus Versehen" wie bei
C.
Jörg W. schrieb:> Nein, an einer Überprüfung externer Eingaben liegt das in aller> Regel nicht.
Dochdoch, wenn ein Webbrowser / Mediaplayer zuläßt, daß eine Webadresse
/ ein Filename so lang ist, daß ein Teil des Strings im ausgeführten
Speicherbereich landet, und darüber dann Zugriff auf den Programmbereich
erfolgt, dann sind das genau solche fehlenden Eingabechecks.
Oder wenn ein Programm mehr Daten einliest, als die Datei eigentlich
lang ist, mit den gleichen Folgen.
Jörg W. schrieb:> Aber ehrlich, wenn> wir außer C nur BASIC gehabt hätten, dann würden Betriebssysteme wohl> auch heute noch in Assembler geschrieben werden
Du solltest Dich mal von der Vorstellung verabschieden, daß Basic im
Interpreter läuft, lahm ist und nix kann. Das stimmt schon seit 20
Jahren nicht mehr.
Timm T. schrieb:> Cyblord -. schrieb:>> Bei JEDEM Zugriff.>> Heute ist ein Array nichts anderes als ein Pointer an das 1. Element.>> Doch ja, natürlich.
In C meine ich.
Da ist ein Array ein Pointer auf das 1. Element. Thats it. Fertig. Aus.
> Das Array hat eine Größe, und es wird geprüft, ob> die angesprochene Adresse innerhalb des Arrays liegt. Wenn nicht, gibts> schlimmstenfalls einen Programmfehler, aber es wird nicht außerhalb des> Arrays geschrieben. Das machen Basic und Pascal genau so.
Ist aber zur Laufzeit mit extremem Overhead verbunden. Und bringt auf
Controllern wenig. Was soll das Programm tun wenn es eine illegalen
Zugriff erkennt?
>> Das kann man bewußt umgehen, wenn man mehr Peformance will. Aber dann> muß man wissen, was man tut, und macht das nicht "aus Versehen" wie bei
Nein im Gegenteil. Man muss die Prüfung bewusst EINBAUEN. Mit viel Code.
Timm T. schrieb:> Aber dann> muß man wissen, was man tut, und macht das nicht "aus Versehen" wie bei> C.
Das wesentliche Manko an C ist es, die Längeninformation des Arrays
nicht mit durchzureichen, sodass die Implementierung einer solchen
Prüfung nicht problemlos möglich ist.
> Jörg W. schrieb:>> Nein, an einer Überprüfung externer Eingaben liegt das in aller>> Regel nicht.>> Dochdoch, wenn ein Webbrowser / Mediaplayer zuläßt, daß eine Webadresse> / ein Filename so lang ist, daß ein Teil des Strings im ausgeführten> Speicherbereich landet,
Du solltest dich mal davon verabschieden, dass nach derart primitivem
Muster noch nennenswert was passiert. Ja, auch sowas kommt vor, aber
das meiste sind irgendwelche race conditions oder viel subtilere
buffer overflows als die, die man mit so einer primitiven Methode
bereits hätte erkennen können. Besonders „beliebt“ sind integer
overflows, aber gerade hier hättest du ein mächtiges Problem mit der
Performance, wenn du bei jeder Multiplikation vorab die Argumente
überprüfen willst.
>> Aber ehrlich, wenn>> wir außer C nur BASIC gehabt hätten, dann würden Betriebssysteme wohl>> auch heute noch in Assembler geschrieben werden>> Du solltest Dich mal von der Vorstellung verabschieden, daß Basic im> Interpreter läuft, lahm ist und nix kann. Das stimmt schon seit 20> Jahren nicht mehr.
Nichtsdestotrotz kann ich mir in BASIC beim besten Willen kein OS
vorstellen. Da fehlen einige Features, auf die man in C von
vornherei geachtet hat, indirekte Funktionsaufrufe beispielsweise.
Hat BASIC inzwischen Datestrukturen?
Vor 45 Jahren jedenfalls (als C angetreten ist, den Assembler beim
OS abzulösen) war da wohl weit und breit nichts dergleichen, und auch
die von dir genannten 20 Jahre helfen da nicht – da waren die Messen
bereits gesungen. Pascal war einigermaßen parallel entstanden, aber
halt als Lehrsprache, weshalb gezielte Typumwandlungen eben auch dort
fehlen.
Timm T. schrieb:> Doch ja, natürlich. Das Array hat eine Größe, und es wird geprüft, ob> die angesprochene Adresse innerhalb des Arrays liegt.
Das kann man machen, solange man noch weiss, dass man es mit einem Array
zu tun hat. Aber spätestens, wenn man dann mit Arrays und Funktionen
arbeitet, ist dem in C nicht mehr so. Da verschwimmen die Grenzen. Und
das ist ganz bewusst so gemacht worden.
Daher ist in C ein nicht gemachter Bounds Check kein vergessenes Feature
sondern ist schlicht und ergreifend nicht möglich. Dazu müsste man die
Sprache in wesentlichen Bereichen komplett umbauen.
> Das kann man bewußt umgehen, wenn man mehr Peformance will. Aber dann> muß man wissen, was man tut, und macht das nicht "aus Versehen" wie bei> C.
Sicherlich.
Wer die Tante zum Lulu gehen braucht, für den ist C die falsche Sprache.
Hier ist schon der Entwickler gefragt, sorgfältig zu arbeiten. Das
wiederum, da bin ich ganz bei dir, geht öfter schief als einem lieb ist.
Die Intention von C war von vorne herein keine Sprache mit
Sicherheitsnetz sondern ein "You asked for it, you got it"
Es gibt nur 2 mögliche Auswege
* eine andere Sprache nehmen
* die 'ich kann nur 20% von C aber mehr interessiert mich nicht'
Fraktion der Jungprogrammierer von der ernsthaften Entwicklung
fernhalten, bis sie erwachsen geworden sind und nicht nur ihre Rechte
sondern auch ihre Pflichten kennen, denen sie sich mit der
Programmierung in C unterwerfen.