Ich habe mich kurz über den Unterschied zwischen bra und goto bei
PIC12/18 und PIC24 informiert und bin zu einem Ergebnis und einer Frage
gekommen:
Ich kann hier goto und bra verwenden, es passiert immer das gleiche.
PIC24:
1 | wait:
|
2 | btss flags, #0
|
3 | bra/goto wait
|
4 | bclr flags, #0
|
PIC12:
1 | loop:
|
2 | btfss OSCSTAT,PLLR ;Wait until PLL is ready
|
3 | bra/goto loop
|
GOTO ist ein Absoluter Sprung und BRA ein relativer.
Der Assembler macht das daraus:
PIC12/18:
1 | bra loop --> BRA 0x1fe
|
2 | goto loop --> GOTO 0x19
|
In der Beschreibung steht:
>Syntax: [ label ] BRA label
> [ label ] BRA $+k
>Operands: -256 <= label - PC + 1 <= 255
> -256 <= k <= 255
PIC24:
1 | bra wait --> bra 0x00025e
|
2 | goto wait --> goto 0x00025e
|
In der Beschreibung steht:
>Syntax: {label:} BRA Expr
>Operands: Expr may be a label, absolute address or expression.
>Expr is resolved by the linker to a Slit16, where
>Slit16 ∈ [-32768 ... +32767].
Beim 8bit µC macht Assembler aus dem Label automatisch die relative
Adresse und beim PIC24 macht das erst der linke.
Also ist bra und goto für mich das gleiche, wenn ich mich um weniger als
±255 / ±32767 bewege und beim PIC12 keine ROM-Page überschreite und
Labels verwende? Oder habe ich irgendetwas übersehen?