Olha,
Eu entendo o seguinte: supostamente, MCUs baseados em cores licenciados (como ARM, MIPS, etc) deveriam apresentar menos problemas, já que as CPUs são testadas e largamente utilizadas.
O fato é que aparentemente a integração destes cores com os periféricos é que não é tão simples, pois é normalmente a fonte de problemas.
Me lembro de um caso como o que o Marcelo citou: a linha STR7xx da ST tinha um periférico interno (um controlador HDLC se não me engano) e que aparentemente não funcionava. Chegaram ao ponto de suprimir o módulo do datasheet e pararam de divulgar que o periférico se encontrava lá dentro da pastilha.
Mas problemas deste tipo não são exclusividade dos ARMs ou de máquinas licenciadas não, PICs, MSPs, HCSs, todos possuem diversos tipos de bugs, basta verificar as erratas que os fabricantes publicam. Em muitos casos há até bugs de CPU (instruções que não funcionam ou funcionam erroneamente). Bom, a Intel também lançou um Pentium com bug matemático lembram?
Mas porquê os fabricantes simplesmente não corrigem os defeitos? Bom, creio que existam alguns fatores que influenciam isso:
1- máscaras para a fabricação de chips devem custar caro (realmente não faço idéia de quanto).
2- os chips tornaram-se comodities. Temos muitos MCUs hoje com custo inferior (as vezes muito inferior) a US$ 1,00. Imagino que o payback de um projeto de MCU deva necessitar da venda de alguns milhões de chips.
Se considerarmos os dois fatores e mais a concorrência no mercado, é fácil perceber que para obter lucro é mais fácil não fazer novas máscaras e manter o chip em produção do jeito que está.
Se for o caso de um chip que venda muito, ou que esteja envolvido em algum grande contrato, quem sabe a alteração de máscara ocorra mais rapidamente, caso contrário, é mais fácil vender do jeito que está (imagino eu).
Se eu concordo com isso? Não. Mas também não dá para simplesmente ignorar que isso ocorre e creio que irá ocorrer ainda mais.
A utilização de CPUs licenciadas facilita a vida dos fabricantes? Claro, eles não precisam projetar mais uma CPU nova, pregar e divulgar a qualidade dela, investir em ferramentas de desenvolvimento e treinamento. O designer do core já fez isso por eles.
Basta integrar o core (que talvez eles não conheçam muito bem) aos seus periféricos (que talvez também não funcionem muito bem, ou apresentem incompatibilidades não previstas). Com perícia (e sorte) as coisas vão funcionar bem...
Utilizar ou desenvolver um core rodando num FPGA ou ASIC é a solução? Olha, isso parece realmente tentador, mas aí você atrai toda a responsabilidade de desenvolvimento, depuração do core, ferramentas de desenvolvimento, etc, para você. Além disso, o seu core também irá apresentar bugs, o FPGA ou ASIC pode ter bugs, a ferramenta do fabricante também pode ter bugs...
Aliás, falando em bugs, acho que o que nós nos esquecemos ou desconsideramos hoje é a altíssima complexidade dos nossos sistemas embarcados! A evolução tecnológica e a demanda do mercado fazem com que os nossos dispositivos precisem se comunicar através de interfaces e protocolos complexos, apresentem dados em telas, acessem a internet, etc. Há alguns anos falar em RTOS ou OS era coisa para gente que mexia com sistemas GRANDES e CAROS. Hoje isto está acessível a todos e qualquer maquininha de alguns poucos dólares pode rodar um RTOS de complexidade razoável.
Mas aí paga-seo preço: quanto mais complexo for o software, mais bugs ele irá conter, isto é um fato. Por isso que cada vez mais se criam mecanismos e certificações para validação de software, mas ainda assim, alguns bugs acabam sempre passando despercebidos.
No final, acho que são ossos do ofício! Os bugs estão aqui, nunca vão nos deixar. A discussão sobre a melhor CPU também nunca vai acabar. Ainda bem que podemos discutir e trocar idéias!
Bom dia e ótimo carnaval (para quem vai ter feriado) a todos!