Maskinellt lärande i inbyggda system - Vem är på?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
DanielM
Inlägg: 2428
Blev medlem: 5 september 2019, 14:19:58

Re: Maskinellt lärande i inbyggda system - Vem är på?

Inlägg av DanielM »

Det är en klassiker att TomasL försöker spänna sig igenom att göra halmdockor. Jag är van vid det då det inte är första gången. :)
Användarvisningsbild
Lennart Aspenryd
Tidigare Lasp
Inlägg: 12607
Blev medlem: 1 juli 2011, 19:09:09
Ort: Helsingborg

Re: Maskinellt lärande i inbyggda system - Vem är på?

Inlägg av Lennart Aspenryd »

Tack Daniel M att du tar det på dette viset! Jag kände igår att det skulle komma slika påhopp.
Det är synd! Jag gillar verkligen dina försök att ta dig fram på oortodoxa vägar.
Kanske lyckas du en dag.
Så riktigt med Ris till de som tjafsar och odlar wisserbesserattityder.
DanielM
Inlägg: 2428
Blev medlem: 5 september 2019, 14:19:58

Re: Maskinellt lärande i inbyggda system - Vem är på?

Inlägg av DanielM »

Det jag verkligen skulle behöva hjälp med i tråden är

1. Hur kan jag bekräfta att jag ej överindexerar arrayer. Jag får inga varningar från Valgrind eller Eclipse IDE så då antar jag att jag har gjort rätt?
2. Jag skulle också vilja veta vilka behov som finns när det kommer till en mer automatiserad robotik.

Mitt mål med själva robotiken är att kunna göra machine learning på inbyggda system. Varför inbyggda system när Python + TensorFlow + Raspberry Pi går betydligt bättre och dessutom lägre utvecklingskostnad kan man fråga?
Jo, detta har med att Python = Segt om du har en liten dator, TensorFlow går inte implementera på kretskort samt Raspberry Pi är ett OS-baserat system. Det blir liksom bara fel från första början. Även ST har utvecklat en applikation som heter CubeMX AI som tränar neurala nätverk för att kunna appliceras på mikrokontroller, så jag är inte först ut. Men detta är endast anpassat för ST's produkter.

Så mitt mål är att man ska kunna tillämpa allt på mikrokontroller som har t.ex. 4 kB RAM och 42 MHz CPU av följande anledningar.

1. Billigt
2. Robust

Får en sådan nostalgisk känsla när jag tänker på min första bärbara dator. :D Windows 95 - Det bästa operativsystemet.
Compaq-LTE-Elite-4-50E-CX-50MHz-Intel-i486DX2.jpg
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
AndLi
Inlägg: 18238
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Re: Maskinellt lärande i inbyggda system - Vem är på?

Inlägg av AndLi »

Det är väl bara att kontrollera index mot max tillåtna innan du accessar arrayen?
DanielM
Inlägg: 2428
Blev medlem: 5 september 2019, 14:19:58

Re: Maskinellt lärande i inbyggda system - Vem är på?

Inlägg av DanielM »

Jo. Jag gör det. Men det är inte bara. Det handlar om att jag skriver linjär algebra med C. Rätt svårt. Ibland testar man sig fram och sedan blir det rätt. Där efter testar man med olika data och olika storlekar på matriserna. När man ser att allt stämmer så ställer man sig frågan "Tänk om jag ändå överindexerar arrayen".

Vi säger att jag har en array på 5 element, men jag går till arr[5], vilket är den stjärte. Då borde väll jag få något felmeddelande, eller hur?
Användarvisningsbild
ajje
Inlägg: 2620
Blev medlem: 12 mars 2010, 16:35:31
Ort: Smedjebacken

Re: Maskinellt lärande i inbyggda system - Vem är på?

Inlägg av ajje »

Vi säger att jag har en array på 5 element, men jag går till arr[5], vilket är den stjärte. Då borde väll jag få något felmeddelande, eller hur?

Nej, C håller inte koll på sådant åt dig.

Det är din egna skyldighet att hålla koll på hur stor arrayen är och se till att dina indexar inte överstiger det värdet.
Användarvisningsbild
AndLi
Inlägg: 18238
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Re: Maskinellt lärande i inbyggda system - Vem är på?

Inlägg av AndLi »

Vill du ha ett felmedelande får du skapa en funktion som kollar åt dig!

Enklast är ju att du har defines som sätter upp arrayernas storlek och som din kontrollfunktion använder. Då behöver du bara ändra på ett ställe när du vill prova något
DanielM
Inlägg: 2428
Blev medlem: 5 september 2019, 14:19:58

Re: Maskinellt lärande i inbyggda system - Vem är på?

Inlägg av DanielM »

ajje skrev:
Vi säger att jag har en array på 5 element, men jag går till arr[5], vilket är den stjärte. Då borde väll jag få något felmeddelande, eller hur?

Nej, C håller inte koll på sådant åt dig.

