Hi,

don't know if this is SDCC related but I might as well as ask here:

my code looks like:


void usbcdc_putchar(char c)wparam
{
        while (ep2_i.STAT & UOWN) {
        }
        cdc_tx_buffer[tx_len++]=c;
        if (tx_len>=sizeof(cdc_tx_buffer)) {
                usbcdc_write();
        }
}

calling usbcdc_putchar() hangs on the first call, but
if I change the code to:

void wait2() {
        while (ep2_i.STAT & UOWN) {
        }

}

void usbcdc_putchar(char c)wparam
{
        wait2();
        cdc_tx_buffer[tx_len++]=c;
        if (tx_len>=sizeof(cdc_tx_buffer)) {
                usbcdc_write();
        }
}

then it works like a charm.

The compiled code looks ok, see below, so any ideas what could be the problem?

br Kusti



this does not work:

0000           01711 _usbcdc_putchar:
               01712 ;       .line   193; usbcdc.c   void usbcdc_putchar(char 
c)wparam
0000 CFD9 FFE5 01713         MOVFF   FSR2L, POSTDEC1
0004 CFE1 FFD9 01714         MOVFF   FSR1L, FSR2L
0008 C000 FFE5 01715         MOVFF   r0x00, POSTDEC1
000C C000 FFE5 01716         MOVFF   r0x01, POSTDEC1
0010 C000 FFE5 01717         MOVFF   r0x02, POSTDEC1
0014 6E00      01718         MOVWF   r0x00
0016           01719 _00128_DS_:
0016 0000      01720         BANKSEL _ep2_i
               01721 ;       .line   195; usbcdc.c   while (ep2_i.STAT & UOWN) {
0018 BF00      01722         BTFSC   _ep2_i, 7, B
001A D000      01723         BRA     _00128_DS_
               01724 ;       .line   198; usbcdc.c   cdc_tx_buffer[tx_len++]=c;
001C C000 F000 01725         MOVFF   _tx_len, r0x01
0020 2B00      01726         INCF    _tx_len, F, B
0022 6A00      01727         CLRF    r0x02
0024 0E00      01728         MOVLW   LOW(_cdc_tx_buffer)


this works:

0000           01749 _wait2:
               01750 ;       .line   186; usbcdc.c   void wait2() {
0000 CFD9 FFE5 01751         MOVFF   FSR2L, POSTDEC1
0004 CFE1 FFD9 01752         MOVFF   FSR1L, FSR2L
0008           01753 _00117_DS_:
0008 0000      01754         BANKSEL _ep2_i
               01755 ;       .line   187; usbcdc.c   while (ep2_i.STAT & UOWN) {
000A BF00      01756         BTFSC   _ep2_i, 7, B
000C D000      01757         BRA     _00117_DS_
000E CFE4 FFD9 01758         MOVFF   PREINC1, FSR2L
0012 0012      01759         RETURN  

0000           01711 _usbcdc_putchar:
               01712 ;       .line   193; usbcdc.c   void usbcdc_putchar(char 
c)wparam
0000 CFD9 FFE5 01713         MOVFF   FSR2L, POSTDEC1
0004 CFE1 FFD9 01714         MOVFF   FSR1L, FSR2L
0008 C000 FFE5 01715         MOVFF   r0x00, POSTDEC1
000C C000 FFE5 01716         MOVFF   r0x01, POSTDEC1
0010 C000 FFE5 01717         MOVFF   r0x02, POSTDEC1
0014 6E00      01718         MOVWF   r0x00
               01719 ;       .line   197; usbcdc.c   wait2();
0016 EC00 F000 01720         CALL    _wait2
               01721 ;       .line   198; usbcdc.c   cdc_tx_buffer[tx_len++]=c;
001A C000 F000 01722         MOVFF   _tx_len, r0x01
001E 0000      01723         BANKSEL _tx_len
0020 2B00      01724         INCF    _tx_len, F, B
0022 6A00      01725         CLRF    r0x02
0024 0E00      01726         MOVLW   LOW(_cdc_tx_buffer)
0026 2600      01727         ADDWF   r0x01, F
0028 0E00      01728         MOVLW   HIGH(_cdc_tx_buffer)
gpasm-0.13.6 beta               ../obj/usbcdc.asm2-26-2010  23:30:55          
PAGE 33


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE
 
002A 2200      01729         ADDWFC  r0x02, F
002C C000 FFE9 01730         MOVFF   r0x01, FSR0L
0030 C000 FFEA 01731         MOVFF   r0x02, FSR0H
0034 C000 FFEF 01732         MOVFF   r0x00, INDF0
               01733 ;       .line   199; usbcdc.c   if 
(tx_len>=sizeof(cdc_tx_buffer)) {
0038 0E20      01734         MOVLW   0x20

------------------------------------------------------------------------------
Download Intel® Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Sdcc-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/sdcc-user

Reply via email to