Имплементацию функции посмотри. Если они используют DMA - то был глюк, когда транзакция DMA считалась завершенной по передаче из памяти в периферию, а не когда фактически данные в порт ушли.
я специально блокирующую вызвал. в итоге код "дернуть ножку - передать - дернуть ножку", что прекрасно работает на мелких процах, на мощном превратился в "поток1) дернуть ножку дернуть ножку поток 2) передать"
я специально блокирующую вызвал. в итоге код "дернуть ножку - передать - дернуть ножку", что прекрасно работает на мелких процах, на мощном превратился в "поток1) дернуть ножку дернуть ножку поток 2) передать"
Еще у тебя оптимизатор мог выбросить Delay, например. Так тоже иногда бывает
для теста поставь общий барьер памяти, который DMB между тем что ты хочешь чтоб было последовательно, если после барьера такая беда, то как сказали выше, просто скорость переферии разная и тут проц как бы не виноват. ему сказали он сделал, если выше кто-то не успевает. то тут делэй ставить только
для теста поставь общий барьер памяти, который DMB между тем что ты хочешь чтоб было последовательно, если после барьера такая беда, то как сказали выше, просто скорость переферии разная и тут проц как бы не виноват. ему сказали он сделал, если выше кто-то не успевает. то тут делэй ставить только
DMB тоже завершает все обращения к памяти до следующего обращения к ней. Тогда как DSB до следующей инструкции(которая следует за DSB)! так как запись в ГПИО это работа с памятью я думаю DMB будет достаточно