|
AT91RM9200: использование кеша и Data Abort, Выключаю кеш- и ошибка пропадает |
|
|
|
Sep 30 2006, 16:58
|
Гуру
     
Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025

|
Сразу оговорюсь, что если я не включаю кеш в бутлодере, то все работает отлично.
В своем первичном бутлодере включаю кеш команд:
__MCR(15,0,__MRC(15,0,1,0,0) | 0x00001000,1,0,0) ;
Кеш данных не включаю, так как MMU не использую (не умею), а без MMU он не работает. Все отлично и шикарно, ускорение ого-го (в 4 раза при тестировании SDRAM). Но вот когда загружаю в SDRAM основную прошивку и перехожу на нее, то в какой-то момент возникает исключение по вектору 0x10 (Data Abort). При попытке пошагово просмотреть то место, с которого происходит исключение, ничего крамольного не вижу. Более того- если я даже просто ставлю точку останова в основной программе до возникновения исключения, то дальше исключения уже не происходит. То есть достаточно поставить отладчиком точку останова, а при остановке запустить дальше- и никаких усключений, все работает отлично. Такое ощущение, что пока оно стоит, что-то там в кеше успевает дозреть и далее работает нормально.
Ну ладно. Выключаю кеш в конце бутлодера и потом включаю его по новой в основном коде- тоже возникает исключение.
Передаю управление основной программе из бутлодера в состоянии, как можно более близком к ресету (в основной программе происходит полный стартап, кроме уже проинициализированной бутлодером периферии): и ARM-мода, и прерывания выключены, и в супервизоре. Чего ему еще не хватает, не понимаю.
С помощью метода тыка добился почти работоспособного варианта: выключаю кеш где-то посередине бутлодера, и включаю его уже потом в основной программе.
В-общем шаманство какое-то. Может кто-то сталкивался с подобным? И от чего вообще может возникает этот Data Abort, если я не включаю кеш данных (кстати, пробовал включать, ничего не изменилось), и не использую MMU ? И вдогонку: а как MMU включить? Хочу кеш данных использовать.
|
|
|
|
|
 |
Ответов
|
Sep 30 2006, 20:16
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Ruslan1 @ Sep 30 2006, 23:28)  Насчет инвалидировать- спасибо, я не знал. Сейчас(нет, все же завтра) прочитаю еще раз описание CP15. В случае этого действия что произойдет? довыполнятся операции, уже сохраненные в кеше, и кеш выключится? Нет. Лучше почитайте документацию. Цитата(Ruslan1 @ Sep 30 2006, 23:28)  Мне кажется, что у меня такая хитрость: во время работы кеша происходит, можно сказать, переключение контекста (в адресах SDRAM появляется новый код). Может быть, в этом и дело? Вопрос в том, как в SDRAM появляется новый код, и включен ли при этом ICache.
|
|
|
|
|
Sep 30 2006, 20:35
|
Гуру
     
Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025

|
Цитата(aaarrr @ Sep 30 2006, 23:16)  Цитата(Ruslan1 @ Sep 30 2006, 23:28)  Насчет инвалидировать- спасибо, я не знал. Сейчас(нет, все же завтра) прочитаю еще раз описание CP15. В случае этого действия что произойдет? довыполнятся операции, уже сохраненные в кеше, и кеш выключится?
Нет. Лучше почитайте документацию. Цитата(Ruslan1 @ Sep 30 2006, 23:28)  Мне кажется, что у меня такая хитрость: во время работы кеша происходит, можно сказать, переключение контекста (в адресах SDRAM появляется новый код). Может быть, в этом и дело? Вопрос в том, как в SDRAM появляется новый код, и включен ли при этом ICache. Вона как! Если кеш в это время включен- то потом возможна ошибка? Я как-то не думал об этом, так как до этого к SDRAM вообще не обращаюсь, откуда комады из той области попадут в кеш? Хотя однако туда контроллер ПДП обращается. Это объясняет то, почему я нашел почти нормально работающее сочетание, тогда у меня действительно кеш был выключен в то время, как по ПДП в SDRAM лилась новая прошивка. Но имеется один непонятный эффект, вероятно связанный с некорректным выключением кеша.
|
|
|
|
Сообщений в этой теме
Ruslan1 AT91RM9200: использование кеша и Data Abort Sep 30 2006, 16:58 aaarrr Не совсем понятно, что у Вас происходит с кешем в ... Sep 30 2006, 17:36 Ruslan1 Цитата(aaarrr @ Sep 30 2006, 20:36) Не со... Sep 30 2006, 19:28 yuri_t Использование cache без включенного MMU не рекомен... Sep 30 2006, 17:41 Ruslan1 Цитата(yuri_t @ Sep 30 2006, 20:41) Испол... Sep 30 2006, 19:54 aaarrr Цитата(yuri_t @ Sep 30 2006, 21:41) Испол... Sep 30 2006, 18:07 yuri_t To aaarrr
Насчет использования I-cache without MM... Sep 30 2006, 18:42 yuri_t Я не призываю не использовать cache, IMHO, просто ... Sep 30 2006, 20:35 Ruslan1 Цитата(yuri_t @ Sep 30 2006, 23:35) Я не ... Sep 30 2006, 20:43 aaarrr Цитата(Ruslan1 @ Oct 1 2006, 00:35) Вона ... Sep 30 2006, 21:44 DropDown Цитата(Ruslan1 @ Sep 30 2006, 19:58) И вд... Oct 1 2006, 05:53 Rst7 Цитата(Ruslan1 @ Sep 30 2006, 19:58) В-об... Oct 1 2006, 07:03 sergeeff Ощущение такое, что ошибка в чем-то другом. Я рабо... Oct 2 2006, 05:29 cf7k В доку по ядру 920 про использование кэша без ММУ ... Oct 7 2006, 16:55 aaarrr Цитата(cf7k @ Oct 7 2006, 20:55) Возможно... Oct 7 2006, 17:35 cf7k Цитата(aaarrr @ Oct 7 2006, 21:35) Так не... Oct 7 2006, 20:27
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|