Hi! ich haben folgenden Code, der mit dem MSPGCC auch kompiliert, allerdings finde ich nicht ganz sauber was er macht (das ret am Ende ohne return() im C-Code). Am liebsten wäre es mir, wenn ich eine saubere return() Funktion mit Variable haben würde und er dann zurückkehrt. Ein weiterer Fehler ist, dass der GCC meckert wegen multiline-Assembler. Leider habe ich noch nicht gefunden, wie man sowas umschreibt? Vor jede Zeile ein asm? Danke für Eure Antworten Benjamin CODE: ____________________________________________________ /********************************************* * function mul16: * ------------------------------------------- * return: int32_t * ------------------------------------------- 16bit Multiplikation * 16x16=>32 * * Hinweis: der Compiler legt das Ergebnis in * * Register R9 und R10 ab. danach wird * * zurückgesprungen. Der Rücksprungcode vom * * gcc wird nicht erreicht, aber es gibt eine * Compilerwarnung *********************************************/ int32_t mul16(register int16_t x, register int16_t y) { __asm("mul16: push r9 clr r13 mov r13,r15 mov r13,r9 tst r12 jge xbooth_2 mov #-1,r9 jmp xbooth_2 xbooth_6: add r12,r15 addc r9,r13 xbooth_1: rla r12 rlc r9 xbooth_2: rra r14 jc xbooth_5 jne xbooth_1 jmp xbooth_4 xbooth_5: sub r12,r15 subc r9,r13 xbooth_3: rla r12 rlc r9 rra r14 jnc xbooth_6 cmp #0xFFFF,r14 jne xbooth_3 xbooth_4: mov r15,r12 pop r9 ret "); }
Dann musst du dich mehr mit dem inline Assembler befassen. Es gibt am Ende des asm-Statements drei Bereiche, in denen Zuordnungen zu Input, Output gemacht werden und wo bekannt gegeben wird, welche Register, Speicherbereiche etc. durch den Assemblerteil verschmutzt werden. Tutorials gibt es auch etliche, allgemein in der GCC Beschreibung und speziell für MSP430 z.B. http://mspgcc.sourceforge.net/manual/c1308.html
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.