PowerPC Kurs Teil 2es geht weiter mit dem Programmieren unter WarpOS |
INTERN |
|
Kurs-Fortsetzung: - OS-Calls die oft pro Sekunde aufgerufen werden Wer diese drei Dinge nicht beachtet, kann u.U. ein PPC-Programm erzeugen, dass langsamer als auf einem 68k ist. Dies sind uebrigens die einzigen Dinge in diesem Kurs, die fuer beide PPC-Kernel gelten, den von H&P und den von Phase 5. Die Liste der zu vermeidenden Dinge ist sicher auch nicht vollstaendig. Denken beim Programmieren !!! Ein wenig im Verdacht, einen Kontextswitch zu verwenden, habe ich die Standard-C-Funktion clock(). Anbei Ersatzcode (aus ZhaDoom):
double tb_scale_lo = ((double)(bus_clock >> 2)) / 35.0; Hierbei wird bus_clock auf den Bus-Clock des Boards gesetzt, z.B. 50000000 fuer 50 MHz. Zeitmessung: (Im Beispiel fuer 70tel-Sekunden Einheiten, wie bei Doom):
int I_GetTime (void)
{
unsigned int clock[2];
double currtics;
static double basetics=0.0;
ppctimer (clock);
if (basetics == 0.0)
basetics = ((double) clock[0])*tb_scale_hi + ((double) clock[1])/tb_scale_lo;currtics = ((double) clock[0])*tb_scale_hi + ((double) clock[1])/tb_scale_lo; return (int) (currtics-basetics); } ppctimer sieht *so* aus (Leute, die kein StormPowerASM haben, bitte mir schreiben, dann maile ich ihnen den Objekt-Code der Funktion zu...):
vea
XDEF _ppctimer
_ppctimer: mftbu r4
mftbl r5
mftbu r6
cmpw r4,r6
bne _ppctimer
stw r4,0(r3)
stw r5,4(r3)
blr
So, das wars eigentlich. Es folgt nur noch eine Liste moeglicher (aber absolut optionaler) Optimierungen:
- nichts bringt (zumindest nicht, wenn die beiden Tasks kommunizieren muessen), Wer sich dennoch nicht davor warnen lassen will, sei auf das AllocXMsg-System von WarpUP vermieden. Damit kann man (u.a.) so etwas machen.
|
|
|