When you went with low end models, you had a lot of drawbacks. But you get used to them.
If you wanted power, the dspic33s were beasts. 40 MIPS, mostly single-cycle instructions, 48KB ram in a 28PDIP... crazy and expensive!
The harward architecture has its benefits. ARM core can only access the work registers, so first it needs to load the address, fetch the data and then work with it, while pics usually can address anything, ignoring the bank selection thing.
For example, toggling a GPIO:
- PIC, clear/set/toggle RA3: bcf/bsf/btg LATA,3
- ARM: Load address of GPIOA->ODR into the register (pointer)
Get the value
Modify the bit(I barely know any thumb/arm asm, but I guess it uses a OR/AND/XOR mask, so at least another 2 instructions)
Write back the new modified data using the already set pointer
But also arm is pipelined, so the real behavior is different.
The xc8 compiler works pretty well. Last time I checked the disassembly, the optized code was really good.
But I also remember manually adding assembly instructions in a pic24 because mplabc c16 (Now xc16) didn't use the hw div instructions.
About the peripherals... Some were really buggy. But also stm32 has some serious issues. Even the newest ones.
So it seems there's crap everywhere. I'm starting to think there's no mcu on earth that works like in the papers.
Lots will require reset and initialization when something goes wrong.
"Use the enable/disable bit to reset the spi peripheral"- Best joke of the last 20 years!
I don't hate pics, but they got really old once the arm came into the game.
Never understood why there isn't GCC for them. AVR is pretty similar and has been supported since long time ago.