Hi,
I'm doing a fast processing application, and undecided whether to use C or Assembly language.
When programming in C the code must be translated to assembly and some of instructions are divided in multiple registry operations, does C programming brings any disadvantage regarding the output speed of the MCU msp430?
Joaquim de los Santos ..., and undecided whether to use C or Assembly language.
..., and undecided whether to use C or Assembly language.
Hi Joaquim,
Perhaps one good approach of the problem is to implement your algorithms in C, study them, and if necessary code them in asm.
jmP
Jean-Marc Paratteone good approach of the problem is to implement your algorithms in C, study them, and if necessary code them in asm
Absolutely!
To be able to outsmart a decent compiler, you will need to be a very good, experienced assembler programmer
Andy NeilTo be able to outsmart a decent compiler, you will need to be a very good, experienced assembler programmer
However, for small specific algorithms that use details of the processor architecture and can make assumptions about the current program state the compiler cannot make, using assembly language can give a significant speedup.
One example is usign the MPY32 hardware multiplier for complex multiply.accumulate operations, something you can of course code in C but won't be even nearly as efficient due to the limited way the compiler can concatenate mathematical expression chunks to a complex hardware use.It's like coding an SPI transfer by toggling I/O pins in software. The compiler can optimize the code better than you ever could by yourself, but is unable to detect that the hardware could do it way more efficiently if using an USCI module. (well, in this case no assembly is required, but it's the same base problem)
And sometimes the limitations of the C language are a problem. So to get a 32 bit multiplicaiton result, you'll have to multiply two 32 bit numbers. If you multiply two 16 bit values, the result will be 16 bit only. that's how C is defined. However, the hardware multiplier can produce a 32 bti result form two 16 bit operands, which usually is what you wand and whcih is much faster than what the comiler is allowed (!) to produce.Using hand-crafted inline-assembly macros isntead of a simple '*' operator gives a significant speed boost on complex calculations.
_____________________________________Before posting bug reports or ask for help, do at least quick scan over this article. It applies to any kind of problem reporting. On any forum. And/or look here.If you cannot discuss your problem in the public, feel free to start a private conversation: click on my name and then 'start conversation'. But please do so only if you really cannot do it in a public thread, as I usually read all threads. And I prefer to answer where others can profit from it (or contribute to it) too.