Arduino Real-Time extension

Arduino specifieke Software
Berichten: 25
Geregistreerd: 24 Jan 2018, 17:03

Arduino Real-Time extension

Berichtdoor Est29 » 24 Jan 2018, 18:08

In een besturingssysteem wil ik de mogelijkheid hebben om meerdere taken tegelijk te laten werken. Dat is met EEN Loop zeer lastig.
Daarom heb ik gezocht naar een Real-Time operating system. Zo'n systeem heb ik gevonden. De Arduino Teal-Time extension ARTe-1.0 van ReTis lab. Dit is zo'n zelfde programma als de eigenlijk Arduino Software maar dan met de extension mogelijkheid.
Je kan dan meerdere loops maken bv loop1, loop2, loop3 enz die ieder een eigen tijd-gebiedje krijgen.
Het probleem is nu dat als ik dit programma opstart ik de melding krijg "Deze applicatie vereist at least Java Development Kit 1.6.0" Ik wordt dan naar een Java website doorgeschakeld waar ik compleet de weg kwijt ben.
Volledige blokkering.
Wie kan mij helpen door deze barrière heen te komen.
Bij voorbaat dank.

Advertisement

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Arduino Real-Time extension

Berichtdoor Koepel » 24 Jan 2018, 19:10

Hallo, en welkom op dit forum.

Link: http://retis.sssup.it/?q=arte

Je bent in dezelfde valkuil gestapt als sommigen van ons. Er zijn namelijk best wel veel multitasking kernels voor de Arduino. Bij de meeste zijn de nadelen veel groter dan de voordelen.
De ARTe van ReTis is "preemptive", en dat op een Arduino :shock: Een Arduino board verschilt wezenlijk met een gangbaar embedded systeem.

Ik vraag me af of de floating point library wel preemptive is :?

Voordat je gaat nadenken over multitasking, kun je beter proberen om de Blink Without Delay te begrijpen: https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay.

Voor welk Arduino board is het ?
Wil je meerdere dingen kunnen doen omdat dat nodig is voor het project ? Of wil je als programmeur de vrijheid hebben om meerdere taken te maken ?

Berichten: 25
Geregistreerd: 24 Jan 2018, 17:03

Re: Arduino Real-Time extension

Berichtdoor Est29 » 25 Jan 2018, 12:40

Bedankt Koepel,
Ben een stuk wijzer geworden. Vond het al vreemd dat je een RTOS op zo'n klein computertje kon draaien.
Heb je raad opgevolgd om eerst eens naar "BlinkWithoutDelay" te kijken, want dat was nou net mijn probleem.
In mijn projectje wil ik een paar motortjes aansturen en tegelijkertijd een aantal sensoren uitlezen die het gedrag van de motortjes moeten beïnvloeden
. Dat lijkt heel veel op dat proces met het ledje.
Heb BWD gebouwed met een UNO (gebruik ook NANO's). Het werkt goed. Maar je wil ook weten hoe goed. Of liever, hoeveel tijd heb ik nu over voor andere processen. Om die reden heb ik een loopCounter ingebouwd, die ik bij iedere led-omschakeling weer op nul zet. Zo heb ik kunnen zien dat er 7403 of 7128 loops gemaakt worden in 1000 msec. Dat is 0,135 - 0,14 msec per loop. Je hebt dus nog een zee van tijd om andere dingen te doen. Deze truc met de millies kan je dus nog een paar keer doen zonder in moeilijkheden te komen met extra timers.
Nogmaals bedank.

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Arduino Real-Time extension

Berichtdoor Koepel » 25 Jan 2018, 13:05

Het gebruik van millis() voor een "software timer" kan op vele manier verkeerd en maar op een paar manieren goed. Dus laat je sketch eens zien als je daarmee iets gemaakt hebt. Gebruik afzonderlijke "previousMillis" variabelen voor elke aparte "software timer", en ze moeten "unsigned long" zijn.

De millis() doet een rollover, hij gaat van 0xFFFFFFFF naar 0x00000000 na 50 dagen. Door "millis() - previousMillis" te doen gaat het rekenkundig goed, zelfs als millis() middenin de rollover zit. Dat werkt alleen als je dat met "unsigned long" doet.

Jij had een rtos gekozen die niet meer aktief werd bijgehouden. Door het preemptive te maken moesten ze Arduino libraries opnieuw gaan schrijven. Intussen zijn de echte Arduino libraries verbeterd, dus dat rtos liep achter.

Bij de Arduino Uno en de Arduino Mega is te weinig ram het grootste probleem. Elke taak krijgt zijn eigen stack, dat vult het geheugen heel snel.

Het is nu belangrijk om alle delay() te vervangen door de millis() software timers. Vaak moet dan de hele sketch herschreven worden. Een bepaalde sequence kan niet meer met delay(), maar kan bijvoorbeeld wel door een tabel met commando's af te lopen of met een finite state machine.

Ik heb voor de grap een "Wasted.ino" sketch gemaakt: https://gist.github.com/Koepel/4fd63069a070c74d2e928ade9bc88d67. Die kijkt hoeveel tijd verspilt wordt in delay().

Voor de Arduino Due, Zero en M0 met een ARM processor is er een eenvoudige scheduler. Die is heel eenvoudig en die werkt goed.

Wat is BWD ? Volgens Google is dat slang voor... uhm... daar zijn andere fora voor. O, bedoel je BlinkWithoutDelay ? Nou ja, die afkorting had ik nog niet eerder gezien.

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Arduino Real-Time extension

Berichtdoor shooter » 25 Jan 2018, 21:38

Het is denk ik wel slim om eens naar je wijze van programmering te kijken, want het kan allemaal nog veel sneller, als je maar de juiste functies gebruikt, vroeger moesten wij op de Z80 elke klokcyclus uitrekenen, maar ja dat was in machinetaal met mnemonics.
paul deelen
shooter@home.nl

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 21 gasten