Menu

SDCC 3.4.0 not optimize code size STM8

2014-09-06
2014-09-09
  • Pavlo Kharchenko

    SDCC 3.4.0 does not optimize the unused functions, variables and constants. As a result, the hex file size is 18,8kb, and the IAR generates a hex file size 2,5kb.

    -------------- Build: Release in test (compiler: Small Device C Compiler)---------------

    sdcc.exe -mstm8 --opt-code-size -I"C:\Program Files\SDCC\include" -c main.c -o obj\Release\main.rel
    sdcc.exe -L"C:\Program Files\SDCC\lib" -o bin\Release\test.ihx -mstm8 -DSTM8S003 --opt-code-size -lstm8 --out-fmt-ihx obj\Release\main.rel
    Output file is bin\Release\test.ihx with size 18.82 KB
    Running project post-build steps
    cmd /c "packihx <bin\\release\\test.ihx>bin\Release\test.hex"
    packihx: read 253 lines, wrote 503: OK.</bin\\release\\test.ihx>

    This main.c - used only function LCD_init ()

    #define SYSCLK 1000000UL
    #include <stm8 stm8l151k4.h=""></stm8>
    #include <stm8 stm8_sdcc.h=""></stm8>
    #include "STM8_KS0108_CFG.h"
    #include "STM8_KS0108.h"
    void main(void)
    {
    LCD_init();
    while(1);
    }

    ASM file size is 115,217kb

    Why don't work optimization with STM8 CPU?

    Thanks in advance!

    P.S. I tried all possible COMMAND LINE OPTIONS and SDCC version with STM8 support .

     

    Last edit: Pavlo Kharchenko 2014-09-06
  • Pavlo Kharchenko

    -------------- Build: Release in test (compiler: Small Device C Compiler)---------------

    sdcc.exe -mstm8 -DSTM8S003 --opt-code-size --noinvariant --nolospre -I"C:\Program Files\SDCC\include" -c main.c -o obj\Release\main.rel
    Warning: Non-connected liverange found and extended to connected component of the CFG:iTemp1. Please contact sdcc authors with source code to reproduce.
    Warning: Non-connected liverange found and extended to connected component of the CFG:iTemp7. Please contact sdcc authors with source code to reproduce.
    Warning: Non-connected liverange found and extended to connected component of the CFG:iTemp6. Please contact sdcc authors with source code to reproduce.
    Warning: Non-connected liverange found and extended to connected component of the CFG:iTemp16. Please contact sdcc authors with source code to reproduce.
    Warning: Non-connected liverange found and extended to connected component of the CFG:iTemp16. Please contact sdcc authors with source code to reproduce.
    Warning: Non-connected liverange found and extended to connected component of the CFG:iTemp16. Please contact sdcc authors with source code to reproduce.
    Warning: Non-connected liverange found and extended to connected component of the CFG:iTemp16. Please contact sdcc authors with source code to reproduce.
    Warning: Non-connected liverange found and extended to connected component of the CFG:iTemp2. Please contact sdcc authors with source code to reproduce.
    Warning: Non-connected liverange found and extended to connected component of the CFG:iTemp2. Please contact sdcc authors with source code to reproduce.
    Warning: Non-connected liverange found and extended to connected component of the CFG:iTemp16. Please contact sdcc authors with source code to reproduce.
    Warning: Non-connected liverange found and extended to connected component of the CFG:iTemp16. Please contact sdcc authors with source code to reproduce.
    Warning: Non-connected liverange found and extended to connected component of the CFG:iTemp16. Please contact sdcc authors with source code to reproduce.
    Warning: Non-connected liverange found and extended to connected component of the CFG:iTemp16. Please contact sdcc authors with source code to reproduce.
    sdcc.exe -L"C:\Program Files\SDCC\lib" -o bin\Release\test.ihx -mstm8 -DSTM8S003 --opt-code-size --noinvariant --nolospre -lstm8 --out-fmt-ihx obj\Release\main.rel
    Output file is bin\Release\test.ihx with size 18.72 KB
    Running project post-build steps
    cmd /c "packihx <bin\release\test.ihx>bin\Release\test.hex"
    packihx: read 252 lines, wrote 500: OK.
    Process terminated with status 0 (0 minute(s), 4 second(s))
    0 error(s), 0 warning(s) (0 minute(s), 4 second(s))</bin\release\test.ihx>

     
  • alvin

    alvin - 2014-09-09

    It's a better plan to move the source code out of the headers and into a library file. Then your set of subroutines will not be compiled into every binary.

    I think many C compilers will have trouble with removing unused source code deliberately included by the programmer like that.

     

Log in to post a comment.