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

 
 
 
Reply to this topicStart new topic
> MMU + DCache, at91sam9260
ubobrov
сообщение Sep 23 2008, 05:38
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 64
Регистрация: 15-08-05
Пользователь №: 7 636



Необходимо поднять DCache под операционкой uC/OS.
Из документации следует, что DCache включается только при включеном MMU.
При включеном MMU и включении DCache программа падает в undefined instruction после нескольких переключений контекста ОС, а без ОС всё работает нормально.
Пробовал делать invalidate cache и invalidate TLB для ICache и DCache отдельно и вместе при переключении контекста ОС - не помогло.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 23 2008, 11:11
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Вообще-то кэш для процессора работает совершенно прозрачно, за исключением тех случаев, когда память модифицируется или читается "внешними силами".

А сам код этой "undefined instruction" не наводит на какие-либо мысли?
Go to the top of the page
 
+Quote Post
ubobrov
сообщение Sep 24 2008, 05:21
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 64
Регистрация: 15-08-05
Пользователь №: 7 636



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

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

Вот ICache действительно совершенно прозрачно под ОС и без ОС работает, а что касается DCache, то, как мне кажется, его надо чистить при переключении контекста т.к. данные в нём не являются валидными для нового процесса (на который переключилась ОС).
В undefined instruction падает когда очищаю ICache, если этого не делать, а чистить только DCache, то падает в data abort. Со включеным только ICache-ем всё работает и ничего чистить не надо, но хотелось бы и DCache включить.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 24 2008, 07:25
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(ubobrov @ Sep 24 2008, 09:21) *
...что касается DCache, то, как мне кажется, его надо чистить при переключении контекста т.к. данные в нём не являются валидными для нового процесса (на который переключилась ОС).

А почему Вам так кажется? Если Вы не меняете при переключении задачи Translation Table и не модифицируете код самой задачи, то все остается на своих местах.
Go to the top of the page
 
+Quote Post
3.14
сообщение Sep 24 2008, 15:04
Сообщение #5


Их либе дих ...
******

Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609



2 ubobrov
Вы на каком железе упражняетесь?


--------------------
Усы, борода и кеды - вот мои документы :)
Go to the top of the page
 
+Quote Post
ubobrov
сообщение Sep 25 2008, 11:47
Сообщение #6


Участник
*

Группа: Свой
Сообщений: 64
Регистрация: 15-08-05
Пользователь №: 7 636



Цитата(3.14 @ Sep 24 2008, 19:04) *
2 ubobrov
Вы на каком железе упражняетесь?

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

2 aaarrr
Вы были правы в последнем посте.
Дело было отнюдь не в ОС, а в DMA. Где-то в сети вычитал о необходимости инвалидировать кэш перед чтением и после записи в DMA, сделал это везде, где необходимо и всё заработало.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 02:11
Рейтинг@Mail.ru


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