Det är din egna skyldighet att hålla koll på hur stor arrayen är och se till att dina indexar inte överstiger det värdet.
Men finns det inget program t.ex. Valgrind som kan analysera detta?
Jag har använt Valgrind förut och då hittade den massa minnesläckor. Enkelt kunde jag åtgärda dom.
DanielM
Inlägg: 2428
Blev medlem: 5 september 2019, 14:19:58

Re: Maskinellt lärande i inbyggda system - Vem är på?

Inlägg av DanielM »

AndLi skrev:Vill du ha ett felmedelande får du skapa en funktion som kollar åt dig!

Enklast är ju att du har defines som sätter upp arrayernas storlek och som din kontrollfunktion använder. Då behöver du bara ändra på ett ställe när du vill prova något
Så enkelt är det inte. Tanken är att man ska kunna anropa en funktion med ett argument t.ex minFuntion(float* A, int rad, int kolumn) och då vet den precis vilka dimensioner den ska använda.
bearing
Inlägg: 11670
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Maskinellt lärande i inbyggda system - Vem är på?

Inlägg av bearing »

Du skulle istället för en enkel array, kunna göra en struct som innehåller arrayen samt lite annan info, t.ex. arrayens dimensioner. Sen istället för att läsa/skriva arrayen direkt, skulle du kunna använda en funktion som du skrivit, som läser eller skriver vid önskad index, men bara ifall önskad index ryms inom arrayens dimensioner, annars stoppa programmet och ange en felorsak.

Detta tar såklart längre tid är att läsa direkt.

Program likt valgrind är ju också ett sätt att verifiera att det inte finns buggar. Men kräver såklart att man ser till att använda parametrar som ger fullständig täckning för att ha möjlighet att hitta de flesta buggarna.
DanielM
Inlägg: 2428
Blev medlem: 5 september 2019, 14:19:58

Re: Maskinellt lärande i inbyggda system - Vem är på?

Inlägg av DanielM »

Orsaken varför jag har inte använt mig av strukturer för att sätta dit rad och kolumn har med att jag har inte tänkt på det. Dessutom var jag lite rädd att det skulle gå segare. Varje millisekund räknas.
Egentligen så håller jag endast på med arrayer.

Någon som vet hur man kan göra det?
hummel
Inlägg: 2534
Blev medlem: 28 november 2009, 10:40:52
Ort: Stockholm

Re: Maskinellt lärande i inbyggda system - Vem är på?

Inlägg av hummel »

DanielM skrev:
AndLi skrev:Vill du ha ett felmedelande får du skapa en funktion som kollar åt dig!

Enklast är ju att du har defines som sätter upp arrayernas storlek och som din kontrollfunktion använder. Då behöver du bara ändra på ett ställe när du vill prova något
Så enkelt är det inte. Tanken är att man ska kunna anropa en funktion med ett argument t.ex minFuntion(float* A, int rad, int kolumn) och då vet den precis vilka dimensioner den ska använda.
En funktion ska alltid kontrollera att indata är korrekta så inte man skriver över minne eller gör division med 0 eller något annat fel.
Användarvisningsbild
AndLi
Inlägg: 18238
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Re: Maskinellt lärande i inbyggda system - Vem är på?

Inlägg av AndLi »

DanielM skrev:
AndLi skrev:Vill du ha ett felmedelande får du skapa en funktion som kollar åt dig!

Enklast är ju att du har defines som sätter upp arrayernas storlek och som din kontrollfunktion använder. Då behöver du bara ändra på ett ställe när du vill prova något
Så enkelt är det inte. Tanken är att man ska kunna anropa en funktion med ett argument t.ex minFuntion(float* A, int rad, int kolumn) och då vet den precis vilka dimensioner den ska använda.
Precis så enkelt är det ju, sen att du inte vill ta kostnaden för testerna är en annan sak...

minFuntion(float* A,int rad, int kolumn, int max_rad,int max_kolumn);

Det var väl inte så svårt?

Sen gäller det ju att du håller koll på att du skickar rätt MAX värde för rätt array du skicka in...

eller så skickar du med en sizeof av din array du skickar in, visst du kan ju då inte veta om du indexerar den fel med rad/kolumn, men vet när du kommer utanför...

Finns massa lösningar, men alla kostar ju klockcykler, den som inte kostar klockcykler är att ha koll när du skriver koden och inte göra fel.
Eller någon preprocessor som kollar alla kombinationer åt dig, men de är sällan heltäckande...
DanielM
Inlägg: 2428
Blev medlem: 5 september 2019, 14:19:58

Re: Maskinellt lärande i inbyggda system - Vem är på?

Inlägg av DanielM »

Alltså jag menar att om jag har en for-loop som jag itererar +1 mer än vad en array har för element. Då borde väll jag få ett felmeddelande?
hummel
Inlägg: 2534
Blev medlem: 28 november 2009, 10:40:52
Ort: Stockholm

Re: Maskinellt lärande i inbyggda system - Vem är på?

Inlägg av hummel »

I C nej.
Skriv svar