Blandat Arduino-skoj

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
pi314
Inlägg: 5830
Blev medlem: 23 oktober 2021, 19:22:37
Ort: Stockholm

Re: Blandat Arduino-skoj

Inlägg av pi314 »

Jag hittade vad jag tyckte såg ut som en seriös och begriplig video om DS3231.



Koden som används i videon finns på Github.

https://github.com/DuranioMakes/DS3231_ ... _Interrupt

/Pi
Användarvisningsbild
pi314
Inlägg: 5830
Blev medlem: 23 oktober 2021, 19:22:37
Ort: Stockholm

Re: Blandat Arduino-skoj

Inlägg av pi314 »

Parallella processer, race och metaforer
Om två parallella processer tillåts ändra samma variabel så kan man råka ut för att en process "förintar" en förändring av variabeln som den andra processen gjort. Det problemet kan uppstå i min kod för tidsstyrning med Arduinons inbyggda klocka.

Man kan förhidra att detta problem uppstår med olika metoder. En metod är att använda semaforer.

Operativsystem, om man har ett sådant, har normalt funktioner som semaforer.

Längs järnvägen hade man förr semaforer. För att t.ex. förhindra att två tåg i motsatt riktning kom in på ett spåravsnitt där dom kunde kollidera.

I datorer skiljer vi mellan binära semaforer och räknande semaforer. Om processorn har flera kärnor krävs lite extra åtgärder. I ett system med en processorkärna, som i en Arduino, kan vi helt enkelt stänga av interruptsystemet en kort stund för att undvika kollisioner.
I Arduino c har vi dessa två funktioner.

Kod: Markera allt

  cli();                     // Disable all interrupts

  sei();                     // Enable interrupts
Jag återkommer med ett förslag till lösning i min kod för tidsstyrning.

/Pi
Användarvisningsbild
4kTRB
Inlägg: 18404
Blev medlem: 16 augusti 2009, 19:04:48

Re: Blandat Arduino-skoj

Inlägg av 4kTRB »

FreeRTOS verkar ju vara bra för sånt där om man nu har tillräckligt med utrymmea att ha det ombord.
https://freertos.org/freertos-in-the-wild/
Exempel..
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4695
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: Blandat Arduino-skoj

Inlägg av Swech »

Ditt exempel kan inte råka ut får något problem med variablerna.
Om du lägger till kod som tar mer än en sekund på sig innan den returnerar till huvudloopen så
kan du få problem med tappade sekunder, men även med SEI / CLI så löser du inte det problemet

Interruptrutinen stänger automatiskt av övriga interrupt då den exekveras.

Däremot om du kör andra processorer som t.ex. XMEGA serien så har den tre interruptnivåer
och ett interrupt kan bli avbrutet av ett annat med högre prioritet

Swech
agehall
Inlägg: 427
Blev medlem: 12 augusti 2020, 19:27:54

Re: Blandat Arduino-skoj

Inlägg av agehall »

pi314 skrev: 20 augusti 2023, 18:15:05 I datorer skiljer vi mellan binära semaforer och räknande semaforer. Om processorn har flera kärnor krävs lite extra åtgärder. I ett system med en processorkärna, som i en Arduino, kan vi helt enkelt stänga av interruptsystemet en kort stund för att undvika kollisioner.
I Arduino c har vi dessa två funktioner.

Kod: Markera allt

  cli();                     // Disable all interrupts

  sei();                     // Enable interrupts
I en enklare CPU som bara har en kärna, kan du aldrig ha mer än en process som exekverar åt gången - det är helt omöjligt. Om det sker en interrupt, så slutar processorn exekvera vanlig kod och switchar helt till att enbart exekvera interrupt-hanteraren och samtidigt så brukar interrupts normalt sett vara avslagna per default.

cli() och sei() är till för att skapa det vi kallar för kritiska sektioner, dvs delar av koden som inte, under några omständigheter, får avbrytas av interrupts. Ett exempel på detta kan vara när vi pillar med hårdvaruregister - säg att vi ska läsa ett register, modifiera det och skriva tillbaka det nya värdet. Då kan det vara bra att se till att en interrupt inte avbryter kodflödet då det helt plötsligt kan ta mycket längre tid än man tänkt. Ett annat exempel är när vi modifierar interrupthanterare - oftast vill man då inte att en interrupt ska kunna ske samtidigt som vi skriver pekaren till den nya hanteraren.
Senast redigerad av agehall 21 augusti 2023, 12:38:29, redigerad totalt 1 gång.
Användarvisningsbild
rvl
Inlägg: 5817
Blev medlem: 5 april 2016, 14:58:53
Ort: Helsingfors

Re: Blandat Arduino-skoj

Inlägg av rvl »

Var det meningen att inte skulle var med där?
cli() och sei() är inte till för att skapa det vi kallar för kritiska sektioner,
Användarvisningsbild
pi314
Inlägg: 5830
Blev medlem: 23 oktober 2021, 19:22:37
Ort: Stockholm

Re: Blandat Arduino-skoj

Inlägg av pi314 »

Felpost.
agehall
Inlägg: 427
Blev medlem: 12 augusti 2020, 19:27:54

Re: Blandat Arduino-skoj

Inlägg av agehall »

rvl skrev: 21 augusti 2023, 08:05:15 Var det meningen att inte skulle var med där?
cli() och sei() är inte till för att skapa det vi kallar för kritiska sektioner,
Nej. Rättade mitt tidigare inlägg. Det är ju precis det cli() och sei() är till för. :)
Användarvisningsbild
4kTRB
Inlägg: 18404
Blev medlem: 16 augusti 2009, 19:04:48

Re: Blandat Arduino-skoj

Inlägg av 4kTRB »

Såg den här CNC-prylen. Ett shield och demoprogram.
Finns även varianter för laser.

https://www.keyestudio.com/products/key ... rduino-cnc

Bild
Användarvisningsbild
pi314
Inlägg: 5830
Blev medlem: 23 oktober 2021, 19:22:37
Ort: Stockholm

Re: Blandat Arduino-skoj

Inlägg av pi314 »

Projektplattor till Arduino
Inspirerad av Kjells Arduino projektplatta gjorde jag den här mallen. Ett av mina krav var att plattan ska passa i en lösgodisburk. För förvaring eller transport.

230822_mall_till_projektplatta.jpg

Igår fick jag inviga min nya hobbysåg genom att såga till tre projektplattor. Dom har hål för att fästa, antingen en Uno eller en Mega 2560 och en LCD-display, 1602 eller en 2004. En Mega 2560 och en LCD-2004 får inte plats samtidigt.
Jag hade slut på lämpliga nylonskruvar och muttrar, så då 3D-printade jag distanser i stället. För montering av Arduino och LCD-display. Kopplingsplattan fäster jag med dubbelhäftande tejp.

230822_tre_projektplattor.jpg
Jag hade tänkt bygga en liten hobbysåg, men kom över en Proxxon som behövde lite TLC för att kunna återgå i tjänst. Den är nog bättre än om jag gjort en själv.

/Pi
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Skriv svar