I examined the compiled code, and I found a big problem in it. That is
caused by the assembly parts of the wait function.
Here we are:

    clrwdt
    movlw       0x42
    movwf       0
    decfsz      0, f
    goto        0x102
    nop

If you are using pointers the compiler will use the FSR register for
it. In your code you are using the 0x00 reg which is the INDF reg. The
FSR is pointed of the last used register which should be actually the
(*s). That register will be used trough INDF in your delay routine. So
that cause the problem.
It is unusual to make cblock into inline assembly. You have to make a
global variable for using this type of delay routine. You have to use
BANKSEL also.

For example:

unsigned char d1;

void wait(long time)
{
        for(i=0;i<time;i++)
        {
                __asm
                                clrwdt
                                movlw   0x42
                                BANKSEL _d1
                                movwf   _d1
                                decfsz  _d1, f
                                goto    $-1
                                nop
                __endasm;
        }
}

Inline assembly could cause lot of problem.

Zsolt



2011/11/7 Gál Zsolt <tralitove...@freemail.hu>:
> Hello Jason an KHMan,
>
> I would like to ask You, which version of SDCC are used to translate
> this program and please send the command line used for compiling it.
>
> Zsolt
>



-- 
~~~~~~~~~~~~~~~~
http://galzsolt.zzl.org

------------------------------------------------------------------------------
RSA(R) Conference 2012
Save $700 by Nov 18
Register now
http://p.sf.net/sfu/rsa-sfdev2dev1
_______________________________________________
Sdcc-user mailing list
Sdcc-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sdcc-user

Reply via email to