Ксения (08.04.2017 07:39, просмотров: 163) ответил Apтём на Коллизии нет никакой - надо просто правильно сделать (ошибку заложить конечно можно).
Насколько я понимаю, CRITICAL_SECTION на DMA не действует. Поэтому во-втором случае "2) Дма работает - просто копируем данные и переносим TxNext" может возникнуть коллизия, когда во время копирования дополнительных данных в буфер, DMA свою работу закончил и успел вызвать прерывание, которое не дает исполнить критическая секция. Перенося TxNext, мы рассчитываем на то, что DMA продолжит свою работу дальше, поскольку видели его работающим до начала копирования, однако это уже не так. Поэтому после окончания критической секции DMA свою работу не продолжит (т.к. к этому моменту уже успел остановился), а начнется исполнение процедуры прерывания, вызванного окончанием предыдущей работы, тогда как новая работа так никогда и не будет сделана.