Forum: Compiler & IDEs rückgabewertbeanstandung im asmprogramm


von karlheinz (Gast)


Lesenswert?

ich bekomme folgende fehlermeldung:

softuart_asm.S: Assembler messages:
softuart_asm.S:53: Error: constant value required
softuart_asm.S:63: Error: constant value required

dieser befehl wird beanstandet:  sts wert_1,zl
wie schreibt man den in winavr-c?



ausschnitt hauptprogramm:

volatile uint8_t wert_1;
extern void soft_uart_empf(void);


programm uart.S :

#include <avr/io.h>

.global soft_uart_empf
.func   soft_uart_empf

soft_uart_empf:
  __Com1I:
    ldi  r24,0x09
    rcall  __Wtic_1
  __C1I2:
    rcall  __Wtic_1
    clc
    ldi     r16,4
    out     _SFR_IO_ADDR(PORTD), r16
    sec
    dec  r24
    breq  __ende_1
    ror  zl
    rjmp  __C1I2


  __Wtic_1:
    dec     r23
    brne   __Wtic_1
    ret

  __ende_1:
    sts  wert_1,zl
    ret
.endfunc
.end

mfg karlheinz

von karlheinz (Gast)


Lesenswert?

nachbrenner:

ror zl

wird auch beanstandet.
er nimmt den code zl nicht, was kann man dafür nehmen?

von Andreas (Gast)


Lesenswert?

Hallo,

kann es sein, dass im Assemblerprogramm das hier fehlt:

.extern wert_1 ?

Ansonsten würde ich mal probieren im Assembelerprogramm

.comm wert_1,1

und im Hauptprogramm das als extern zu deklarieren.


Grüße
Andreas

von peter dannegger (Gast)


Lesenswert?

Ich tippe mal, das zl ist nirgends definiert.


Peter

von Simon K. (simon) Benutzerseite


Lesenswert?

wenn damit der ZL (ZPointer Lowbyte) gemeint ist:

Man kann ROR und STS nur mit den Universal-Registern als Parameter
benutzen (bei STS der hintere Parameter)..

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
Noch kein Account? Hier anmelden.