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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Странное поведение системы с ниосом.
vadimuzzz
сообщение Apr 13 2011, 12:42
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



если сбой воспроизводится, то можно посмотреть сигналтапом, что происходит в этот момент
Go to the top of the page
 
+Quote Post
inco
сообщение Apr 27 2011, 18:00
Сообщение #17


Частый гость
**

Группа: Свой
Сообщений: 161
Регистрация: 26-08-05
Из: Российская Империя
Пользователь №: 7 984



Вроде разобрался я с аномальным поведением своей системы на кристалле.
Докладываю о проделанной работе. Если посчитать чистое время то наверное с неделю угробил пока нашел!

Перед тем как отчитаться несколько слов о целевой системе.

В системе использовалась только внутренняя память. Было создано code_rom (onchip memory установлен флаг ROM - read only),
onchip_ram (установлен флаг RAM) и использовался внешний контроллер прерываний vic.

Так вот, как только происходило любое прерывание система сбрасывалась! Путём долгих разбирательств было установлено, что
не инициализировалась таблица векторов прерываний. Эта таблица инициализируется функцией alt_ic_isr_register. Прототип этой
таблицы находится в файле altera_vic_vector_tbl.S, а в этом файле ключевая - первая фраза: .section .text !!!!!!
То есть, эта таблица ВСЕГДА по мнению альтеры, должна находится в секции .text. Но секция text - это исполняемый код, то есть
ПЗУ (code_rom). Теперь возникает вопрос, если это ПЗУ, то каким образом можно заполнить эту таблицу функцией alt_ic_isr_register,
которая должна записать туда адреса вызова функций обработчиков прерываний по ходу программы, если эта память недоступна для записи?
Как по моему это явный глюк. Но и это еще не всё! Если в отладчике остановиться непосредственно на командах записи адресов функций
обработчиков в таблицу и при этом открыть окно просмотра содержимого памяти по адресу таблицы, то эти адреса туда записываются!
То есть адреса записываются в read-only memory!!! После чего у меня наступал полный ступор!
Если исправить исходник в файле altera_vic_vector_tbl.S, заменить строку section .text на section .rwdata таблица переносится в ОЗУ, но программа всё равно НЕ работает и к тому же этот файл каждый раз заменяется при генерации BSP на родной! То есть, где-то есть подобные нестыковки ещё! Если я делаю code_rom типа RAM, то программа начинает работать нормально!!! Программа начинает работать так же как и на ките на котором отлаживалась изначально. (А на ките программа (секция text) находилась во внешней срам (то есть была записываемой!!!)). Но это же не верно идеологически!!!
Но что-то у меня пропадает энтузиазм в поиске глюков от альтеры. Или может я чего-то не понимаю!?...

Кстати это не первый обнаруженный глюк! Есть еще мелочь, проект написан на С++ и в нём использовались функции работы с флэш из файла
epcs_commands.h, а в нём альтера всего-то забыла вставить обрамление для С функций (#ifdef __cplusplus extern "C" {#endif )..., хорошо хоть это быстро обнаружилось!

Теперь вот сижу и думаю как это обойти, делать code_rom как ram что-то совсем не хочется!

Кстати у кого хорошо с английским может задать вопрос альтере? Да, чуть не забыл квартус 9.1sp2 и 10.1 ведут себя одинаково!
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Apr 28 2011, 02:44
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



inco, респект вашему упорству, очень интересная история. а вы не пробовали в настройках ниоса Exception vector кинуть на RAM (а code пусть в ROM лежит)?
Go to the top of the page
 
+Quote Post
inco
сообщение Apr 28 2011, 04:42
Сообщение #19


Частый гость
**

Группа: Свой
Сообщений: 161
Регистрация: 26-08-05
Из: Российская Империя
Пользователь №: 7 984



Пробовал! Тоже самое только вид сбоку 8-)

Я же написал. Там в исходнике жестко прописано section .text - тут как не извращайся ничего не получится!
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Apr 28 2011, 05:48
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



В BSP-editor на вкладке drivers/altera_vic_driver есть опция linker_section (у меня там .text). попробуйте изменить на какую-нибудь секцию в RAM (память д.б. подключена к Instruction master)
Go to the top of the page
 
+Quote Post
inco
сообщение Apr 28 2011, 07:03
Сообщение #21


Частый гость
**

Группа: Свой
Сообщений: 161
Регистрация: 26-08-05
Из: Российская Империя
Пользователь №: 7 984



Цитата(vadimuzzz @ Apr 28 2011, 08:48) *
В BSP-editor на вкладке drivers/altera_vic_driver есть опция linker_section (у меня там .text). попробуйте изменить на какую-нибудь секцию в RAM (память д.б. подключена к Instruction master)


Да Вы шаман!!! Большое спасибо! То что доктор прописал!
Хоть бы где в документации заикнулись об этом. Был на той вкладке сто раз, а эту секцию не заметил!

Всё работает как и хотелось code_rom - read only! А я весь мозг сломал! УРА!!! beer.gif
Go to the top of the page
 
+Quote Post
Stewart Little
сообщение Apr 28 2011, 09:17
Сообщение #22


Лентяй
******

Группа: Свой
Сообщений: 2 203
Регистрация: 11-10-04
Из: Санкт-Петербург
Пользователь №: 843



Так, в плане ворчания sm.gif :
Цитата(inco @ Apr 27 2011, 22:00) *
... Но секция text - это исполняемый код, то есть ПЗУ (code_rom)....

Это вредное заблуждение, выросшее, скорее всего, из применения 8-битных микроконтроллеров. Секция .text может с тем же успехом располагаться и в ОЗУ (иначе бы на компах наши любимые приложения не работали sm.gif )

Ну и еще вопрос - а в чем сермяжная правда физического разделения памяти на ПЗУ и ОЗУ? Вопросы надежности? Или какие-то другие соображения?


--------------------
Чтобы слова не расходились с делом, нужно молчать и ничего не делать...
Go to the top of the page
 
+Quote Post
inco
сообщение Apr 28 2011, 11:35
Сообщение #23


Частый гость
**

Группа: Свой
Сообщений: 161
Регистрация: 26-08-05
Из: Российская Империя
Пользователь №: 7 984



Цитата(Stewart Little @ Apr 28 2011, 12:17) *
Ну и еще вопрос - а в чем сермяжная правда физического разделения памяти на ПЗУ и ОЗУ? Вопросы надежности? Или какие-то другие соображения?

Да именно из-за надёжности. По нашим требованиям ПЗУ обрамляется контрольной суммой и по ходу работы программы ПЗУ циклически проверяется.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 26th August 2025 - 22:35
Рейтинг@Mail.ru


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