Allokering utav minne - Acceptabelt inom inbyggda system?

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

Re: Allokering utav minne - Acceptabelt inom inbyggda syste

Inlägg av DanielM »

TomasL skrev:Därför att de allra flesta som jobbar inom embedded använder just heltalsaretmetik, eftersom det är fasiken så mycket snabbare, jämfört med flyttal.
Kanske möjligvis för enkla saker som kräver snabbhet så används detta. Men estimering vet jag inte om det skulle användas. Man ska bli klar också. Tid är pengar.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45176
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Allokering utav minne - Acceptabelt inom inbyggda syste

Inlägg av TomasL »

Eftersom det historiskt sett inte funnits någon flyttalsprocessor i embeddedhårdvara, så har man helt enkelt fått göra det i heltal.
Och naturligtvis fortsätter man med det, eftersom det ger lika hög noggrannhet, i vissa fall högre än flyttal, och dessutom i regel är snabbare.
Och som baronen skriver, heltal är vanligt i spelmotorer mm.
guckrum
Inlägg: 1671
Blev medlem: 19 juni 2012, 09:04:27
Ort: Lund

Re: Allokering utav minne - Acceptabelt inom inbyggda syste

Inlägg av guckrum »

Kanske möjligvis för enkla saker som kräver snabbhet så används detta. Men estimering vet jag inte om det skulle användas. Man ska bli klar också. Tid är pengar.
(Och man får vad man betalar för.) Men bara för att man kör flyttal så blir det inte automatiskt "rätt". Flyttal ser liksom på ytan ut som att de motsvarar reella tal, men det gör de ju inte alls. Ett 32-bitars flyttal kan ha så lite som sex signifikanta siffror!
Användarvisningsbild
Krille Krokodil
Inlägg: 4062
Blev medlem: 9 december 2005, 22:33:11
Ort: Helsingborg

Re: Allokering utav minne - Acceptabelt inom inbyggda syste

Inlägg av Krille Krokodil »

DanielM skrev:Skulle uppskatta om någon löste följande med ints only.
Det är lite pill men inte inte så svårt i C++ att ersätta float/double som internt räknar med heltal.

Det komplicerade fortfarande i de numeriska beräkningarna och felanalysen där, har man delberäkningar
som drar iväg mot 1/oändligheten eller +- oändligheten så kan det kvitta om man representerar talet med
32 eller 64 bitar, man har ändå noll koll på vad som händer i den svarta lådan och vilka fel man har på det
som kommer ut.
Palle500
Inlägg: 4484
Blev medlem: 6 juni 2015, 14:53:06

Re: Allokering utav minne - Acceptabelt inom inbyggda syste

Inlägg av Palle500 »

Historiskt så fanns det 4 och 8 bits processorer så varför använda längre ordlängd, dög det att landa på månen med så duger det än idag.
Känns lite som en DDR tråd fast för datorer.
Varför inte köra analog reglering, det dög ju även förr?
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: Allokering utav minne - Acceptabelt inom inbyggda syste

Inlägg av snigelen »

> Historiskt så fanns det 4 och 8 bits processorer så varför använda längre ordlängd, dög det att landa på månen > med så duger det än idag.

Därför att längre ordlängd (än 4 och 8 bitar) gör att det blir betydligt effektivare att göra praktiska beräkningar.
Historiskt fanns även t.ex. 36 bitars processorer, en byte var nio bitar. De är ungefär lika vanliga som 4-bits processorer idag(?).

> Känns lite som en DDR tråd fast för datorer.
> Varför inte köra analog reglering, det dög ju även förr?

Därför att tiden inte står stilla. När såg du senast ett analogt kalmanfilter?
Palle500
Inlägg: 4484
Blev medlem: 6 juni 2015, 14:53:06

Allokering utav minne - Acceptabelt inom inbyggda system?

Inlägg av Palle500 »

Snigelen, du missade ironin i mitt inlägg. Där ser man hur svårt det är med internet debatter, nyanserna är svåra att förmedla.
Även jag ser framtiden an med spänning.
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: Allokering utav minne - Acceptabelt inom inbyggda syste

Inlägg av DanielM »

Jag håller med att räkna med binärt är mer nogrannt och mer effektivt vid körning. Men det finns en annan aspekt också - ork & tid.

FORTRAN är ett språk som räknar så?
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: Allokering utav minne - Acceptabelt inom inbyggda syste

Inlägg av DanielM »

Krille Krokodil skrev:
DanielM skrev:Skulle uppskatta om någon löste följande med ints only.
Det är lite pill men inte inte så svårt i C++ att ersätta float/double som internt räknar med heltal.

Det komplicerade fortfarande i de numeriska beräkningarna och felanalysen där, har man delberäkningar
som drar iväg mot 1/oändligheten eller +- oändligheten så kan det kvitta om man representerar talet med
32 eller 64 bitar, man har ändå noll koll på vad som händer i den svarta lådan och vilka fel man har på det
som kommer ut.
Skulle gärna vilja se ett exempel på hur det har gått till när programmeraren använder avancerade algoritmer. Nej, PID är inte en avancerad algoritm.

