Tänker jag helt fel eller skriver jag det fel? Jag vill ha stegmotorn att gå olika fort beroende på variabel tid. Det är givet att jag kan skippa "#define" och lägga in stegningen direkt i den rutin som kör motorn men detta hade ju varit trevligare om det funkat.
Jag har för mig att delay funktioner kompileras till fast asemblerkod och
den kan därför inte ta en variabel som parameter. D.v.s att koden
"huggs i sten" vid kompileringen med hjälp av bl.a den hastighet (MHz)
som man har angivit att man tänker använda vid körningen.
Vdelay funkade, problemet är löst och en ny lärdom har infunnit sig.
delay_xx tar const som input och Vdelay_xx tar variabel som input. Vdelay tar även const. som input. Men har man dåligt med minne så sparar man 6 byte genom att använda delay_xx till const. (Åtminstone i microC for PIC.
Har ingenting att göra med den egentliga frågeställningen, men ett generellt tips:
om du skapar makron som är "funktionslika", se till att de ser ut som en funktion
när du använder dem, det gör koden mycket mer lättläst.
Ett annat tips, att använda makron är synnerligen dålig programmeringsstil, och en källa till många fel.
Använd #define till konstantdeklarationer, inget annat.
Instämmer med TomasL, även om världen givetvis inte är så svart och vit att det inte finns tillfällen där makros är vettigt att använda till annat än konstantdeklarationer.
För exemplet i den här tråden verkar det dock inte finnas några fördelar med att använda makros.
Vill ni se min senaste makrodef? Just en kostantdeklaration. Varsågod
Om någon har en bättre idé på hur man löser problemet mottages det med tacksamhet.
Jag vill alltså initiera en sinustabell.
Ps. Makrot expanderar till ca 123000 tecken. Märkligt nog inget problem för kompilatorn!!!
Om du nu ändå skriver dina #define mer eller mindre "rekursivt" kan du lika gärna göra själva MacLaurinserien rekursiv direkt.
Det sparar många många multiplikationer och divisioner.
Och blir ännu mer "lättläst"
Senast redigerad av bit96 22 oktober 2012, 09:35:11, redigerad totalt 1 gång.