Funktionsaufruf mit Variable in Assembler aus C



  • Hallo zusammen,

    ich arbeite mit einem PIC24h von Microchip, MATLAB IDE v8.00 und einem C30-Compiler. Das aber nur nebenbei.

    Ich möchte aus einem C-Programm eine Variable an eine Assembler-Routine weitergeben, die mit dieser Variablen wiederum eine vorimplementierte Routine aufruft. Inline assembling möchte ich ausschließen, ausser es geht wirklich nicht anders. Wenn Euch beim ersten drübergucken über den Code etwas direkt auffällt, wäre ich euch für Tips und Hinweise sehr dankbar. Ich habe leider noch nicht wirklich viel Erfahrung mit C und Assembler, ist also möglicherweise nur ein ganz dummer Fehler 😉

    header-Datei

    extern int asm_read_word (int);
    int PROG_ADDR;
    

    main.c

    PROG_ADDR=0xff//0xff ist nur ein Beispiel
    asm_read_word(PROG_ADDR);
    

    assembler

    .text
    .global _asm_read_word
    ;
    ;Read Word Mode
    ;
    	_asm_read_word:
    ;Set up the address pointer to program space
    	MOV #tblpage(#PROG_ADDR),W0 ; get table page value
    	MOV W0,TBLPAG ; load TBLPAG register
    	MOV #tbloffset(#PROG_ADDR),W0 ; load address LS word
    ; Read the program memory location
    	TBLRDH [W0],W3 ; Read high byte to W3
    	TBLRDL [W0],W4 ; Read low word to W4
    	return
    .end
    

    der Aufruf #tblpage() und #tbloffset() ist vordefiniert.


Anmelden zum Antworten