Gast
#1569302
int choosetable(){
if(startup==1){ allticks=15000; }
uint32_t calcticks=allticks;
if (allticks >= 3191) {
if(allticks>= 11905 ){
coilon=allticks-
(loadtime+((calcticks*(vorzuendung+zzp1[0]))/1800));
coiloff=coilon+loadtime;
startup=0;
return 0;
}//253-1260
if(allticks>= 7075 ){
coilon=allticks-
(loadtime+((calcticks*(vorzuendung+zzp1[2]))/1800));
coiloff=coilon+loadtime;
return 0;
}//1261-2120
if(allticks>= 5034 ){
coilon=allticks-
(loadtime+((calcticks*(vorzuendung+zzp1[3]))/1800));
coiloff=coilon+loadtime;
return 0;
}//2121-2980
if(allticks>= 3906 ){
coilon=allticks-
(loadtime+((calcticks*(vorzuendung+zzp1[4]))/1800));
coiloff=coilon+loadtime;
return 0;
}//2981-3840
if(allticks>= 3191 ){
coilon=allticks-
(loadtime+((calcticks*(vorzuendung+zzp1[5]))/1800));
coiloff=coilon+loadtime;
return 0;
}//3841-4700
}else{
if(allticks>= 2698 ){
coilon=allticks-
(loadtime+((calcticks*(vorzuendung+zzp1[6]))/1800));
coiloff=coilon+loadtime;
return 0;
}//4701-5560
if(allticks>= 2336 ){
coilon=allticks-
(loadtime+((calcticks*(vorzuendung+zzp1[7]))/1800));
coiloff=coilon+loadtime;
return 0;
}//5561-6420
if(allticks>= 2060 ){
coilon=allticks-
(loadtime+((calcticks*(vorzuendung+zzp1[8]))/1800));
coiloff=coilon+loadtime;
return 0;
}//6421-7280
if(allticks>= 1843 ){
coilon=allticks-
(loadtime+((calcticks*(vorzuendung+zzp1[9]))/1800));
coiloff=coilon+loadtime;
return 0;
}//7281-8140
if(allticks>= 1667 ){
coilon=allticks-
(loadtime+((calcticks*(vorzuendung+zzp1[10]))/1800));
coiloff=coilon+loadtime;
return 0;
}//8141-9000
}
return 0;
}
Oben angefügt habe ich einen Codeabschnitt meines Programms mit dem ich
leider so meine Probleme habe.
Die If Schleifen brauchen im Worst-case 25µs bei 20 Mhz und die Rechnung
für den Wert coilon leider 70 µs.
Das Problem bei des Sache ist nur, dass es sich hier um eine
zeitkritische Anwendung handelt bei der Werte für einen gesamten
Durchlauf von 20-50 µs äußerst praktisch wären.
Gibt es Möglichkeiten den Code zu optimieren um Zeit zu sparen ?
Wenn ich oben calcticks als 16 bit Variable passiert spart es Zeit aber
das Ergebniss wird zu ungenau. Dasselbe passiert wenn ich statt zu
dividieren schieben um 11 benutze. Gibt es andere Möglichkeiten der
optimierung ? Vor allem die IFs stören mich.
Bitte helft mir ich hab schon masseenhaft Foren ergebnisslos durchsucht.
mfg Manax