Rekrusiv minsta kvadratmetod är avancerad.
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: Allokering utav minne - Acceptabelt inom inbyggda syste

Inlägg av DanielM »

I MATLAB så utför jag numeriska beräkningar. Mitt resultat blir 27.7106
I C utför jag mina numeriska beräkningar. Mitt resultat blir 27.71065
Det är circa 1000 snurror med for-loopar åt olika håll och divideringar.

Detta är väldigt bra med tanke på att i C använder jag endast floats. Det blir mer och mer intressant det ni säger om att summera binärt än att addera flyttal. Jag kan få så det blir exakt men orken och tiden vet jag inte om jag har. :humm:
Användarvisningsbild
Icecap
Inlägg: 26108
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Allokering utav minne - Acceptabelt inom inbyggda syste

Inlägg av Icecap »

En 32-bitars µC kan - med en 32-bitars variabel - enkelt jobba med värden mellan 0 och 4 294 967 295.
En enkel omskrivning ger att 27,71065 kan multipliceras med 10000 och blir 2 771 065 som ligger väl innanför området.

Så utan att känna till de exakta uträkningar vill jag påstå att om det fungerar med float (OBS: inte double) fungerar det ganska säkert med unsigned long också om man bara ser till att in-signalen skalas med.

På en µC med FPU inbyggd kan skillnaden mellan float & unsigned long vara mindre, utan FPU kan tiden uträkningerna tar minskas en del.
Användarvisningsbild
Krille Krokodil
Inlägg: 4062
Blev medlem: 9 december 2005, 22:33:11
Ort: Helsingborg

Re: Allokering utav minne - Acceptabelt inom inbyggda syste

Inlägg av Krille Krokodil »

DanielM skrev:Skulle gärna vilja se ett exempel på hur det har gått till när programmeraren använder avancerade algoritmer. Nej, PID är inte en avancerad algoritm.

Rekrusiv minsta kvadratmetod är avancerad.
Det är precis samma sak som innan, man ersätter bara sina float/double med sin "MyFloat" som internt räknar
på ett sätt som är optimerat för den plattform man kör på.

Det komplicerade arbetet ligger i Matlab där man behöver analysera varje steg i algoritmerna och se till
att de inte i något steg är beroende av hög precision nära 32 bitar. Exempel på sådan felanalys och
omstukning av beräkningar finns i grundböcker i numerisk analys. Fel ordning på beräkningarna i en
ekvationslösare kan leda till beräkningar typ 0.0000000000000000022362525/0.0000000000000000023324256
vilket mer liknar matematiken i lotto eller kaos, någon modellering av (relativt) tröga reglersystem är det inte, de
är i tidshorisonten 1 ms saker som går att approximera med snälla linjära system.
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: Allokering utav minne - Acceptabelt inom inbyggda syste

Inlägg av DanielM »

Icecap skrev: På en µC med FPU inbyggd kan skillnaden mellan float & unsigned long vara mindre, utan FPU kan tiden uträkningerna tar minskas en del.
Hur mycket mindre då? Kan man få en siffra från ett exempel?
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: Allokering utav minne - Acceptabelt inom inbyggda syste

Inlägg av DanielM »

Skapade en ny tråd om ämnet för att undvika utbredning av diskussionsämnet.
Senast redigerad av DanielM 9 oktober 2019, 19:15:18, redigerad totalt 3 gånger.
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: Allokering utav minne - Acceptabelt inom inbyggda syste

Inlägg av DanielM »

Krille Krokodil skrev:
DanielM skrev:Skulle gärna vilja se ett exempel på hur det har gått till när programmeraren använder avancerade algoritmer. Nej, PID är inte en avancerad algoritm.

Rekrusiv minsta kvadratmetod är avancerad.
Det är precis samma sak som innan, man ersätter bara sina float/double med sin "MyFloat" som internt räknar
på ett sätt som är optimerat för den plattform man kör på.

Det komplicerade arbetet ligger i Matlab där man behöver analysera varje steg i algoritmerna och se till
att de inte i något steg är beroende av hög precision nära 32 bitar. Exempel på sådan felanalys och
omstukning av beräkningar finns i grundböcker i numerisk analys. Fel ordning på beräkningarna i en
ekvationslösare kan leda till beräkningar typ 0.0000000000000000022362525/0.0000000000000000023324256
vilket mer liknar matematiken i lotto eller kaos, någon modellering av (relativt) tröga reglersystem är det inte, de
är i tidshorisonten 1 ms saker som går att approximera med snälla linjära system.
Så jag behöver bara byta ut float mot long? Inge mer? Det finns inte risk att talen blir för stora?
Skriv svar