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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Расположение векторов прерываний, обработка прерываний, Само - программирование МК и прерывания
Alex ma
сообщение Jul 19 2007, 18:23
Сообщение #1


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

Группа: Новичок
Сообщений: 81
Регистрация: 9-08-06
Пользователь №: 19 445



Вектора прерываний можно разместить как в области загрузчика, так и в начале памяти программ.
Есть программа загрузчик, есть основная программа, та и другая использует прерывания.
Но подпрограммы обслуживания прерывания разные для загрузчика своя для основной программы своя.

Так как таблица прерываний одна, а подпрограмм обработки прерываний две – одна относится к загрузчику, вторая к основной программе. Как это реализовать. И вообще если программа загрузчика и основная программа – разные программы и компилируются по разному, как быть с прерываниями непонятно, ведь таблицы прерываний будут определены два раза, а в памяти можно хранить только одну таблицу прерываний.
Go to the top of the page
 
+Quote Post
bodja74
сообщение Jul 19 2007, 20:11
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



Делается очень просто ,
вспоминаете молодость ,когда не знали как тольком работать с прерываниями и делаете загрузчик без прерываний smile.gif ,соответственно отдаете все прерывания основной программе. smile.gif
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 19 2007, 20:46
Сообщение #3


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Alex ma @ Jul 19 2007, 21:23) *
Так как таблица прерываний одна, а подпрограмм обработки прерываний две

Это заблуждение. Таблиц прерываний тоже 2.
Копайте в сторону IVSEL.

Вот из ДШ на M16
Цитата
When the IVSEL bit in GICR is set, interrupt vectors will be moved to the start of the
Boot Flash section. The address of each Interrupt Vector will then be the address in
this table added to the start address of the Boot Flash section.
Go to the top of the page
 
+Quote Post
KRS
сообщение Jul 19 2007, 20:47
Сообщение #4


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(bodja74 @ Jul 20 2007, 00:11) *
делаете загрузчик без прерываний smile.gif ,соответственно отдаете все прерывания основной программе. smile.gif


+1.
IMHO прерывания для загрузчика - лишнее, он должен быть простым и надежно писать флеш.


Кроме того у некторых AVR, например AT90CAN128, есть биты IVSEL и IVCE в MCUSR, которые позволяет иметь 2 таблицы векторов прерываний, в application и bootloader section соответствеенно. (и переключать их программно)
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 19 2007, 20:49
Сообщение #5


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(KRS @ Jul 19 2007, 23:47) *
+1.
IMHO прерывания для загрузчика - лишнее, он должен быть простым и надежно писать флеш.

А кто сказал, что использование прерываний это сложно или ненадежно?!
Go to the top of the page
 
+Quote Post
_Алекс
сообщение Jul 20 2007, 03:43
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 14-09-06
Пользователь №: 20 377



При заливке программы нужно как то реализовать таймаут, чтоб вечно не ждать следующего байта, посчитать контрольную сумму, с программным переключением векторов надо попробовать, вроде то что надо, попал в загрузчик включил вектора в загрузчике, вышел, включил в программе. Думаю реализовать заливку бинариком, мне кажется проще, побайтно с $0000.
Go to the top of the page
 
+Quote Post
bodja74
сообщение Jul 20 2007, 10:05
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



Прерывания полезно для ускорения процесса программирования,тоесть пока мы принимаем следующую страницу в это время загружаем и программируем предыдущую,
хотя можно и по другому ,принять данные прочитать с флеши туже страницу и сравнить ,если одинаковые едем дальше .Можно оба способа совместить - по ходу принимаем и сразу сравниваем.
Короче тут уже зависит уже от желания и задач.
Если охота с прерваниями ,нужно шаманить с переносом таблицы и запрещать прервания в нужных местах.

Выход ,если не дождались байта - это не проблема ,можно на стороне бута в цикле ожидания или по прерванию ,можно на стороне проги ПК, ждать пару сек ,если не пришло подтверждение приема или записи страницы (блока) данных ,ресетим МК соответственно опять входим в бутлоадер.Хотя вообще при нормально отлаженном бутлоадере и программе таких вещей не происходит.
Go to the top of the page
 
