Hello,

I'm using the mspgcc tool chain on a SuSE Linux 9.2 built as described in the 
documentation. I'm able to compile load and run programs but using the 
debugger does not work as expected. I' using

GNU gdb 5.1.1
Copyright 2002 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "--host=i686-pc-linux-gnu --target=msp430".

I compiled and linked the following program:

#include "io.h"

typedef struct {
    uint16_t lo;
    uint16_t hi;
    double slope;
    uint16_t pDeepestStop;
} GradientFactor;

static GradientFactor gf;

void GradientFactor_init(uint16_t lo, uint16_t hi);

void GradientFactor_reset(void);

void GradientFactor_init(uint16_t lo, uint16_t hi) {
    gf.lo = lo;
    gf.hi = hi;
    GradientFactor_reset();
}

void GradientFactor_reset() {
    gf.pDeepestStop = 0;
    gf.slope = 0.0;
}

int main(int argc, char **argv) {
    /* Disable watchdog during initialization */
    WDTCTL = WDTPW|WDTHOLD;

    /* Make all pins to I/O pins */
    P1SEL = 0;
    P2SEL = 0;
    P3SEL = 0;
    P4SEL = 0;
    P5SEL = 0;
    P6SEL = 0;

    /* Set all pins to low */
    P1OUT = 0;
    P2OUT = 0;
    P3OUT = 0;
    P4OUT = 0;
    P5OUT = 0;
    P6OUT = 0;

    /* Make all pins to output pins */
    P1DIR = 0xff;
    P2DIR = 0xff;
    P3DIR = 0xff;
    P4DIR = 0xff;
    P5DIR = 0xff;
    P6DIR = 0xff;

    /* Disable interrupts from port 1 */
    P1IES = 0;
    P1IE  = 0;

    /* Disable interrupts from port 2 */
    P2IES = 0;
    P2IE  = 0;

    /* Set clockspeed */
    BCSCTL1 = RSEL2 | RSEL1 | RSEL0;
    DCOCTL  = DCO2 | DCO1 | DCO0;

    GradientFactor_init((uint16_t)20, (uint16_t)70);

    return 0;
}

with:

/usr/local/msp430/bin/msp430-gcc -mmcu=msp430x149 
-I/usr/local/msp430/msp430/include -pedantic -Wall -Wstrict-prototypes 
-Winline -g -c simpletest.c-o simpletest.o

/usr/local/msp430/bin/msp430-gcc -mmcu=msp430x149 simpletest.o -o simpletest

This gives:

msp430-objdump -S simpletest

simpletest:     file format elf32-msp430

Disassembly of section .text:

00001100 <_reset_vector__>:
    1100:       b2 40 80 5a     mov     #23168, &0x0120 ;#0x5a80
    1104:       20 01
    1106:       3f 40 12 12     mov     #4626,  r15     ;#0x1212
    110a:       3e 40 00 02     mov     #512,   r14     ;#0x0200
    110e:       3d 40 00 02     mov     #512,   r13     ;#0x0200
    1112:       0d 9e           cmp     r14,    r13     ;
    1114:       05 24           jz      $+12            ;abs 0x1120
    1116:       fe 4f 00 00     mov.b   @r15+,  0(r14)  ;
    111a:       1e 53           inc     r14             ;
    111c:       0e 9d           cmp     r13,    r14     ;
    111e:       fb 2b           jnc     $-8             ;abs 0x1116
    1120:       3f 40 00 02     mov     #512,   r15     ;#0x0200
    1124:       3d 40 0a 02     mov     #522,   r13     ;#0x020a
    1128:       0d 9f           cmp     r15,    r13     ;
    112a:       05 24           jz      $+12            ;abs 0x1136
    112c:       cf 43 00 00     mov.b   #0,     0(r15)  ;r3 As==00
    1130:       1f 53           inc     r15             ;
    1132:       0f 9d           cmp     r13,    r15     ;
    1134:       fb 2b           jnc     $-8             ;abs 0x112c
    1136:       30 40 82 11     br      #0x1182         ;

0000113a <__ctors_end>:
    113a:       30 40 3e 11     br      #0x113e         ;

0000113e <_unexpected_>:
    113e:       00 13           reti

00001140 <GradientFactor_init>:
void GradientFactor_init(uint16_t lo, uint16_t hi);

void GradientFactor_reset(void);

void GradientFactor_init(uint16_t lo, uint16_t hi) {
    1140:       05 12           push    r5              ;
    1142:       04 12           push    r4              ;
    1144:       05 41           mov     r1,     r5      ;
    1146:       35 50 06 00     add     #6,     r5      ;#0x0006
    114a:       21 82           sub     #4,     r1      ;r2 As==10
    114c:       04 41           mov     r1,     r4      ;
    114e:       84 4f 00 00     mov     r15,    0(r4)   ;
    1152:       84 4e 02 00     mov     r14,    2(r4)   ;
    gf.lo = lo;
    1156:       a2 44 00 02     mov     @r4,    &0x0200 ;
    gf.hi = hi;
    115a:       92 44 02 00     mov     2(r4),  &0x0202 ;
    115e:       02 02
    GradientFactor_reset();
    1160:       b0 12 6c 11     call    #4460           ;#0x116c
}
    1164:       21 52           add     #4,     r1      ;r2 As==10
    1166:       34 41           pop     r4              ;
    1168:       35 41           pop     r5              ;
    116a:       30 41           ret

0000116c <GradientFactor_reset>:

void GradientFactor_reset() {
    116c:       05 12           push    r5              ;
    116e:       04 12           push    r4              ;
    gf.pDeepestStop = 0;
    1170:       82 43 08 02     mov     #0,     &0x0208 ;r3 As==00
    gf.slope = 0.0;
    1174:       82 43 04 02     mov     #0,     &0x0204 ;r3 As==00
    1178:       82 43 06 02     mov     #0,     &0x0206 ;r3 As==00
}
    117c:       34 41           pop     r4              ;
    117e:       35 41           pop     r5              ;
    1180:       30 41           ret

