OOC mit Macros, Events, Listen und Exceptions
-
also stimmt es doch, was ich immer gegelaubt habe, dass unsere welt erst seit wenigen sekunden existiert.
Witzig, das hab ich auch schon öfter gedacht. Aber irgendwie müßig, darüber nachzudenken.
atexit kannte ich übrigens noch nicht ... man lernt nie aus ...
Ich hatte das für eine POSIX-Sache gehalten, aber atexit(3) sagt, daß es schon in C89 vorhanden war. Hätte ich schon öfter verwenden sollen...
-
µngbd schrieb:
Ich hatte das für eine POSIX-Sache gehalten, aber atexit(3) sagt, daß es schon in C89 vorhanden war. Hätte ich schon öfter verwenden sollen...
Jaa, ich hab auch gestaunt, aber ein paar meiner embedded- compiler kennen das nicht, da wird's das wiederentdeckte goto tun müssen ...
-
pointercrash() schrieb:
µngbd schrieb:
Ich hatte das für eine POSIX-Sache gehalten, aber atexit(3) sagt, daß es schon in C89 vorhanden war. Hätte ich schon öfter verwenden sollen...
Jaa, ich hab auch gestaunt, aber ein paar meiner embedded- compiler kennen das nicht...
du kannst es leicht selbst einbauen, einfach ein kleines array von function pointern machen, dann den startup/exit-code so manipulieren, dass er, nachdem 'main' verlassen wurde, die liste durchgeht und alle funktionen darin aufruft.
ach ja: wenn die main verlassen wird, geht die welt unter.
-
;fricky schrieb:
wenn die main verlassen wird, geht die welt unter.
Achsoo, und ich dachte, wenn die welt verlassen wird, gibt's keine main() mehr.
Bin eh grad am Abwägen, ob goto praktischer ist oder das Selbstschreiben eines C- Compilers und hab' dabei festgestellt, daß wir alle nur ein FIG- Port und somit völlig verdreht sind ...
Uiui, DAS war OT
-
Ich implementiere zu jedem Konstruktor auch immer einen Dekonstruktor. Ich hab diese bisher nur immer während des Programmablaufs aufgerufen, nie bei Prozessende. Wenn ihr der Meinung seid, dass das aber sinnvoll wäre, dann mache ich das ab jetzt in Zukunft immer.
supertux schrieb:
wo ist dann das Problem? Und wenn du dir das sparen willst, dann kannst du dir einen mini-garbage collector für deine Objekte mit man: atexit(3) basteln.
Hey, die atexit-Funktion ist genial. Danke für den Tipp.
;fricky schrieb:
du kannst es leicht selbst einbauen, einfach ein kleines array von function pointern machen, dann den startup/exit-code so manipulieren, dass er, nachdem 'main' verlassen wurde, die liste durchgeht und alle funktionen darin aufruft.
Noch en besserer Tipp. Warum ne Lib benutzen wenn man es auch selber machen kann?
Exceptions lass ich jetzt wahrscheinlich doch komplett wegfallen. Konsolenausgaben reichen für meine Programme bisher vollkommen aus.
;fricky schrieb:
wie jetzt? einen webserver willste nicht in C aber in asm machen? das halte ich für keine gute idee. ok, wenn du spass daran hast, dann mach es, aber C finde ich gerade für sowas wie (embedded) webserver ideal. auch kannste C-code leichter auf andere targets portieren, was mit ASM nur geht, wenn der andere controller auf derselben CPU-familie basiert.
Das liegt daran, dass das dar Mini-Webserver nicht besonders leistungsfähig ist - da halte ich selbst C für overpowered...
Aber mal gucken wie groß der Aufwand im Endeffekt ist, vllt. lohnt sich es ja doch noch auf C umzusteigen.;fricky schrieb:
ach ja: wenn die main verlassen wird, geht die welt unter.
Also, ich finde die Welt geht erst unter wenn die Lebensquelle(Stecker) nicht mehr ist...
-
Antoras schrieb:
Noch en besserer Tipp. Warum ne Lib benutzen wenn man es auch selber machen kann?
super, erfinde doch das Rad noch einmal, am besten lässt du dich das Rad 2.0 patentieren.
Viele Bibliotheken sind länger getestet und somit stabiler, was ein großer Vorteil bedeutet, vor allem, wenn man produktiv arbeitet. Außerdem haben viele auch Portierungen für andere Plattformen und wenn du ein Produkt für mehrere Plattformen haben willst, dann ist es blöd, alles selber machen zu müssen.
Also, ich weiß nicht, ob du uns auf den Arm nehmen willst, oder echt ernst meinst, einen Webserver in ASM schreiben zu wollen, aber C als overpoweder zu halten
-
supertux schrieb:
super, erfinde doch das Rad noch einmal, am besten lässt du dich das Rad 2.0 patentieren.
Viele Bibliotheken sind länger getestet und somit stabiler, was ein großer Vorteil bedeutet, vor allem, wenn man produktiv arbeitet. Außerdem haben viele auch Portierungen für andere Plattformen und wenn du ein Produkt für mehrere Plattformen haben willst, dann ist es blöd, alles selber machen zu müssen.
Ich hab halt einen Splean und möchte alles selber machen. Dass das aber nicht so ohne weiteres möglich und auch sinnvoll ist weiß ich aber auch.
supertux schrieb:
Also, ich weiß nicht, ob du uns auf den Arm nehmen willst, oder echt ernst meinst, einen Webserver in ASM schreiben zu wollen, aber C als overpoweder zu halten
Ich glaub ich hab mich falsch ausgedrückt. Das wird ein Webserver für einen Mikrocontroller und nicht für einen PC. Hier steht das Programmieren der Hardwarefunktionen im Vordergrund. Deshalb meine Äußerung C sei hier overpowered. Zumindest eignet es sich imho nicht so gut zu lernen wie die Hardware arbeitet.
-
supertux schrieb:
super, erfinde doch das Rad noch einmal
Du hast natürlich recht. Aber ich kann die Freude gut nachvollziehen, daß man mit C auf einmal "on the bare metal" ist:
Antoras schrieb:
Noch en besserer Tipp. Warum ne Lib benutzen wenn man es auch selber machen kann?
Letztlich sicher eine Design-Frage: willst du unabhängig sein: dann bau es selbst. Willst du auf der Arbeit anderer aufbauen: das hat viele Vorteile.
pointercrash() hat ja darauf hingewiesen, daß es kleine Systeme gibt, die nicht den ganzen Standard umsetzen. Sich nur nichts einreden lassen: es ist dein Programm, und du bestimmst die Ziel-Platformen.
Antoras schrieb:
Das liegt daran, dass das dar Mini-Webserver nicht besonders leistungsfähig ist - da halte ich selbst C für overpowered...
Aber mal gucken wie groß der Aufwand im Endeffekt ist, vllt. lohnt sich es ja doch noch auf C umzusteigen.Gute Gelegenheit, zu erforschen, wie gut die beiden zusammenspielen können. Ist ja auch bei Betriebssytemen üblich, so früh als möglich C zu verwenden. Da kann man sicher was lernen.
-
Antoras schrieb:
Exceptions lass ich jetzt wahrscheinlich doch komplett wegfallen. Konsolenausgaben reichen für meine Programme bisher vollkommen aus.
Meinst du zum Debuggen?
-
Antoras schrieb:
Ich hab halt einen Spleen und möchte alles selber machen. Dass das aber nicht so ohne weiteres möglich und auch sinnvoll ist weiß ich aber auch.
Zunächst einmal hängt alles nur davon ab, was du dir alles zutraust zu programmieren.
Später hängt alles davon ab wie schnell du dabei bist.
Der Satz: mit dem Rad erfinden und so ist auch nur ein Dogma.
-
Antoras schrieb:
Ich glaub ich hab mich falsch ausgedrückt. Das wird ein Webserver für einen Mikrocontroller und nicht für einen PC. Hier steht das Programmieren der Hardwarefunktionen im Vordergrund. Deshalb meine Äußerung C sei hier overpowered.
ein webserver hat ja mit der hardware direkt nix am hut, der muss HTTP-anfragen beantworten und daten versenden. dazwischen hängt noch ein TCP-stack, der auch nicht direkt die hardware ansprechen muss. erst dann kommt ein treiber für's netzwerkinterface, der zwar mit der hardware redet, aber selbst solche treibersachen sind meistens zu 99% in C implementiert.
auf welchem controller soll dein webserver denn laufen?
vielleicht wird dich das interessieren: http://www.iosoft.co.uk/tcplean.php
-
;fricky schrieb:
... dazwischen hängt noch ein TCP-stack, der auch nicht direkt die hardware ansprechen muss. erst dann kommt ein treiber für's netzwerkinterface, der zwar mit der hardware redet, aber selbst solche treibersachen sind meistens zu 99% in C implementiert.
auf welchem controller soll dein webserver denn laufen?
vielleicht wird dich das interessieren: http://www.iosoft.co.uk/tcplean.php
Des kostet ja Geld und nicht mal so wenig
Der uIP von Dunkels soll für die ganz kleinen Kisten recht gut sein, den OpenTCP hab ich nur mal ins Projekt klinken müssen - läuft. Bei Dunkels ist der Webserver auch mit bei.
Da seh' ich übrigens gar keinen Sinn, auch nur irgendwas in ASM zu machen. Erst wenn es an der Performance hapert, mal die Hardwarezugriffe unter die Lupe nehmen, ob man da was per ASM handoptimieren kann.
-
pointercrash() schrieb:
Des kostet ja Geld und nicht mal so wenig
du kannste es auch umsonst haben (ich darf aber nicht verraten wo, sonst gibts mecker vom mod). ach ja, openTCP hat viele bugs, funktioniert aber erstmal. bei uIP geht der DHCP-client nicht und der ganze code schwer zu portieren. naja, mittlerweile kann man auch kommerzielle tcp-stacks, als source-code, von den herstellern kostenlos downloaden (micrium und so), die darfste nur nicht in eigenen produkten einsetzen, also nur ausprobieren.
-
;fricky schrieb:
du kannste es auch umsonst haben
Ich habs schon
;fricky schrieb:
auf welchem controller soll dein webserver denn laufen?
Auf einem MSC1210.
µngbd schrieb:
Meinst du zum Debuggen?
Ja. Für den Anwender bringen die Konsolenausgaben natürlich nichts. Aber für so en Zeugs wie ein Segmentation Fault benutz ich sowieso gleich den Debugger.
-
;fricky schrieb:
ach ja, openTCP hat viele bugs, funktioniert aber erstmal. bei uIP geht der DHCP-client nicht und der ganze code schwer zu portieren ...
Ich weiß ...
Ich hab' damals OpenTCP mit 'nem RTL8029 auf'm M16C zum Laufen gebracht, war softwareseitig nicht viel Trabbel, aber manchmal spinnt das Ding einfach, u.a. auch beim DHCP- Client. Seit 2003 hat da niemand mehr dran gebastelt, hin und wieder tauchen "verbesserte" Ports auf, aber nichts Offizielles - schade!
Kann ich heute nichtmal mehr nachbauen, weil ich den 8029 einfach nicht mehr bekomme. Fällt Dir eigentlich eine "Out-of-the-box-" Lösung ein, eine Schaltung mit Ethernet zu versehen? Jetzt nicht den blöden XPort, der simuliert PC-seitig ja eine serielle SS.
Oder irgendeine Chip/Übertrager- Kombi, die so gängig ist, daß man nicht übermorgen doof dasteht.Ich weiß, das ist OT, aber wo wir schon von Webservern sprechen ...
-
Antoras schrieb:
;fricky schrieb:
du kannste es auch umsonst haben
Ich habs schon
good job, Antoras *daumen_hoch*
Antoras schrieb:
Auf einem MSC1210.
oha, relatuv schwaches teil, 1k RAM und so. da würde ich mir schon überlegen, ob ein objektorientierter ansatz (der einiges an overhead mit sich bringt) wirklich das richtige ist.
-
Antoras schrieb:
µngbd schrieb:
Meinst du zum Debuggen?
Ja. Für den Anwender bringen die Konsolenausgaben natürlich nichts. Aber für so en Zeugs wie ein Segmentation Fault benutz ich sowieso gleich den Debugger.
Klar, ein Debugger ist was feines. Aber ich benutz meinen nur selten, Ausgaben reichen meistens.
Allerdings verwirre ich mich damit regelmäßig selbst, weil ich vergesse, einen man: fflush auf stdout zu machen, und das Programm abstürzt, während noch was im Schreib-Puffer ist -- dann such ich das Problem an der falschen Stelle...
-
pointercrash() schrieb:
Fällt Dir eigentlich eine "Out-of-the-box-" Lösung ein, eine Schaltung mit Ethernet zu versehen?
such mal nach ENC28J60, den kannste über SPI überall anschliessen, sehr beliebtes teil. der kann zwar nur 10BASE-T und du brauchst 'nen softwaretreiber, aber beispielcode findeste massenhaft im internet.
-
Antoras schrieb:
Auf einem MSC1210.
Das ist ein "intelligenter" AD-DA- Wandler mit dem schaurigen 8051- Core. Was um Gottes Willen läßt Dich glauben, daß das Dingsda einen Webserver abgeben könnte?
;fricky schrieb:
such mal nach ENC28J60, den kannste über SPI überall anschliessen, sehr beliebtes teil. der kann zwar nur 10BASE-T und du brauchst 'nen softwaretreiber, aber beispielcode findeste massenhaft im internet.
Oh, der ist mir nicht mehr aufgefallen, weil ich Microchip seit mindestens 10 Jahren ignoriere. Die PICs haben noch bei jedem Projekt an mir Selbstzweifel geweckt, das ist schlecht für's Ego.
-
pointercrash() schrieb:
Was um Gottes Willen läßt Dich glauben, daß das Dingsda einen Webserver abgeben könnte?
geht aber. RAM reicht aus und vom Flash her kriegste 3 davon rein.