В добавок к сказанному.
Раньше с коллегами по работе обходился ассемблером для разных МК, разве что под винды на ассемблере не писали, хотя есть и такие энузиасты. При таком подходе переносимость кода минимальна (об этом уже не раз в постах говорилось). Со временем перешли на С/С++ с разделением проекта на части так, чтобы выделить аппаратно-зависимые участки для улучшения ереносимости кода на разные МК. Этого тоже не хватило, тогда выбрали RTOS, которая проверена временем и имеет огромное количество портов под разные МК. Об одном можно пока сожалеть, что не удалось всё это лицензировать (купить), чтобы иметь возможность указывать в шитах, что наше железо сделано на uC/OS