Ok, I'm starting a new thread because that last bug/whatever was getting
lost in the discussion about the DADD high byte conversation.

I found something weird.  If I have the following:
interrupt (BASICTIMER_VECTOR) wakeup BasicTimerIRQ(void)
{
    total = total + 25;
    1378:       b2 50 19 00 04 02       add     #25,    &0x0204 ;#0x0019
    137e:       82 63 06 02             adc     &0x0206         ;
    __asm__( "dadd  %A1, %A0\n\t"
    1382:       b2 a0 19 00 00 02       dadd    #25,    &0x0200 ;#0x0019
    1388:       82 a3 02 02             dadc    &0x0202         ;
             "dadd  %B1, %B0" : "=rm" (total) : "i" (25));
    __asm__("\tDADD %1, %0": "=rm" (total) : "n" (25) );
    138c:       b2 a0 19 00 00 02       dadd    #25,    &0x0200 ;#0x0019
    __asm__("\tDADC %0": "=rm" (*((&total)+1) ) );
    1392:       82 a3 04 02             dadc    &0x0204         ;
    _BIC_SR_IRQ(LPM3_bits);
    1396:       b1 c0 d0 00 00 00       bic     #208,   0(r1)   ;#0x00d0
    //P1OUT=~P1OUT;        //invert port 1
}
    139c:       00 13                   reti    

Notice the first assignment is referencing the incorrect RAM location of
204 and 206.  This is curious.  However, if I remove the last ASM
statement, it works fine:
interrupt (BASICTIMER_VECTOR) wakeup BasicTimerIRQ(void)
{

    total = total + 25;
    1378:       b2 50 19 00 00 02       add     #25,    &0x0200 ;#0x0019
    137e:       82 63 02 02             adc     &0x0202         ;
    __asm__( "dadd  %A1, %A0\n\t"
    1382:       b2 a0 19 00 00 02       dadd    #25,    &0x0200 ;#0x0019
    1388:       82 a3 02 02             dadc    &0x0202         ;
             "dadd  %B1, %B0" : "=rm" (total) : "i" (25));
    __asm__("\tDADD %1, %0": "=rm" (total) : "n" (25) );
    138c:       b2 a0 19 00 00 02       dadd    #25,    &0x0200 ;#0x0019
    //__asm__("\tDADC %0": "=rm" (*((&total)+1) ) );
    _BIC_SR_IRQ(LPM3_bits);
    1392:       b1 c0 d0 00 00 00       bic     #208,   0(r1)   ;#0x00d0
    //P1OUT=~P1OUT;        //invert port 1
}
    1398:       00 13                   reti    

Any ideas? Apparently, "(*((&total)+1) )" is somehow affecting the use
of "total" in the first assignment??!  Again, a quick check of the
"main" function, and "total" is being referenced at 0x0200 (which is
where it is).

-Mark


Reply via email to