Hi Bastian,

did you compare generated ASM code for 452 and 4520 ? Are there some 
differences ?

V.

> Hi,
> 
> Little follow-up on my own post.
> Tried the same code on the 18f452 (with some small changes to the config to 
> make it run). Thistime using SDCC 2.7.0, as the 2.8 snapshot i was using 
> complained about missing _usart functions.
> 
> It runs as it should. Compiling the code for the 18f4520 using SDCC 2.7.0 
> still doesn't work.
> 
> Any ideas?
> 
> Thanks,
> -Bastiaan van Kesteren
> 
> On Monday 13 October 2008 14:39:19 Bastiaan van Kesteren wrote:
> > Hi,
> >
> > I'm working on a project using the 18f4520, and i've ran into a problem. It
> > seems that passing an array to a function results in garbage being read in
> > the receiving function.
> >
> > It seems as if the receiving function is using the wrong address to read
> > from! I've fiddled with the stack, but this didn't seem to influence the
> > problem. I'm now using the latest SDCC snapshot (2.8.4 #5250 (Oct 12 2008))
> > and gputils 0.13.6 on Linux. Tried SDCC 2.8.0 with similair results (the
> > garbage output was different, but still garbage..) Also tried to build this
> > on windows XP on another machine, using the same SDCC snapshot and gputils
> > version. No change there.
> >
> > Some code demonstrating this issue is attached below. I've compiled this
> > using
> >
> >     sdcc -mpic16 -p18f4520 main.c
> >
> > and loading the resulting main.hex file using and ICD2 programmer from
> > MPLAB (on the Windows XP machine).
> >
> > Output on the uart @ 19200 baud should be "[????]", but I get "[??"
> > followed by a lot of garbage
> >
> > Hope anyone can give me some pointers here!
> >
> > Thanks in advance,
> > -Bastiaan van Kesteren
> >
> > --------------the code:--------------
> >
> > #include <pic18fregs.h>
> > #include <usart.h>
> > #include <stdio.h>
> >
> > /* Initialise a stack of 255 bytes at RAM address 0x300 */
> > #pragma stack 0x300 0xFF
> >
> > /* Baudrate = FOSC/(16(X+1)): 25 = 19200 @ 8MHz */
> > #define BAUDRATE    25
> >
> > /* Oscillator */
> > code char at __CONFIG1H _conf0 = _OSC_INTIO67_1H;
> >
> > /* Watchdog */
> > code char at __CONFIG2H _conf2 = _WDT_OFF_2H;
> >
> > /* Power up timeout and brown out detection enabled */
> > code char at __CONFIG2L _conf1 = _PWRT_ON_2L & _BOREN_ON_2L;
> > /* MCLR settings */
> > code char at __CONFIG3H _conf3 = _MCLRE_OFF_3H;
> > /* Low voltage programming disabled, Stack Overflow Reset enabled */
> > code char at __CONFIG4L _conf4 = _LVP_OFF_4L & _STVREN_ON_4L;
> > /* Code protection disabled */
> > code char at __CONFIG5L _conf5 = _CP0_OFF_5L & _CP1_OFF_5L & _CP2_OFF_5L &
> > _CP3_OFF_5L; /* EEPROM read protection disabled, code protection boot
> > disabled */ code char at __CONFIG5H _conf6 = _CPD_OFF_5H & _CPB_OFF_5H;
> > /* Table write protection disabled */
> > code char at __CONFIG6L _conf7 = _WRT0_OFF_6L & _WRT1_OFF_6L & _WRT2_OFF_6L
> > & _WRT3_OFF_6L; /* EEPROM write protection disabled, table write protect
> > boot disabled, config write protect disabled */ code char at __CONFIG6H
> > _conf8 = _WRTD_OFF_6H & _WRTB_OFF_6H & _WRTC_OFF_6H; /* Table read protect
> > disabled */
> > code char at __CONFIG7L _conf9 = _EBTR0_OFF_7L & _EBTR1_OFF_7L &
> > _EBTR2_OFF_7L & _EBTR3_OFF_7L; /* Table read protect boot disabled */
> > code char at __CONFIG7H _conf10 = _EBTRB_OFF_7H;
> >
> > void serial_init()
> > {
> >     // BAUDCON - baudrate generation control Register
> >     BAUDCON = 0;  // 8 bit baudrate generator, auto-baud disabled
> >
> >     // SPBRG - Baud Rate Generator Register
> >     SPBRG = BAUDRATE;
> >
> >     // BRGH - High Baud Rate Select Bit
> >     TXSTAbits.BRGH = 1; // (1 = high speed)
> >
> >     // SYNC - USART Mode select Bit
> >     TXSTAbits.SYNC = 0; // (0 = asynchronous)
> >
> >     // TRISC - Tri-state Data Direction Register for port C
> >     // RC6 - 6th pin of port C - used for Serial Transmit
> >     // RC7 - 7th pin of port C - used for Serial Receive
> >     TRISCbits.TRISC6 = 0; // (0 = pin set as output)
> >     TRISCbits.TRISC7 = 1; // (1 = pin set as input)
> >
> >     // SPEN - Serial Port Enable Bit
> >     RCSTAbits.SPEN = 1; // (1 = serial port enabled)
> >
> >     // TXIE - USART Transmit Interupt Enable Bit
> >     PIE1bits.TXIE = 0; // (0 = disabled)
> >
> >     // RCIE - USART Receive Interupt Enable Bit
> >     PIE1bits.RCIE = 1; // (1 = enabled)
> >
> >     // TX9 - 9-bit Transmit Enable Bit
> >     TXSTAbits.TX9 = 0; // (0 = 8-bit transmit)
> >
> >     // RX9 - 9-bit Receive Enable Bit
> >     RCSTAbits.RX9 = 0; // (0 = 8-bit reception)
> >
> >     // CREN - Continuous Receive Enable Bit
> >     RCSTAbits.CREN = 1; // (1 = Enables receiver)
> >
> >     // TXEN - Trasmit Enable Bit
> >     TXSTAbits.TXEN = 1; // (1 = transmit enabled)
> >
> >     stdout = STREAM_USER;
> > }
> >
> > void init()
> > {
> >     /* Internal oscillator @ 8MHz */
> >     OSCCON &= 0x8F;
> >     OSCCON |= 0x70;
> >
> >     /* Disable watchdog */
> >     WDTCONbits.SWDTEN = 0;
> > }
> >
> > void test_puts(data char *str)
> > {
> >     usart_putc(str[0]);
> >     while( usart_busy() );
> > }
> >
> > void main(void)
> > /*
> >   The main function:
> >   Initialises the system, and starts all interrupt based tasks.
> > */
> > {
> >     char tekst[2];
> >     tekst[0]='?';
> >     tekst[1]=0;
> >
> >     init();
> >
> >     serial_init();
> >
> >     while(1) {
> >         usart_putc('[');
> >         while( usart_busy() );
> >
> >         /* (1): Send single character; works */
> >         usart_putc('?');
> >         while( usart_busy() );
> >
> >         /* (2): Send characters from array; works */
> >         usart_putc(tekst[0]);
> >         while( usart_busy() );
> >
> >         /* (3): Pass array to function, which sends them as (2) does; not
> > working, sending garbage */ test_puts(tekst);
> >         while( usart_busy() );
> >
> >         /* (4): send string using the library-functions; not working,
> > infinite loop */ usart_puts("?");
> >         while( usart_busy() );
> >
> >         usart_putc(']');
> >         while( usart_busy() );
> >     }
> > }
> >
> >
> > -------------------------------------------------------------------------
> > This SF.Net email is sponsored by the Moblin Your Move Developer's
> > challenge Build the coolest Linux based applications with Moblin SDK & win
> > great prizes Grand prize is a trip for two to an Open Source event anywhere
> > in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/
> > _______________________________________________
> > Sdcc-user mailing list
> > Sdcc-user@lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/sdcc-user
> 
> 
> -------------------------------------------------------------------------
> This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
> Build the coolest Linux based applications with Moblin SDK & win great prizes
> Grand prize is a trip for two to an Open Source event anywhere in the world
> http://moblin-contest.org/redirect.php?banner_id=100&url=/
> _______________________________________________
> Sdcc-user mailing list
> Sdcc-user@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/sdcc-user
> 
> 
> 

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Sdcc-user mailing list
Sdcc-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sdcc-user

Reply via email to