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 use C because I can crank things out very quickly. Often in a matter of minutes. This allows me to test and prove ideas and algorithms quickly. And, with the significant reqources available (examples, forum, and so on) C on the 8051 is pretty hard to beat. I mean with google and this forum, I rarely have to post questions asking for things -- I just have to be really, really good using the search tools that are available.

    Once everything works (or mostly works) I can start optimizing for speed. This is where I use the profiler to figure out where most of the program's time is spent. There's no need to speed up something that's only invoked a few times. Speed-up the stuff that's invoked a thousand times.

    I usually start optimizing for size from the very beginning. If I know that I'm size limited, I try to figure out what is the biggest memory hog that I'll have, is it data, long term storage, constants, code, or ???? Once I know what the big memory space killer is, I work on reducing that first. Then I work my way to the second biggest, and on down the line.

    Jon

Reply
  • I use C because I can crank things out very quickly. Often in a matter of minutes. This allows me to test and prove ideas and algorithms quickly. And, with the significant reqources available (examples, forum, and so on) C on the 8051 is pretty hard to beat. I mean with google and this forum, I rarely have to post questions asking for things -- I just have to be really, really good using the search tools that are available.

    Once everything works (or mostly works) I can start optimizing for speed. This is where I use the profiler to figure out where most of the program's time is spent. There's no need to speed up something that's only invoked a few times. Speed-up the stuff that's invoked a thousand times.

    I usually start optimizing for size from the very beginning. If I know that I'm size limited, I try to figure out what is the biggest memory hog that I'll have, is it data, long term storage, constants, code, or ???? Once I know what the big memory space killer is, I work on reducing that first. Then I work my way to the second biggest, and on down the line.

    Jon

Children