00001182 <main>:

int main(int argc, char **argv) {
    1182:       31 40 fc 09     mov     #2556,  r1      ;#0x09fc
    1186:       04 41           mov     r1,     r4      ;
    1188:       84 4f 00 00     mov     r15,    0(r4)   ;
    118c:       84 4e 02 00     mov     r14,    2(r4)   ;
    /* Disable watchdog during initialization */
    WDTCTL = WDTPW|WDTHOLD;
    1190:       b2 40 80 5a     mov     #23168, &0x0120 ;#0x5a80
    1194:       20 01

    /* Make all pins to I/O pins */
    P1SEL = 0;
    1196:       c2 43 26 00     mov.b   #0,     &0x0026 ;r3 As==00
    P2SEL = 0;
    119a:       c2 43 2e 00     mov.b   #0,     &0x002e ;r3 As==00
    P3SEL = 0;
    119e:       c2 43 1b 00     mov.b   #0,     &0x001b ;r3 As==00
    P4SEL = 0;
    11a2:       c2 43 1f 00     mov.b   #0,     &0x001f ;r3 As==00
    P5SEL = 0;
    11a6:       c2 43 33 00     mov.b   #0,     &0x0033 ;r3 As==00
    P6SEL = 0;
    11aa:       c2 43 37 00     mov.b   #0,     &0x0037 ;r3 As==00

    /* Set all pins to low */
    P1OUT = 0;
    11ae:       c2 43 21 00     mov.b   #0,     &0x0021 ;r3 As==00
    P2OUT = 0;
    11b2:       c2 43 29 00     mov.b   #0,     &0x0029 ;r3 As==00
    P3OUT = 0;
    11b6:       c2 43 19 00     mov.b   #0,     &0x0019 ;r3 As==00
    P4OUT = 0;
    11ba:       c2 43 1d 00     mov.b   #0,     &0x001d ;r3 As==00
    P5OUT = 0;
    11be:       c2 43 31 00     mov.b   #0,     &0x0031 ;r3 As==00
    P6OUT = 0;
    11c2:       c2 43 35 00     mov.b   #0,     &0x0035 ;r3 As==00

    /* Make all pins to output pins */
    P1DIR = 0xff;
    11c6:       f2 43 22 00     mov.b   #-1,    &0x0022 ;r3 As==11
    P2DIR = 0xff;
    11ca:       f2 43 2a 00     mov.b   #-1,    &0x002a ;r3 As==11
    P3DIR = 0xff;
    11ce:       f2 43 1a 00     mov.b   #-1,    &0x001a ;r3 As==11
    P4DIR = 0xff;
    11d2:       f2 43 1e 00     mov.b   #-1,    &0x001e ;r3 As==11
    P5DIR = 0xff;
    11d6:       f2 43 32 00     mov.b   #-1,    &0x0032 ;r3 As==11
    P6DIR = 0xff;
    11da:       f2 43 36 00     mov.b   #-1,    &0x0036 ;r3 As==11

    /* Disable interrupts from port 1 */
    P1IES = 0;
    11de:       c2 43 24 00     mov.b   #0,     &0x0024 ;r3 As==00
    P1IE  = 0;
    11e2:       c2 43 25 00     mov.b   #0,     &0x0025 ;r3 As==00

    /* Disable interrupts from port 2 */
    P2IES = 0;
    11e6:       c2 43 2c 00     mov.b   #0,     &0x002c ;r3 As==00
    P2IE  = 0;
    11ea:       c2 43 2d 00     mov.b   #0,     &0x002d ;r3 As==00

    /* Set clockspeed */
    BCSCTL1 = RSEL2 | RSEL1 | RSEL0;
    11ee:       f2 40 07 00     mov.b   #7,     &0x0057 ;#0x0007
    11f2:       57 00
    DCOCTL  = DCO2 | DCO1 | DCO0;
    11f4:       f2 40 e0 ff     mov.b   #-32,   &0x0056 ;#0xffe0
    11f8:       56 00

    GradientFactor_init((uint16_t)20, (uint16_t)70);
    11fa:       3e 40 46 00     mov     #70,    r14     ;#0x0046
    11fe:       3f 40 14 00     mov     #20,    r15     ;#0x0014
    1202:       b0 12 40 11     call    #4416           ;#0x1140

    return 0;
    1206:       0f 43           clr     r15             ;
}
    1208:       21 52           add     #4,     r1      ;r2 As==10
    120a:       30 40 0e 12     br      #0x120e         ;

0000120e <__stop_progExec__>:
    120e:       02 df           bis     r15,    r2      ;
    1210:       fe 3f           jmp     $-2             ;abs 0x120e
Disassembly of section .vectors:

0000ffe0 <InterruptVectors>:
    ffe0:       3a 11 3a 11 3a 11 3a 11 3a 11 3a 11 3a 11 3a 
11     :.:.:.:.:.:.:.:.
    fff0:       3a 11 3a 11 3a 11 3a 11 3a 11 3a 11 3a 11 00 
11     :.:.:.:.:.:.:...


When I set a breakpoint at the first statement of the function 
GradientFactor_init() the execution stops at this line. Using the command 
"info args" gives:

lo = 522
hi = 512

and not 20 and 70 as expected. Stepping two lines further and looking at gf 
with:

p gf
$1 = {lo = 20, hi = 70, slope = 0, pDeepestStop = 0}

shows the expected values.

I would be very happy if someone on this list could give me a hint what I'm 
doing wrong.

Regards,
Martin

Reply via email to