I'm developing software for these Silabs MCUs (that means, I "have to"), they have an crusty old 8051 core tweaked with more peripherals and a higher clock (usually up to about 25 MHz and single cycle instructions)...
Edit: The f352 used in the unit can run at 50 MHz
What MCU would you use instead? I ask because I used a C8051F352 a few years back and it worked very well.
Hi! Don't get me wrong, sure these chips work, and if you prefer them that's fine :-) I was just a little frustrated by the limitations of the old 8051 core...
So, which MCU should be used in a commercial project? the one that fits best. This also includes development time - sometimes, for example if it is commonly used in your company, it's better to stick with an old 8051 architecture instead of moving to a more modern one.
I personally prefer the STM32 ARM Cortex for connectivity and calculation tasks, or the STM8 for "as-cheap-as-possible" tasks. I also worked with MSP430 which seems to be a nice architecture, and AVR. The thing with AVR is that there's no good debugging standard for all chips (I'm talking On-Chip-Debugging here)... It also lacks the ability to run Code from RAM (which is possible with STM8, for example)
The 8051, and especially the ones delivered by Silabs are, in my opinion, the worst architecture:
Limitations of the 8051 core:
- Not a linear memory model (e.g. you have multiple memory areas starting at Address 0: DATA, PDATA, XDATA, ...)
- Only one Accumulator register that has to process all data
- Small Stack pointer - limited to the lowest 128 Bytes of Data RAM
- Limited amount of 128 SFR (Special Function registers) for all peripherals
- Inefficient access to all RAM above 256Bytes (XDATA)
Limitations of the Silabs 8051:
- The Silabs Crossbar is a nice idea for flexible pin assignment, but most times it makes the project more complex without real benefits.
- They stuck with the old 8051 UART, which uses TIMER1 as time base
- They use Paged SFR access (you have to write to the SFR_PAGE register before you can access the desired SFR) this makes coding harder
- Very limited capabilities of PWM output (pwm frequency). Silabs statement from their datasheets: For a PWM, it doesn't matter how fast it is, as long as the on/off proportion is right.
Limitations of the Keil C51 compiler:
- Data overlays are a good idea to make the best effort of the limited amount of Data RAM
- Function pointers work, as long as the target functions don't use local variables (Overlay screwed up)
- Sometimes, changing variables that are function parameters will result in unpredictable results.
- Reentrant functions are problematic, that means if a function is called from normal code, and then from an interrupt, it also can screw up your variables.