Hur kan jag få tag på prestandaversionen av Nucleo?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
bearing
Inlägg: 11670
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Hur kan jag få tag på prestandaversionen av Nucleo?

Inlägg av bearing »

DanielM skrev:Bara så ni vet det så funderar jag på att ta TomasL's råd att ändra om float till long :) Eller uint32_t med andra ord.

Jag hoppas det ska gå bra att bara ersätta floats med heltalsberäkning? Inget annat jag behöver ta hänsyn till?
Jag tänker använda typedef.
Om du bara ska göra heltalsberäkningar behöver du ju inte använda floats. En sak du behöver ta hänsyn till är att produkterna, resultatet av beräkningarna, inte blir för stora i mellanstegen eller det slutliga steget (overflow). Finns några andra saker att ta hänsyn till också, som en van programmerare gör automatiskt. Men du är ju inte det, är inte van, vilket gör mig orolig.

För att kunna räkna med decimaltal kan man "flytta kommatecknet", d.v.s använda "fixed point", som Tomas varit inne på. Även många andra har föreslagit detta i alla andra trådar du startat. Hur som helst, fixed point kräver en del klurande och god förståelse för vad man gör (på bit-nivå). Din saknad av kunskap om detta gör mig orolig.

Till Matlab finns Dspace TargetLink, som automatiskt hanterar fixed point. D.v.s man kan betrakta signalerna som floats. Man kan mata systemet med massor av testfall, extremvärden på data, eller verkliga loggar. Man kan dessutom visuellt plotta signalerna både som float och fixed point i samma plot, för att avgöra hur "taggiga" de blir med fixed point, och ev. skala om dem för bättre upplösning (så länge det inte blir overflow någonstans). Finns massor med fina hjälpmedel för att se till att allt står rätt till när man går från float till fixed point. TargetLink är i princip standard inom bilindustrin i Tyskland.

Eftersom att du ska använda ovanligt stora matriser, och samtidigt koda för hand, d.v.s utan att gå via grafisk programmering som hjälpmedel, tror jag det blir mycket svårt för dig att verifiera att din fixed-point-lösning är buggfri vid alla kombinationer av indata. Så jag tycker att du ska fortsätta med floats. Annars gör du mig orolig.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46920
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Hur kan jag få tag på prestandaversionen av Nucleo?

Inlägg av TomasL »

Vi skalar all värden från AD-omvandlare mm så de är 40x dvs, när vi gör en utskrift av ett värde, så delar vi med 4 (2 högerskift) och sätter decimaltecknet för en decimal (/10), vi är bara intresserade av en decimal, och följaktligen kalibrerar vi AD-omvandlarna efter detta.
Dock alla beräkningar utförs med 40x
DanielM
Inlägg: 2433
Blev medlem: 5 september 2019, 14:19:58

Re: Hur kan jag få tag på prestandaversionen av Nucleo?

Inlägg av DanielM »

Okej, Det var de jag frågade för någon sida sedan hur man dividerar och multiplicerar med bitoperationer. Jag uppfattade ditt svar som att det var en ren barnlek och man behövde inte ändra något.
TomasL skrev:För att det skall vara effektivt, så behöver du skala om dina data på lämpligt sätt, samt fundera på hur matematiken ser ut, dvs utnyttja processorn till det maximala, dvs använda skiftoperationer i stället för division och multiplikation osv.
Du kan helt enkelt inte bara ta det befintliga och typedefa dina floats till heltal, det funkar inte.
DanielM
Inlägg: 2433
Blev medlem: 5 september 2019, 14:19:58

Re: Hur kan jag få tag på prestandaversionen av Nucleo?

Inlägg av DanielM »

TomasL skrev:Vi skalar all värden från AD-omvandlare mm så de är 40x dvs, när vi gör en utskrift av ett värde, så delar vi med 4 (2 högerskift) och sätter decimaltecknet för en decimal (/10), vi är bara intresserade av en decimal, och följaktligen kalibrerar vi AD-omvandlarna efter detta.
Dock alla beräkningar utförs med 40x
Så om vi har int a = 40 och int b = 2. Hur delar jag detta med binär räkning? Eller hex eller vad man ska säga.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46920
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Hur kan jag få tag på prestandaversionen av Nucleo?

Inlägg av TomasL »

Vad skall du dela med vad?
DanielM
Inlägg: 2433
Blev medlem: 5 september 2019, 14:19:58

Re: Hur kan jag få tag på prestandaversionen av Nucleo?

Inlägg av DanielM »

Vi säger a/b.

Låt även b = 3. Hur blir det då?
bearing
Inlägg: 11670
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Hur kan jag få tag på prestandaversionen av Nucleo?

Inlägg av bearing »

