dememax: (Hacker Emblem)
[personal profile] dememax
*) Direct Memory Access - Прямой доступ к памяти

В мире ядра Линукс и железа категории SoC - "я — не волшебник, я ещё только учусь" (Linux development, Шел далёкий 2008 год... ), но постепенно опыт приходит.

Первый раз, когда у меня не запускался процесс обработки изображения во фронт-энде TI DM365 (всё вроде заполняю, отдаю на обработку, а обратно прерывание не возвращается), мой русский коллега мне посоветовал разобраться, а что там в DMA, что, мол, пора бы уже...

Но пришёл начальник, француз с большим опытом работы с подобным родом железа и софта, отодвинул идею разобраться с DMA, стал со мной проверять значения регистров. Нашёл достаточно быстро, что значение регистров вертикального и горизонтального пэддинга - вообще не соответствуют задаваемому разрешению картинки (остаётся непонятным, почему тогда драйвер принимает эти значения, какой физический смысл таких значений вообще; по ходу конвейера должен быть запас столбцов и строк для обработки изображения). Значения поправили, прерывание окончания обработки стало приходить.

А тут недавно другой коллега, который аппликуху пишет, заметил, что иногда, если процесс перезапускать - происходит зависание. Я помог локализовать, где происходит зависание. Оказалось - на poll() в video4linux. Далее уже быстро выяснили, что из-за того же: не приходит прерывание от завершения обработки. Не часто такая ситуация возникает, только после многих перезапусков, но уж если произошла, то дальше уже — как не перезапускай, а результат один.

Я сразу проверил содержимое регистров железа, сравнил с хорошим и плохим случаем, криминала — не нашёл, стал дальше вдумываться... И сова коллега посоветовал посмотреть DMA.

Но снова пришёл начальник, и в этот раз был у него — цифровой осциллограф, он приложил щуп к одной из ног матрицы (которая в конце снятия кадра по этой ноге сигнал соответствующий посылает) и обнаружил, что когда происходит зависание — нога перестаёт посылать во фронт-энд сигнал. Тут же было проверено решение: резетить микруху матрицы железно, подавая сигнал на соответствующую ногу. И процесс вошёл в нужное русло.

Так и не довелось мне пока пощупать DMA. Да и доки фронт-энда объясняют: мы вам объясним, как с помощью регистров всё сделать, запустить; но есть ещё и с помощью DMA вариант тоже самое сделать, но это мы объяснять не будем, не нужно это...

Date: 2015-04-16 02:31 am (UTC)
From: [identity profile] itman.livejournal.com
вау

Date: 2015-04-16 03:07 am (UTC)
From: [identity profile] vaddimka.livejournal.com
эмбеддед какой? )
меня тут тоже недавно на чистых сях писать таки заставили

Date: 2015-04-20 02:45 pm (UTC)
From: [identity profile] yury klyuev (from livejournal.com)
мдэ, ты еще не научился работать с осцилирограффом ???

Date: 2015-04-20 03:21 pm (UTC)
From: [identity profile] madf.livejournal.com
Мега круто! Я вот, даже не смотря на то что рулю всякой гидравликой, все равно кручусь в каком-то недо-embedded. Дальше RS485/ModBus не вылазю.

Profile

dememax

May 2023

S M T W T F S
 123456
78910111213
14151617181920
21 2223 24252627
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 3rd, 2026 03:03 pm
Powered by Dreamwidth Studios