
Maskinellt lärande i inbyggda system - Vem är på?
Re: Maskinellt lärande i inbyggda system - Vem är på?
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. 

- 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å?
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.
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.
Re: Maskinellt lärande i inbyggda system - Vem är på?
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.
Windows 95 - Det bästa operativsystemet.
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.

Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: Maskinellt lärande i inbyggda system - Vem är på?
Det är väl bara att kontrollera index mot max tillåtna innan du accessar arrayen?
Re: Maskinellt lärande i inbyggda system - Vem är på?
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?
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?
Re: Maskinellt lärande i inbyggda system - Vem är på?
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.
Re: Maskinellt lärande i inbyggda system - Vem är på?
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
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
Re: Maskinellt lärande i inbyggda system - Vem är på?
Men finns det inget program t.ex. Valgrind som kan analysera detta?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.
Jag har använt Valgrind förut och då hittade den massa minnesläckor. Enkelt kunde jag åtgärda dom.
Re: Maskinellt lärande i inbyggda system - Vem är på?
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.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
Re: Maskinellt lärande i inbyggda system - Vem är på?
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.
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.
Re: Maskinellt lärande i inbyggda system - Vem är på?
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?
Egentligen så håller jag endast på med arrayer.
Någon som vet hur man kan göra det?
Re: Maskinellt lärande i inbyggda system - Vem är på?
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.DanielM skrev: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.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
Re: Maskinellt lärande i inbyggda system - Vem är på?
Precis så enkelt är det ju, sen att du inte vill ta kostnaden för testerna är en annan sak...DanielM skrev: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.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
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...
Re: Maskinellt lärande i inbyggda system - Vem är på?
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?