Знатный апдейт. Разрывает вопрос на две проблеммы не связанны с uC. Вообще программирования uC это просто обычное программирования с дополнительными ограничениями по памяти, хипу, стэку и производительности. Ну да какбэ чтото особенное изза того что нужно знать хоть немного микроэлектронику. Но реально - ничего особенного. Конечно не мешает знать во что превращяется твой код.
Книжно по архитектуре - любые. Хоть блин design patterns :D
Тяжело абстрактные книжки читать - читай код u-boot/netbsd/linux - смотри как там сделанно. Применительно к твоей проблеме с шиной 485 - там полно пробинга и детектов всякой переферии. Ближайший аналог естественно будет USB. Простейшие стэки для USB есть в природе на посмотреть. API стэка можешь скопировать, чтоб либа похожа была.
Про прерывания vs poll - это cам разбирайся с требованиями - soft rt у тебя или hard rt. Может у тебя по требованиями вообще лупы нельзя будет делать и надо линейно отрабатывать с ресетом в конце. И конечно посмотри FreeRTOS - хотябы сколько чипов он поддерживает :D