Sorry for my limited knowledge and limited English skill.
Quite a few companies are trying to sell their Cortex-M3 MCU to our company. Texas Instruments' technical sales engineer visited our office, to promote the Stellaris Cortex-M3. Several local distributors also contacted us for promoting other Cortex-M3 MCU, like STM32.
In the past few days, I noticed that, ST is promoting their STM32F4 series. And the price of STM32F4-Discovery kit is only around USD 27, unbelievable cheap to me. So I did some quick study about it. Several Simplified Chinese articles talked about the success of STM32 MCU, and the intense competition of the Cortex-M4 market. They also concluded that, the age of Cortex-M4 is coming.
I am trying to introduce the Fujitsu 16FX to our company, which is good in price and features. (don't want to deal with outdate MCUs anymore.) But Cortex-Mx is more general, and has a lot of resource to use. I heard that Cortex-M4 is 10% expensive than Cortex-M3, but with powerful DSP and FPU.
I almost don't know anything about DSP/FPU and any Assembly language. My quick study of Cortex-M4 shows that, the FPU performance of STM32F4 is slower than expected, and compilers do not support the FPU well, so, to utilize the FPU, users need to use Assembly language. Besides, if users use floating point in the Interrupt Service Routine, some extra efforts has to be done to deal with the Context Switching, this slowdown the interrupt performance, add extra complexity.
How do you think about Cortex-M4, and would you start to evaluate it?
Is that relatively easy to migrate a product from manufacturer-X's Cortex-M0 to manufacturer-X's Cortex-M3?
I'm not sure about that, as I primarily work with NXP chips. I can tell you that migrating from a LPC2478 to a LPC1788 or LPC1114 is very easy indeed.
I think the migration is more likely to be easier when you stick with the same manufacturer - but there is no guarantee.
A manufacturer might choose to have common (or closely-related) peripherals between different product ranges - or they might not!
Some manufacturers even have different peripherals between, say, their low-end Cortex-M3s and high-end Cortex-M3...
NXP tends to be very nice - they try to have very similar behaviour, bit definitions and constant names between the peripherials of their different chips.
And with ARM-class processors, the code can be written in a way that keeps down the number of peripherial-specific lines of code. It's not needed to have a full driver layer, but the business logic and the device manipulation code don't need to be all mixed up.
NXP even made the LPC2478 and its replacement, the LPC1788 - pin compatible.
And 1768 is pin compatible with 2368. Lots of drop-in compatibility in their current line of microcontrollers.