Ik zit te denken om mijn basisprogramma multitasking te maken, maar heeft dat veel nut?
Het lijkt me voor een microcontroller heel makkelijk om gewoon een taak op te kunnen starten, te zeggen wat voor resources je wilt gebruiken en de rest aan je besturingssysteempje over te laten.
Maar het probleem zit hem in cooperative tegenover preemptive. Preemtive is naar mijn idee de enige goede, maar dan moet iedere taak zijn eigen stack hebben en moet je alle registers en vlaggen veiligstellen. Zeker bij een AVR met 32 registers hakt dat er aardig in.
En de stack moet toch aardig groot zijn, omdat je daar ook je parameters op moet zetten (reentrant), dus 64 bytes per taak heb je al snel kwijt.
Je kunt dus maar een paar taken tegelijk aktief hebben als je maar 512 bytes of zo RAM hebt. Terwijl het net mooi zou zijn als je voor iedere deelfunctie een aparte taak kunt opstarten.
Bij cooperative heb je een grote kans dat andere taken niet aan bod komen en je hele timing en je interrupts in de soep lopen als een taak te lang aktief blijft. Dat vind ik maar niets voor een microcontroller. Maar je hebt dan per taak maar een paar bytes geheugen nodig.
Dus wat is nou het slimste? Geen multitasking, cooperative multitasking, of preemtive met extern SRAM? Ik neig naar het laatste, (zeker met NVRAM biedt dat ook een hoop extra mogelijkheden), maar dan ben ik wel verplicht in iedere schakeling een latch en een SRAM bij te plaatsen.
Jeroen Boere
IF you can't convince them, then confuse them!
Ik ben nu een basischakeling en OS-je aan het maken/ontwerpen met een ethernet interface. En daar het misschien in de toekomst commercieel gebruikt zou kunnen worden, wil ik graag alle onderdelen zelf maken.
De eerste twee toepassingen waar interesse in is, zijn een schakeling om een server te monitoren (temperatuur, spanning, vochtigheid etc) en een beveiligingssysteem dat helemaal via het internet moet werken. Zelf zie ik ook wel brood in een harddisk die je op een custom manier rechtstreeks via het netwerk kunt benaderen om backups te maken. (Een simpele NAS, dus.)
Ik ben nog aan het kijken wat de beste oplossing is voor de internet interface, ik denk dat ik probeer aan een Ax88796 te komen en daarmee een print ontwerp. De IP stack wil ik ook zelf bouwen, waarschijnlijk naar een Open Source voorbeeld.
Wouter van Ooijen
Wouter van Ooijen: VOTI webwinkel, docent HvU (Technische Informatica); C++ on mictrocontrollers blog
> Ik zit te denken om mijn basisprogramma multitasking te maken, maar heeft dat veel nut?
+ maakt programmeren makkelijker
- kost resources
Vandaar dat beide technieken (gebruik van een mutitasking kerenel, of het programmeren direct op het 'kale metaal') gebruikt worden.
De vraag wat goed is kan dus alleen beantwoord worden tov een bepaalde toepassing of reeks van toepasssingen.
Hoi
Ik heb in DOS veel 'multitasking' gedaan, binnen 1 executable. Ow.. heet dan mutli threading...
Truc is om alles event driven te maken, en waar nodig state machines. Zo krijgt elke 'task' z'n eigen procedure, die je als argument z'n data mee geeft. Daarin zitten oa. al z'n statussen.
Is ff vanuit een ander gezichtspunt programmeren, maar draaide als een speer.
Wel cooperative, maar aangezien je nooit 'ergens op blijft wachten' (dat staat in je state, de volgende keer als je mag, kijk je ff of je al door kunt) en je alle software zelf schrijft, moet dat best kunnen werken (zeker als je geen M$ subroutines gebruikt
).
Wouter heeft wel gelijk.. Is ook maar wat je wilt. Eigen OSje is mooier, zonder meer.. Maar ja.. Zo komen we ook aan winshit he.. Steeds meer, meer, meer... Mijn eerste PC had 256k mem. Deed niet zoveel minder (mail, textverwerken, BBSen) dan een huidige doos met 256Mb 
Ja, ik ben ook in 1980 begonnen met programmeren. Ook mini-besturingssysteempjes gemaakt en andere dingen zoals editors, macro assembler/disassembler, graphic engine en zo. Totdat ik in de IT terechtkwam en voor mijn beroep ging programmeren.
Ik heb zelf ook een hekel aan al die bloatware en ik zie zeker de laatste 5 jaar of zo alleen bij spelletjes nog vooruitgang. Vandaar dat ik nu (weer) met electronica aan de slag ben gegaan, en dan liefst met een microcontroller natuurlijk, dat is voor mij het eenvoudigste.
Ik zoek nu voornamelijk naar de gulden middenweg voor microcontrollers. Want ik denk meteen aan alles multitasking, events, messages, virual memory met page switching, etc.
Nou zit ik nog in het experimenteerstadium en weet ik nog niet eens of ik met assembler verderga, of ik C pak of zelf een compiler voor mijn lievelingstaal (Delphi) maak. En ik weet ook niet in hoeverre dat allemaal zinvol is. Multitasking lijkt me heel makkelijk, zeker met een ethernet interface en als je daarover verschillende taken tegelijk wilt draaien.
Ik denk nog teveel in computertermen en niet genoeg in electronicatermen, denk ik. Ik moet misschien eerst een simpele toepassing met die controller bouwen voordat ik er die ethernetchip aanhang en mijn eigen besturingssysteem ga bouwen.