8051 linker problem?

2009-08-26
2013-03-12
  • Brandon Fosdick

    Brandon Fosdick - 2009-08-26

    I'm trying to build a simple LED blinking program for an 8051 based project. I made a small crtstart.asm that looks like...

    ---
        .area GSINIT0 (CODE)
    __sdcc_gsinit_startup::
        mov sp,#__start__stack - 1

        .area GSINIT2 (CODE)
    __sdcc_init_data:
    ---

    and main.c is...

    ---
    #include <stdint.h>
    #include <8051.h>

    void main()
    {
        uint16_t    i;
        P0 = 0;
        P0DIR = 0;

        while(1)
        {
        P0 ^= 0xFF;
        for(i=0; i<0xFF00; ++i);
        }
    }
    ---

    If I build like this...

    sdcc --no-xinit-opt --main-return --iram-size 0x80 --std-c99 crtstart.rel main.c

    ...I get a properly flashing LED. However, if I do this...

    sdcc -c --no-xinit-opt --main-return --iram-size 0x80 --std-c99 main.c
    sdcc --no-xinit-opt --main-return --iram-size 0x80 --std-c99 crtstart.rel main.rel

    ...I get a HEX file that doesn't work. What am I doing wrong?

     
    • Brandon Fosdick

      Brandon Fosdick - 2009-08-26

      Looks like I didn't read the manual...

      "The file containing the main() function MUST be the FIRST file specified in the command line, since the linkage editor processes file in the order they are presented to it."

      Listing main.rel first seems to have fixed the problem.

       

Log in to post a comment.

Get latest updates about Open Source Projects, Conferences and News.

Sign up for the SourceForge newsletter:

JavaScript is required for this form.





No, thanks