I tend to agree with a lot of the posts, Microchip are not innovators. Started out as General Instrument Microelectronics and changed their name to Microchip in '87. I remember fixing a door bell based on a 28 pin GI PIC1657 it was NMOS, that's the only GI PIC16xx part I've ever seen.
It took Microchip decades to sort out the read modify write bug on port pins and try driving WS8212B leds with the old SPI peripheral, FAIL, that 1-bit delay scews things up big time, they havn't got a clue about buffers. Maybe the Microchip designers should learn HDL or logic at the very least. However, the enhanced SPI peripheral works only in multiples of 8-bits, FAIL. Had to bit-bash in the end.
Tried using MX32 parts recently and Harmony, FAIL. I need to turn all of the interrupts off and back on, every macro I tried failed, yep macro not function because it's not functional, I even looked through the assembler and there was no code !!. So you haven't written it then guys, Harmony = FAIL. Why the hell would you abstract C to something that doesn't work.
Anyway, long story short, changed the MX32 to something older, DsPIC32.. Now I can program in C, plus inline assembler where needed, using the XC16 compiler. That works, well it worked on the rats nest breadboard, and two out of three production boards.
Seems that not all DsPICs will run at 40Mips, had to tweak down to 30Mips, now it works.
Microchip = crap hardware and crap software and now they aquire Atmel, I hope they fire all the Microchip engineers, I just wish it was the other way around