реклама на сайте
подробности

 
 
> Как решить проблему кэша и DMA
barabek
сообщение Mar 9 2012, 04:03
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831



Симптомы. Имеется буфер, в который пишет DMA. Иногда начало буфера оказывается испорчено, а именно - сохраняет свое старое значение. Грешил на самописный DMA.

Причина. После долгими мытарствами выяснил, что проблема оказывается в кэше. Перед целевым буфером линкер расположил локальный статический массив. В одной из функций я обращаюсь к этому массиву : tempbuf[8]&=~0x80; В этот момент, я его отловил signaltap, обновляется строка кэша. Но так как строка 32 байта и она частично захватывает массив и частично целевой буфер, то происходит обновление и начала моего буфера. И если в это время DMA кидал данные в эти ячейки, то происходит коллизия, которую я замучался вылавливать.

Вопрос. Как же это побороть? Схожие темы видел, но в них либо причина была иная и решалась обновлением линии кэша (.._flash()), либо решения нет. Одним из решений вижу размещение буфера по границам размера кэш-линии. Но это, на мой взгляд, корявое решение, т.к. и размер должен быть кратен размеру линии. Или есть другие пути?

Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 08:21
Рейтинг@Mail.ru


Страница сгенерированна за 0.01353 секунд с 7
ELECTRONIX ©2004-2016