Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: MMU + DCache
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
ubobrov
Необходимо поднять DCache под операционкой uC/OS.
Из документации следует, что DCache включается только при включеном MMU.
При включеном MMU и включении DCache программа падает в undefined instruction после нескольких переключений контекста ОС, а без ОС всё работает нормально.
Пробовал делать invalidate cache и invalidate TLB для ICache и DCache отдельно и вместе при переключении контекста ОС - не помогло.
aaarrr
Вообще-то кэш для процессора работает совершенно прозрачно, за исключением тех случаев, когда память модифицируется или читается "внешними силами".

А сам код этой "undefined instruction" не наводит на какие-либо мысли?
ubobrov
Цитата(aaarrr @ Sep 23 2008, 15:11) *
Вообще-то кэш для процессора работает совершенно прозрачно, за исключением тех случаев, когда память модифицируется или читается "внешними силами".

А сам код этой "undefined instruction" не наводит на какие-либо мысли?

Вот ICache действительно совершенно прозрачно под ОС и без ОС работает, а что касается DCache, то, как мне кажется, его надо чистить при переключении контекста т.к. данные в нём не являются валидными для нового процесса (на который переключилась ОС).
В undefined instruction падает когда очищаю ICache, если этого не делать, а чистить только DCache, то падает в data abort. Со включеным только ICache-ем всё работает и ничего чистить не надо, но хотелось бы и DCache включить.
aaarrr
Цитата(ubobrov @ Sep 24 2008, 09:21) *
...что касается DCache, то, как мне кажется, его надо чистить при переключении контекста т.к. данные в нём не являются валидными для нового процесса (на который переключилась ОС).

А почему Вам так кажется? Если Вы не меняете при переключении задачи Translation Table и не модифицируете код самой задачи, то все остается на своих местах.
3.14
2 ubobrov
Вы на каком железе упражняетесь?
ubobrov
Цитата(3.14 @ Sep 24 2008, 19:04) *
2 ubobrov
Вы на каком железе упражняетесь?

Уже готовая железяка с at91sam9260 на борту.

2 aaarrr
Вы были правы в последнем посте.
Дело было отнюдь не в ОС, а в DMA. Где-то в сети вычитал о необходимости инвалидировать кэш перед чтением и после записи в DMA, сделал это везде, где необходимо и всё заработало.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.