The PICs I am working on have limited (1Mhz to 4Mhz clock) cycles, and I am wondering if C is going to waste a substantial amount of time executing. Has anyone ever had experience with both and could share some thoughts on the comparison?
C
The PICs I am working on have limited (1Mhz to 4Mhz clock) cycles, and I am wondering if C is going to waste a substantial amount of time executing. Has anyone ever had experience with both and could share some thoughts on the comparison?
C
You can't put numbers on it easily but well tuned assembler will usually outperform C for speed or code size or even both. However you should remmeber that the algorithm is often much more significant - for example a ripple sort in assembler will be nowhere near as fast as a quick sort in C.
C outperforms assembler (in my experience at least 10:1) in terms of time to write/test/sign off code.
Your best bet is almost always to write the application in C and use assembler for the bits you need to improve (this can be less true with very limited processors like the the original architecture 8 bit PICs).
You do not need to write your own maths routines in assembler unless you want - a million people have doen it already:
http://www.piclist.com/techref/microchip/math/div/index.htm
(just one example - there are many).
Thanks Michael. Based on your post I'm going to try the C approach on my next few programs.
I'd love to see an actual comparison of clock cycles used in programs doing the same function in both C and assembly.
In fact, I will program my next routine in both, and post my results.
Cabe
Why not ditch the PIC & use something designed more recently (i.e. after your scope?). If you use a 16 or 32 bit uP it will run many times faster than the 1-4MHz PIC & your C code will beat the assy on the 4MHz PIC anyway. And you can retreive your life........
R
A good C compiler will produce code nearly as good as a good assembly language programmer for a lot of common programming structures, but not all C compilers are that "good" (especially for architectures like the PIC that are not very C-friendly), and there are a few common assembler techniques that don't seem to translate well to C:
But the simpe truth is that most code doesn't need to be "as fast as possible", and being able to create it sooner, with less likelyhood of bugs, is a really good excuse for using a higher-level language.
I completely agree with Bill,
If a source program is well developed, I mean write flow-chart first, and then the real program, I believe assembly is the best way to write the source code.
Writing a good flow-chart will help you in understanding what you need, Subs, functions, and tables.
So, the first step in writing source code, will be to write own subs, functions, and tables.
Then, you have only to follow the flow-chart.
Alberto.
Did you say assembly is the best way to write source code? Unless it has to be mega fast I doubt it (even on a Sharc where the assy code is at least sensible). Is this 2010 or what?. Why not move to a modern processor with a decent register set & use C and get your code written faster with fewer bugs and more readable etc??
R
I program using both.
C code generates ASM, therefore C code can't perform better than ASM because in the end you end up with the same thing. ie the chip will not run ASM generated by C quicker.
What your asking is what is better, Apples or Oranges.
Saying that C code is generates faster code is because the person who did it is not that great at witting ASM code, or saying ASM is smaller that C is because the person doing it dose not know who to get the best out of C.
Its down to the engineer and the skills they have. So I write in C or ASM or Mix depending on my project and what I want from it.
Assess your project and what is important for it, then decide if you are better at writing your code in C or ASM or both. If you select components and micros with the same critical eye, then you should be applying the same to how you write your code and not what public option is - because they have chosen based on thier project and own skill sets.
Paul