Hi Krish,
   Thank u for the detail!
   Actually I've konwn the three stages.
   What I want to konw is the anatomy of each stage.e.g,for compile stage,a
c source file need to pasing,generating icode etc,I want to konw that what's
the  Intermediate language of SDCC,does it generate a language like the RTL
of GCC?What is the difference between SDCC and GCC? The syntax tree,the
register allocation method and so on?
    The SDCC manual is too abbreviated to understand well.
    Could u give me a detail explanation?Or give me some detail materials?
    Much thanks!
    Donald


2011/3/23 Krishnendu Chatterjee <krishnendu.chatter...@gmail.com>

> C compiler works in three stages --- 1) compiler, 2) assembler and 3)
> linker.
>
> 1) Compiler: Takes C code and generates assembly code.
> 2) Assembler: Takes assembly code and generates machine specific binary
> code.
> 3) Linker: Combines binary codes and fills up all address references.
>
> SDCC and GCC are similar as far as this behaviour is concerned.
> However the final executable of SDCC runs on 8051 while that of GCC
> runs on x86 machine.
>
> Krish
>
> On Wed, Mar 23, 2011 at 11:43 AM, duck donal <tangtao87657...@gmail.com>
> wrote:
> > Hi,Krish
> >   Thank you so much for answering my questions detailedly!
> >   I‘ve got it.Thus next time I'll check the <****.h> file to find out the
> > specific register name of machine in SDCC.
> >   Now I really want to know what SDCC compile flow is.How a c code become
> to
> > be a assembly code,even the machine code?
> >   What is the differences between SDCC and GCC?
> > 2011/3/23 Krishnendu Chatterjee <krishnendu.chatter...@gmail.com>
> >>
> >> Hi Donald,
> >> I am trying to re-clarify the concept of __sfr and __sbit.
> >>
> >> The statement '__sfr __at 0x9A MY_SFR' means that a new SFR is
> >> declared at 0x9A which is identified by the name MY_SFR in this
> >> program.
> >>
> >> However, this does not mean that MY_SFR.0 or MY_SFR_0 can be used to
> >> access the 'bit 0' of MY_SFR. To access that you need __sbit provided
> >> that location is bit-addressable. 0x9A is not a bit-addressable. So
> >> you cannot access the individual bits of this SFR.
> >>
> >> To define a bit-addressable register, the address must end with 0 or
> >> 8. Thus I can define a bit addressable register at 0xC0. But still
> >> then I have to define each bit of that SFR explicitly. Look at the
> >> following code:
> >>
> >> __sfr __at 0xC0 MY_BITADDRESSABLE_SFR;
> >> __sbit __at 0xC0 MY_BITADDRESSABLE_SFR_0;
> >> __sbit __at 0xC1 MY_BITADDRESSABLE_SFR_1;
> >> __sbit __at 0xC2 MY_BITADDRESSABLE_SFR_2;
> >> __sbit __at 0xC3 MY_BITADDRESSABLE_SFR_3;
> >> __sbit __at 0xC4 MY_BITADDRESSABLE_SFR_4;
> >> __sbit __at 0xC5 MY_BITADDRESSABLE_SFR_5;
> >> __sbit __at 0xC6 MY_BITADDRESSABLE_SFR_6;
> >> __sbit __at 0xC7 MY_BITADDRESSABLE_SFR_7;
> >>
> >> Sometime the individual bits are given special name. Then the above
> >> code changes to:
> >> __sfr __at 0xC0 MY_BITADDRESSABLE_SFR
> >> __sbit __at 0xC0 SPECIAL_0
> >> __sbit __at 0xC1 SPECIAL_1
> >> __sbit __at 0xC2 SPECIAL_2
> >> __sbit __at 0xC3 SPECIAL_3
> >> __sbit __at 0xC4 SPECIAL_4
> >> __sbit __at 0xC5 SPECIAL_5
> >> __sbit __at 0xC6 SPECIAL_6
> >> __sbit __at 0xC7 SPECIAL_7
> >>
> >> If you include <8051.h>, it already defines most of the SFR and SBIT
> >> of 8051 architecture. So that you don't have to re-write them.
> >>
> >> As far as PSW_1 is concerned, it has a special name called 'F1'. How
> >> do I know this? Well:
> >>
> >> 1) Search PSW in 8051.h. The statement looks like '__sfr __at (0xD0)
> >> PSW' which means it is at a location 0xD0.
> >> 2) Search of '__sbit __at (0xD0)' and find the following lines:
> >> __sbit __at (0xD0) P
> >> __sbit __at (0xD1) F1
> >> __sbit __at (0xD2) OV
> >> __sbit __at (0xD3) RS0
> >> __sbit __at (0xD4) RS1
> >> __sbit __at (0xD5) F0
> >> __sbit __at (0xD6) AC
> >> __sbit __at (0xD7) CY
> >> So now I know PSW_0 is called P, PSW_1 is called F1, PSW_2 is called
> >> OV and so on. So to set the 5-th bit of PSW, use RS1 = 1. not PSW_4 =
> >> 1.
> >>
> >>
> >> The sfr and sbit keywords are SDCC specific. So it is a good practice
> >> to add '__' (underscore underscore) prefix with them, just like other
> >> SDCC keywords, e.g. __bit, __data, __idata, __code, __xdata,
> >> __critical, __reentrant etc. Omitting this, new versions of sdcc
> >> generate deprecation warnings.
> >>
> >> Cheers.
> >> Krish
> >>
> >>
> >>
> >> On Wed, Mar 23, 2011 at 8:04 AM, duck donal <tangtao87657...@gmail.com>
> >> wrote:
> >> > Hi roelof,
> >> >    Thanks for your help!
> >> >    I run what you modify code in my pc,It can be compiled
> successfully!
> >> >    However I have some questions to this code.
> >> >    1.What you use library files(p89lpc938.h) seems not the standard 51
> >> > library files.Does that mean I can subsitute this library for standard
> >> > 51 library?
> >> >
> >> >    2.You have no statements about P1_0/P1_7,Does that mean,the codes
> >> > which
> >> > have been compiled with SDCC don't need the statements of sfr or sbit?
> >> >    3.I've tried another simple code(newpp.c) as what you told me,but
> the
> >> > sdcc give me such a error:newpp.c:error 20:Undefined identifier
> 'PSW_1'
> >> >       the code as follow:
> >> >       #include <AT89X51.H>
> >> >        sfr f_wren=0xf1;
> >> >        sfr f_pp=0xf2;
> >> >        sfr f_wr_adrH=0xf3;
> >> >        sfr f_wr_adrM=0xf4;
> >> >        sfr f_wr_adrL=0xf5;
> >> >        sfr f_wr_dataH=0xf6;
> >> >        sfr f_wr_dataM1=0xf7;
> >> >        sfr f_wr_dataM2=0xf8;
> >> >        sfr f_wr_dataL=0xf9;
> >> >        sfr f_rw=0xfa;
> >> >        sfr f_work=0xfb;
> >> >        main()
> >> >        {
> >> >
> >> >        f_wren=0x06;
> >> >        f_pp=0x02;
> >> >        f_wr_adrH=0x00;
> >> >        f_wr_adrM=0x02;
> >> >        f_wr_adrL=0x00;
> >> >        f_wr_dataH=0x12;
> >> >        f_wr_dataM1=0x34;
> >> >        f_wr_dataM2=0x56;
> >> >        f_wr_dataL=0x78;
> >> >        f_rw=0x01;
> >> >        f_work=0x01;
> >> >        while(PSW_1==0)
> >> >           f_work=0x00;
> >> >        }o
> >> >       I use PSW.1 instead of PSW_1,the SDCC give me a syntax error:
> >> > token ->
> >> > '.1';column 11
> >> >       So,what should be done on this code?
> >> >       4.I'm interesting in the SDCC compile internal,but manual is not
> >> > very
> >> > detailed to the introduction of the internal
> >> >          so,could u give me some material,such as SDCC compile
> >> > flow,Whether
> >> > the SDCC have intermediate language,what is the difference between
> SDCC
> >> > with
> >> > GCC
> >> >
> >> >      Thanks!
> >> >       Donald
> >> > 2011/3/22 roelof 't Hooft <roel...@itholland.nl>
> >> >>
> >> >> On Tue, 2011-03-22 at 10:02 +0800, duck donal wrote:
> >> >> > Hi All,
> >> >> > I'm a newbie for sdcc.
> >> >> > A few days ago, I was in use of SDCC, ran into a problem.
> >> >>
> >> >> > So,what is the solutions?To modify the program?How to do it?
> >> >> > Or modify the sdcc?
> >> >>
> >> >> Hi Donald,
> >> >>
> >> >> Here is your example code back, I modified it a bit to
> >> >> have it succesfully compile with sdcc.
> >> >> As opposed to arm-elf-gcc sdcc does not need or use the
> >> >> return at the end of a program, embedded programs usually
> >> >> never return and stay in a while(1) loop forever :-)
> >> >>
> >> >> #include <p89lpc938.h>
> >> >>
> >> >> void main(void)
> >> >> {
> >> >>        unsigned char j;
> >> >>        unsigned int i;
> >> >>
> >> >>        while(1)
> >> >>        {
> >> >>                P1_7 = 1;
> >> >>                while(P1_7 == 0)
> >> >>                {
> >> >>                        for(i = 1; i <= 500; i++)
> >> >>                        {
> >> >>                                P1_0 = !P1_0;
> >> >>                                for(j = 0; j <= 50; j++)
> >> >>                                {
> >> >>                                }
> >> >>                        }
> >> >>                        for(i = 1; i <= 250; i++)
> >> >>                        {
> >> >>                                P1_0 = !P1_0;
> >> >>                                for(j = 0; j <= 100; j++)
> >> >>                                {
> >> >>                                }
> >> >>                        }
> >> >>                }
> >> >>        }
> >> >> }
> >> >>
> >> >> roelofh@baywatch:~/tangtao$ sdcc tang.c
> >> >> roelofh@baywatch:~/tangtao$ ll
> >> >> total 196
> >> >> -rw-r--r-- 1 roelofh domainusers 13302 2011-03-22 10:48 tang.asm
> >> >> -rw-r--r-- 1 roelofh domainusers   333 2011-03-22 10:48 tang.c
> >> >> -rw-r--r-- 1 roelofh domainusers   620 2011-03-22 10:48 tang.ihx
> >> >> -rw-r--r-- 1 roelofh domainusers   215 2011-03-22 10:48 tang.lnk
> >> >> -rw-r--r-- 1 roelofh domainusers 35446 2011-03-22 10:48 tang.lst
> >> >> -rw-r--r-- 1 roelofh domainusers 34876 2011-03-22 10:48 tang.map
> >> >> -rw-r--r-- 1 roelofh domainusers  1129 2011-03-22 10:48 tang.mem
> >> >> -rw-r--r-- 1 roelofh domainusers  6201 2011-03-22 10:48 tang.rel
> >> >> -rw-r--r-- 1 roelofh domainusers 35446 2011-03-22 10:48 tang.rst
> >> >> -rw-r--r-- 1 roelofh domainusers 47706 2011-03-22 10:48 tang.sym
> >> >> roelofh@baywatch:~/tangtao$ sdcc -v
> >> >> SDCC : mcs51 3.0.1 #6066 (23 Nov 2010) (Linux)
> >> >>
> >> >> You will find the header files in
> /usr/local/share/sdcc/include/mcs51/
> >> >> Please have a look at them and include the one you need for your
> >> >> processor. I have included a random one for example.
> >> >>
> >> >> roelof
> >> >>
> >> >>
> >> >>
> >> >>
> >> >>
> >> >>
> ------------------------------------------------------------------------------
> >> >> Enable your software for Intel(R) Active Management Technology to
> meet
> >> >> the
> >> >> growing manageability and security demands of your customers.
> >> >> Businesses
> >> >> are taking advantage of Intel(R) vPro (TM) technology - will your
> >> >> software
> >> >> be a part of the solution? Download the Intel(R) Manageability
> Checker
> >> >> today! http://p.sf.net/sfu/intel-dev2devmar
> >> >> _______________________________________________
> >> >> Sdcc-user mailing list
> >> >> Sdcc-user@lists.sourceforge.net
> >> >> https://lists.sourceforge.net/lists/listinfo/sdcc-user
> >> >
> >> >
> >> >
> >> >
> ------------------------------------------------------------------------------
> >> > Enable your software for Intel(R) Active Management Technology to meet
> >> > the
> >> > growing manageability and security demands of your customers.
> Businesses
> >> > are taking advantage of Intel(R) vPro (TM) technology - will your
> >> > software
> >> > be a part of the solution? Download the Intel(R) Manageability Checker
> >> > today! http://p.sf.net/sfu/intel-dev2devmar
> >> > _______________________________________________
> >> > Sdcc-user mailing list
> >> > Sdcc-user@lists.sourceforge.net
> >> > https://lists.sourceforge.net/lists/listinfo/sdcc-user
> >> >
> >> >
> >>
> >>
> >>
> ------------------------------------------------------------------------------
> >> Enable your software for Intel(R) Active Management Technology to meet
> the
> >> growing manageability and security demands of your customers. Businesses
> >> are taking advantage of Intel(R) vPro (TM) technology - will your
> software
> >> be a part of the solution? Download the Intel(R) Manageability Checker
> >> today! http://p.sf.net/sfu/intel-dev2devmar
> >> _______________________________________________
> >> Sdcc-user mailing list
> >> Sdcc-user@lists.sourceforge.net
> >> https://lists.sourceforge.net/lists/listinfo/sdcc-user
> >
> >
> >
> ------------------------------------------------------------------------------
> > Enable your software for Intel(R) Active Management Technology to meet
> the
> > growing manageability and security demands of your customers. Businesses
> > are taking advantage of Intel(R) vPro (TM) technology - will your
> software
> > be a part of the solution? Download the Intel(R) Manageability Checker
> > today! http://p.sf.net/sfu/intel-dev2devmar
> > _______________________________________________
> > Sdcc-user mailing list
> > Sdcc-user@lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/sdcc-user
> >
> >
>
>
> ------------------------------------------------------------------------------
> Enable your software for Intel(R) Active Management Technology to meet the
> growing manageability and security demands of your customers. Businesses
> are taking advantage of Intel(R) vPro (TM) technology - will your software
> be a part of the solution? Download the Intel(R) Manageability Checker
> today! http://p.sf.net/sfu/intel-dev2devmar
> _______________________________________________
> Sdcc-user mailing list
> Sdcc-user@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/sdcc-user
>
------------------------------------------------------------------------------
Enable your software for Intel(R) Active Management Technology to meet the
growing manageability and security demands of your customers. Businesses
are taking advantage of Intel(R) vPro (TM) technology - will your software 
be a part of the solution? Download the Intel(R) Manageability Checker 
today! http://p.sf.net/sfu/intel-dev2devmar
_______________________________________________
Sdcc-user mailing list
Sdcc-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sdcc-user

Reply via email to