Не все так плохо, как могло бы быть, но не столь хорошо, как хотелось бы.
Прежде, чем приступить к рассмотрению реализации драйверов различных устройств в МК, хотелось бы определиться с объектом, на котором мы вышеупомянутую реализация будем осуществлять. Конечно, можно рассмотреть сферический МК в вакууме, но в этом случае любое неудобство, приводящее к особенностям реализации программы, будет рассматриваться, как нечто искусственно созданное. Если же принять за базовый идеальный МК (если бы я умел их создавать, то наверняка давно бы этим занялся), то для него написание какой-либо программы вообще не представляет никакой трудности и сводится к двум командам: 1) пойми мысли разработчика и 2) сделай это. Поэтому какой-то реальный МК в качестве базового весьма желателен, причем то, насколько он далек от идеала, станет мерилом ценности разработанного ПО (раз оно устойчиво работает на этом МК, перенести его на любой более совершенный нетрудно — сильное утверждение, но примем его без доказательства).