This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Keil C vs. Bascom basic compiler

Hello !

I have a problem which I can't resolve. I wrote program for 89C2051 for one of my friend in Basom Basic compiler (http://www.mcselec.com). Compiled code was about 1945 bytes. Since I prefer C, I transalte Bascom basic to C. But when I compile, generated code was 2313. I try to change optimization parameters, but generated code never go below 2313. Even bigger. Where am I wrong ?
Is it possible that stupid Basic make smaller code tne best C compiler ? Then I find out that this code:
while (1) {
printf ("Hello World\n");
}
generate fully 1093 bytes (!) for Atmel 89C2051. 1093 bytes???? Three lines? Same program in Bascom generate only 154 (!) bytes.
When I remove all "printf" from my C code, generated code was arond 2200 byte. But, with same action in Basic code (remove all "print") 1340 bytes long code. Exactly same program in Keil C and Bascom basic generate 860 byte smaller code !
I don't belive this. Do I have to program in (stupid) Basic if I want smaller code ?
I still belive I did mistake somewhere, so I need help.
I will send both C and basic code for interested people.

With best regards !

Parents
  • I just downloaded the BASCOM demo and played around for a while. It's pretty neat.

    After playing around for a while, I decided to run a real program and compare it to C51. Not wanting to spend the rest of my life on this, I chose the SIEVE. Here are the results:

    BASCOM:
    Code Size: 866 Bytes
    Execution Speed: 23.553726 Seconds

    Keil (using printf):
    Code Size: 1,248 Bytes
    Execution Speed: 6.331546 Seconds

    Keil (using putchar and puts):
    Code Size: 524 Bytes
    Execution Speed: 6.330123 Seconds

    I did all speed testing with the uVision2 Debugger/Simulator under identical circumstances.

    From this little comparison, I think you can tell that the printf is what kills the C code--but not the performance. And, the difference between a CUSTOM formatter (using puts and putchar) and printf saves 724 bytes.

    I'll be more than happy to post the source for these things (of course, the SIEVE source comes with the Keil tools) if anyone wants to check my work.

    Jon

Reply
  • I just downloaded the BASCOM demo and played around for a while. It's pretty neat.

    After playing around for a while, I decided to run a real program and compare it to C51. Not wanting to spend the rest of my life on this, I chose the SIEVE. Here are the results:

    BASCOM:
    Code Size: 866 Bytes
    Execution Speed: 23.553726 Seconds

    Keil (using printf):
    Code Size: 1,248 Bytes
    Execution Speed: 6.331546 Seconds

    Keil (using putchar and puts):
    Code Size: 524 Bytes
    Execution Speed: 6.330123 Seconds

    I did all speed testing with the uVision2 Debugger/Simulator under identical circumstances.

    From this little comparison, I think you can tell that the printf is what kills the C code--but not the performance. And, the difference between a CUSTOM formatter (using puts and putchar) and printf saves 724 bytes.

    I'll be more than happy to post the source for these things (of course, the SIEVE source comes with the Keil tools) if anyone wants to check my work.

    Jon

Children