Hi,

Whilst trying to do some assembly-only coding I ran into an (probably PEBKAC)
issue. I have this simple file called foo.S:

-----8<-----
#include <msp430.h>

;------------------------------------------------------------------------------
;   Main Code
;------------------------------------------------------------------------------

            .text                           ; program start
            .global _main                   ; define entry point

_main:       mov.w   #0280h,SP               ; initialize stack pointer
            mov.w   #WDTPW|WDTHOLD,&WDTCTL  ; stop watchdog timer

            bis.b   #01000001b,&P1DIR       ; make P1.0 and P1.6 output
                                            ; all others are inputs by default

Mainloop:    bit.b   #00001000b,&P1IN        ; read switch at P1.3
            jc      Off                     ; if P1.3 open branch to Off label
                                            
On:          bic.b   #00000001b,&P1OUT       ; clear P1.0 (red off)
            bis.b   #01000000b,&P1OUT       ; set P1.6 (green on)
            jmp     Wait                    ; branch to a delay routine

Off:         bis.b   #00000001b,&P1OUT       ; set P1.0 (red on)
            bic.b   #01000000b,&P1OUT       ; clear P1.6 (green off)
            
Wait:        mov.w   #1834,R15               ; load R15 with value for delay
L1:          dec.w   R15                     ; decrement R15
            jnz     L1                      ; if R15 is not zero jump to L1
            jmp     Mainloop                ; jump to the Mainloop label
                                            
;------------------------------------------------------------------------------
;   Interrupt Vectors
;------------------------------------------------------------------------------
            .sect   ".reset"                ; MSP430 RESET Vector
            .short  _main                  

            .end
-----8<-----

Afaics this code is correct, though gcc disagrees:
$ msp430-gcc -g -Os -mmcu=msp430g2213 cstack.S -o cstack.o
cstack.S: Assembler messages:
cstack.S:13: Error: backward ref to unknown label "262145:"
cstack.S:16: Error: backward ref to unknown label "512:"
cstack.S:19: Error: backward ref to unknown label "1:"
cstack.S:20: Error: backward ref to unknown label "262144:"
cstack.S:23: Error: backward ref to unknown label "1:"
cstack.S:24: Error: backward ref to unknown label "262144:"
$

Anyone with a cluebat?

Also, is the explicit stack pointer initialization needed with gcc or will it
do this automagically?

-- 
Cheers,
Jasper

"Capable, generous men do not create victims, they nurture them."

------------------------------------------------------------------------------
All of the data generated in your IT infrastructure is seriously valuable.
Why? It contains a definitive record of application performance, security
threats, fraudulent activity, and more. Splunk takes this data and makes
sense of it. IT sense. And common sense.
http://p.sf.net/sfu/splunk-d2dcopy2
_______________________________________________
Mspgcc-users mailing list
Mspgcc-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mspgcc-users

Reply via email to