Пытаюсь обрабатывать входящие сообщения по шине CAN. Хотелось бы чтобы полученные сообщения были гарантированно обработаны, а если ресурсов не хватает, то чтобы они и не были получены.
Если в обработке прерывания просто очистить флаг прерывания и установить семафор, а чтение и очистку почтового ящика (CAN) сделать в отдельной задаче, то ничего не работает. После выхода из прерывания без установки RFOM (очистка ящика), прерывание тут же вызывается снова и задача по чтению сообщения вообще не получает управления.
А если в обработчике очистить флаг прерывания, прочитать и очистить почтовый ящик, то задача обработки получит управления, но тут может возникнуть ситуация, когда сообщение получено, прочитано, но не обработано, поскольку задаче по обработке не хватило ресурсов.
Как можно решить такую задачу?