DanielM skrev:
TomasL skrev:Vi skalar all värden från AD-omvandlare mm så de är 40x dvs, när vi gör en utskrift av ett värde, så delar vi med 4 (2 högerskift) och sätter decimaltecknet för en decimal (/10), vi är bara intresserade av en decimal, och följaktligen kalibrerar vi AD-omvandlarna efter detta.
Dock alla beräkningar utförs med 40x
Så om vi har int a = 40 och int b = 2. Hur delar jag detta med binär räkning? Eller hex eller vad man ska säga.
Det beror på vad du har valt för skala, och ifall siffrorna du visar är innan eller efter omskalning. Du gör först en vanlig division med processorns DIV-instruktion (alltså / i C), och sen måste kvoten ofta skiftas något/några steg åt något håll (>> eller <<). För att kunna behålla alla värdesiffror kan du behöva utföra skiftningen på täljaren innan divisionen. Så länge täljaren inte får overflow eller tappar värdesiffror vid skiftningen.

Baserat på dina exempel gissar jag att du inte förstått vad fixed point är. Samt att du missat att du faktiskt kan använda processorns divisons-instruktion. Verkar som att du tror att du behöver använda liggande stolen. Liggande stolen används bara i assembler-programmering ifall processorn saknar instruktioner för division.

Men det verkar ju vara som vanlig här. Du ignorerar inlägg och fortsätter på inställd kurs, obekymrad av att kursen är fel och att kompassen har stark deviation. Inget nytt under solen.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46920
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Hur kan jag få tag på prestandaversionen av Nucleo?

Inlägg av TomasL »

Problemet är väl att man måste vara rätt duktig i matte, eftersom man måste skriva om alla funktioner, så att multiplikationer och divisioner är jämt delbara med 2.
Om man har den kunskapen, så kan man göra under.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46920
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Hur kan jag få tag på prestandaversionen av Nucleo?

Inlägg av TomasL »

om du skall dela a med b där b==2 , så a>>1, enkelt uttryckt.
DanielM
Inlägg: 2433
Blev medlem: 5 september 2019, 14:19:58

Re: Hur kan jag få tag på prestandaversionen av Nucleo?

Inlägg av DanielM »

>> Men det verkar ju vara som vanlig här. Du ignorerar inlägg och fortsätter på inställd kurs.

Visa mig ett exempel då istället för att kritisera? Liggande stolen är lite för gammalt för mig. Sådant lärde jag mig inte när jag gick i skolan.
Vi hade datorer och räknare för våran lärare tyckte ändå att det var ingen idé att repitera division och addition från lågstadiet.

På universitetet var det MATLAB som gällde. Fanns ingen handräkning där.
DanielM
Inlägg: 2433
Blev medlem: 5 september 2019, 14:19:58

Re: Hur kan jag få tag på prestandaversionen av Nucleo?

Inlägg av DanielM »

TomasL skrev:om du skall dela a med b där b==2 , så a>>1, enkelt uttryckt.
Aha! Smart! Men om b == 3 då? Då är det ett annat uttryck?
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46920
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Hur kan jag få tag på prestandaversionen av Nucleo?

Inlägg av TomasL »

Det är väl det som är problemet.
Själv lärde jag mig med Sticka och P&P


Ja, du får helt enkelt göra om ekvationerna så att du alltid använder divisorer med 2
DanielM
Inlägg: 2433
Blev medlem: 5 september 2019, 14:19:58

Re: Hur kan jag få tag på prestandaversionen av Nucleo?

Inlägg av DanielM »

Det var tider det. Innan dess så fick man räkna med stenar och fingrar. Påminner mig lite om Monty Python "Men jag då? Jag har...X..värre än dig" :wink:

Kanske det finns ett färdigt bibliotek som jag kan använda mig utav?

Vad tror du om denna funktion?

https://github.com/cruxrebels/Interview ... tegers.cpp

Kod: Markera allt

int Solution::divide(int dividend, int divisor) {
    int sign = 1;
    if (dividend<0){sign = -sign;}
    if (divisor<0){sign = -sign;}
     
    unsigned long long tmp = abs((long long)dividend);
    unsigned long long tmp2 = abs((long long)divisor);
            
    unsigned long c = 1;
    while (tmp2 < tmp){
        tmp2 = tmp2<<1;    
        c = c<<1;
    }
     
    long long res = 0;
    while (tmp>=abs((long long)divisor)){
        while (tmp2 <= tmp){
            tmp -= tmp2;
            res = res+c;
        }
        tmp2=tmp2>>1;
        c=c>>1;    
    }
     
    return (sign*res >= INT_MAX ||  sign*res < INT_MIN) ? INT_MAX : sign*res;
}
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46920
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Hur kan jag få tag på prestandaversionen av Nucleo?

Inlägg av TomasL »

Bibliotek till vad, dina funktioner/formler får du skriva själv, naturligtvis
DanielM
Inlägg: 2433
Blev medlem: 5 september 2019, 14:19:58

Re: Hur kan jag få tag på prestandaversionen av Nucleo?

Inlägg av DanielM »

Men sådant borde väll redan många andra ha skrivit för länge sedan?
Skriv svar