+Quote Post
Igor26
сообщение Jul 20 2007, 10:40
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 521
Регистрация: 10-02-05
Пользователь №: 2 544



Цитата
нужно шаманить с переносом таблицы


"Шаманить" нужно будет в *.xcl файле. Но там всё достаточно просто.
А в самой программе перенос таблицы векторов - всего одна СИшная строчка. Использовать или не использовать прерывания в БутЛоадере - это вопрос из той же оперы, что и "использовать или не использовать прерывания в основной программе". Я лично в БутЛоадере ВСЕГДА использую прерывания.
Go to the top of the page
 
+Quote Post
IEC
сообщение Jul 23 2007, 13:43
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 22-03-05
Из: г. Харьков, Украина
Пользователь №: 3 598



Цитата(bodja74 @ Jul 20 2007, 13:05) *
Прерывания полезно для ускорения процесса программирования,тоесть пока мы принимаем следующую страницу в это время загружаем и программируем предыдущую,...


Круто! Насколько я помню в режиме программирования FLASH-страницы должен быть запрещен WDT.
Это вероятно говорит о том, что процессор временно подвисает. Думаю, что во время программирования страницы ничего работать не будет вообще.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 23 2007, 14:48
Сообщение #10


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(IEC @ Jul 23 2007, 16:43) *
Круто! Насколько я помню в режиме программирования FLASH-страницы должен быть запрещен WDT.
Источник не внушает доверия smile.gif Даташит о должен быть запрещен умалчивает, а практика показывает что программирование flash и WDT прекрасно работают вместе.
Цитата(IEC @ Jul 23 2007, 16:43) *
Это вероятно говорит о том, что процессор временно подвисает.
Неверная предпосылка, неверные выводы. Прочитайте даташит на предмет NRWW и RWW секций флеш-памяти.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
bodja74
сообщение Jul 23 2007, 15:49
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



Цитата(IEC @ Jul 23 2007, 16:43) *
Круто! Насколько я помню в режиме программирования FLASH-страницы должен быть запрещен WDT.

Собственно WDT в бутлоадере особо делать нечего,хотя о вкусах не спорят.
Запрещать действительно прерывания нужно с момента записи в SPMCR и пока не будет выполнена SPM ,это касается всех прерываний.
Цитата
Это вероятно говорит о том, что процессор временно подвисает. Думаю, что во время программирования страницы ничего работать не будет вообще.

В таком случае ,зачем тогда флаг SPMEN нужен ?И прерывание готовности SPM ,если в это время все равно ничего не выполняется? smile.gif
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 23 2007, 21:26
Сообщение #12


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(bodja74 @ Jul 23 2007, 18:49) *
Собственно WDT в бутлоадере особо делать нечего,хотя о вкусах не спорят.

Все верно, но если мы попали в бутлоадер с включенным WDT из основной программы по ошибке/или не по ошибке. Или напр, с установленным фузом WDTON..
WDT надо учитывать в бутлоадере.
Go to the top of the page
 
+Quote Post
Igor26
сообщение Jul 24 2007, 04:53
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 521
Регистрация: 10-02-05
Пользователь №: 2 544



Цитата
WDT надо учитывать в бутлоадере

Безоговорочно согласен!
Когда я писАл самый первый бутлоадер, то только с включеным WDT смог выловить неприятный, редко возможный, косяк.
Go to the top of the page
 
+Quote Post
IEC
сообщение Jul 24 2007, 07:54
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 22-03-05
Из: г. Харьков, Украина
Пользователь №: 3 598



Цитата(defunct @ Jul 24 2007, 00:26) *
Или напр, с установленным фузом WDTON..


А что, если установлен фуз WDTON, его действие можно запретить програмно?
Go to the top of the page
 
+Quote Post
Igor26
сообщение Jul 24 2007, 08:24
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 521
Регистрация: 10-02-05
Пользователь №: 2 544



Цитата
его действие можно запретить програмно?

Наоборот нельзя. Включен постоянно.
Go to the top of the page
 
+Quote Post

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

 


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


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