‮Сдвиг по фазе (kincajou) wrote,
‮Сдвиг по фазе
kincajou

worklog: графикс(3a).

АХАХАХАХ

НАШЁЛ

АХАХАХАХ

виноват -O3 !! если поставить -O1, то всё работает как должно

Я понял это, когда в отладчике стал смотреть инициализацию DMA по шагам. В сишном коде все операции записаны в том порядке, в котором они ДОЛЖНЫ быть - сначала устанавливаем регистры адресов, затем настраиваем транзакцию, затем включаем... а оптимизатор решил, что всё это хуйня и в итоге получилось так: сначала блок DMA включается на передачу, успевает что-то передать (тот самый мусор!), а затем уже исполняются инструкции, которые его настраивают и дальше высылаются корректные данные.

Не понимаю: в чём смысл оптимизации, если она ломает порядок исполнения инструкций, от которых зависит корректность работы железа?
А можно ли внутри исходника как-то отключать перемешивание инструкций для участка кода, типа сделать его "атомарным", но без ассемблера?
Subscribe

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 24 comments