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

 
 
5 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> В какой моде запускать main?, Вот в чем вопрос.
DpInRock
сообщение Apr 17 2009, 00:51
Сообщение #1


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Почему-то я не смог обеспечить вложенные прерывания, если запускаю процессор
в SVC mode. __nested подвешивает тогда прерывания намертво. И никаких тебе приоритетных прерываний.

Таким образом только USER or System.

А без вложенных прерываний - жизнь не мила. Символы RS232 приемника теряются.

Но где-то мелькало сообщение, что WinCE запускает программы юзера в SVC mode. (Товарищ, который об этом писал из пользовательской программы менял таблицу распределения виртуальной памяти и вообще, делал все, что хотел.)

Возможно, если вход-выход из IRQ писать отдельно и читать руками вектор прерывания, то может и можно что-то сделать? И стоит ли?
А то уж очень не хочется ломать прямую загрузку вектора из АИК. Типа, одна команда, практически.

И чем так плоха System mode?


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 17 2009, 01:09
Сообщение #2


Гуру
******

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



Цитата(DpInRock @ Apr 17 2009, 04:51) *
А без вложенных прерываний - жизнь не мила. Символы RS232 приемника теряются.

Для UART'ов есть PDC. Дергать процессор прерыванием на каждый байт, я бы сказал, неразумно.

Цитата(DpInRock @ Apr 17 2009, 04:51) *
Возможно, если вход-выход из IRQ писать отдельно и читать руками вектор прерывания, то может и можно что-то сделать? И стоит ли?
А то уж очень не хочется ломать прямую загрузку вектора из АИК. Типа, одна команда, практически.

Для начала нужно разобраться, а стоит ли огород городить (см. выше).
Естественно, вложенные прерывания обеспечить можно. Не знаю насчет __nested (IAR, как я понимаю?), но уж руками точно. И прямую загрузку вектора ломать для этого не понадобится.

Цитата(DpInRock @ Apr 17 2009, 04:51) *
И чем так плоха System mode?

Ничем - нормальный привилегированный режим.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Apr 17 2009, 11:44
Сообщение #3


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Было бы нагло начинать писать программу с PDC для DBGU. Тем более, из средств отладки - только 4 светодиода на плате.
(Но попробую. По крайней мере приемник. У звука сделал большой буфер, чтобы пореже дергал (раз в 16 мс). А он больше 100 микросекунд иногда забирает. )

Просто чукче некогда было учить матчасть. А примеров от Атмела с использованием пряиого чтения из АИС не нашел. Все норовят свой обработчик вставить и руками АИС читать. А __nested меняет IRQ на SYS. А у меня по жизни майн был в SVC. Почему? Supervisor как слово красивше. А обработчики сишные так и оставались в IRQ до конца. А все примеры норовят этот IRQ поменять на что-то другое. Видимо, стек экономят. Других причин не увидилось. А мне стека не жалко.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 17 2009, 11:51
Сообщение #4


Гуру
******

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



Цитата(DpInRock @ Apr 17 2009, 15:44) *
А все примеры норовят этот IRQ поменять на что-то другое. Видимо, стек экономят. Других причин не увидилось.

Если делаются вложенные прерывания, то IRQ, естественно, надо на что-то менять. SYS - единственно верный универсальный вариант.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Apr 17 2009, 13:08
Сообщение #5


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Вот как раз про "естественно" я еще не дочитал. Вернее фраза "The ARM core enters Interrupt mode, if it has not already done so" намекнула, что IRQ может прерываться IRQ. И я забил на дальейшее чтение.

(Просто чтобы обеспечить работу всех этих меню, wallpapers, всяких картинок, шрифтов приходится кучу программ в дельфях писать. Т.е. программированием вообще не занимаюсь. Занимаюсь расставлением неимоверной кучи данных по отсекам. Спасибо борланду.)


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
singlskv
сообщение Apr 17 2009, 15:25
Сообщение #6


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(DpInRock @ Apr 17 2009, 15:44) *
Было бы нагло начинать писать программу с PDC для DBGU. Тем более, из средств отладки - только 4 светодиода на плате.
(Но попробую. По крайней мере приемник. У звука сделал большой буфер, чтобы пореже дергал (раз в 16 мс). А он больше 100 микросекунд иногда забирает. )

А DBGU именно для отладки используется ?
Конечно нужно использовать PDC, правда у DBGU нет очень удобного для этого флага TIMEOUT.
Но в принципе, если речь об отладке, то прерывания DBGU вобще не нужны,
достаточно задать буфер приличной длины и опрашивать чего там напередавалось в каком-нить
переодическом прерывании(если есть) в системе.
ИМХО, это совсем не случай для вложенности прерываний...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 17 2009, 15:35
Сообщение #7


Гуру
******

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



Цитата(singlskv @ Apr 17 2009, 19:25) *
Конечно нужно использовать PDC, правда у DBGU нет очень удобного для этого флага TIMEOUT.

Да, Атмелы пожмотились почему-то на такую ерунду sad.gif
Go to the top of the page
 
+Quote Post
singlskv
сообщение Apr 17 2009, 20:00
Сообщение #8


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(aaarrr @ Apr 17 2009, 19:35) *
Да, Атмелы пожмотились почему-то на такую ерунду sad.gif
ага, у мня в проекте где много интерфейсов(то есть почти все какие есть в SAM7А3) из-за этого отдельные линии квитирования

Если автор топика не против,то задам свой вопрос почти по теме..
помница Вы упоминали о ~2 случаях использования вложенных прерываний на АРМ
очень просто интересно, я несколько раз порывался написать свои хитрые обработчики с
возможностью вложенных прерываний и так их и не написал тк каждый раз был
придуман алгоритм который будет лучше без всяких вложенных прерываний,
ну и на обработчиках IRQ я тоже не хило при этом экономлю...
Вот чисто для себя решил что IRQ только "последовательно"(но короткие обработчики),
а если нужно чего-нить супербыстрое то FIQ и 1 источник...

Вот и хотелось бы услышать о Ваших случаях когда вложенные прерывания понадобились...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 17 2009, 20:38
Сообщение #9


Гуру
******

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



Цитата(singlskv @ Apr 18 2009, 00:00) *
Вот и хотелось бы услышать о Ваших случаях когда вложенные прерывания понадобились...

Например, в LED экране на SAM7X:
- 3 прерывания (2 таймера и SPI) обеспечивают развертку, очень короткие, имеют высший приоритет (т.к. тайминги жесткие, развертку ломать нельзя).
- прерывание от EMAC'а имеет приоритет на единицу ниже: поток здоровый (~80Мбит/с в обе стороны), реагировать нужно быстро.
- перывание от UART'а.
- прерывание от PIT.

Еще в проекте измерительного стенда примерно со столь же тяжелым раскладом.
Короче, вложенные прерывания оказываются востребованы тогда, когда нужно разрулить большое число источников с низкой латентностью. В большинстве же случаев действительно достаточно обычных IRQ или IRQ+FIQ.

P.S. Пользуясь случаем, хочу послать луч ненависти инженерам фирмы Атмел за фиксированный размер приемного буфера EMAC в 128 байт.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Apr 17 2009, 21:00
Сообщение #10


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(aaarrr @ Apr 18 2009, 00:38) *
Например, в LED экране на SAM7X:
- 3 прерывания (2 таймера и SPI) обеспечивают развертку, очень короткие, имеют высший приоритет (т.к. тайминги жесткие, развертку ломать нельзя).
- прерывание от EMAC'а имеет приоритет на единицу ниже: поток здоровый (~80Мбит/с в обе стороны), реагировать нужно быстро.
- перывание от UART'а.
- прерывание от PIT.
рулить разверткой - понятно, там это главная реалтайм задачка...
Цитата
Еще в проекте измерительного стенда примерно со столь же тяжелым раскладом.
Измерительтный стенд говорите....
Влияние "цифрового" джиттера на измерение частоты ?
Цитата
Короче, вложенные прерывания оказываются востребованы тогда, когда нужно разрулить большое число источников с низкой латентностью. В большинстве же случаев действительно достаточно обычных IRQ или IRQ+FIQ.

Мы это стараемся разруливать с помощью дополнительных процов...переферийных...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 17 2009, 21:12
Сообщение #11


Гуру
******

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



Цитата(singlskv @ Apr 18 2009, 01:00) *
рулить разверткой - понятно, там это главная реалтайм задачка...

На самом деле, одна из самых мелких по сложности и занимаемым ресурсам. Но да, реалтайм и все тут.

Цитата(singlskv @ Apr 18 2009, 01:00) *
Измерительтный стенд говорите....
Влияние "цифрового" джиттера на измерение частоты ?

Нет, просто монстрическая система из-за большого числа источников данных.

Цитата(singlskv @ Apr 18 2009, 01:00) *
Мы это стараемся разруливать с помощью дополнительных процов...переферийных...

Дополнительный проц - дополнительные деньги. И дополнительный разноплановый геморрой - программ писать в два раза больше, кроме того, нужно еще придумывать интерфейсы взаимодействия.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Apr 17 2009, 21:34
Сообщение #12


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(aaarrr @ Apr 18 2009, 01:12) *
Дополнительный проц - дополнительные деньги. И дополнительный разноплановый геморрой - программ писать в два раза больше, кроме того, нужно еще придумывать интерфейсы взаимодействия.
А вот здесь совсем не соглашусь...
Доп проц конечно деньги, но очень небольшие по сравнению с основным(1-1,5$ +)
если нужен реальный реалтайм то других вариантов практически нет
к примеру, опрос N входов с определением частоты на них
там цифровой джиттер самое важное, сделать его разумным при наличии других интерфейсов невозможно...
Ну вот пример, можно ли на АРМ7 который подключен к ПЦ через USB(961Кбод) и 3 x RS232(115Кбод)
опрашивать 4-8 сигналов частотой 10Кгц ?
А при наличии переферийной меги8 уже можно...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 17 2009, 21:41
Сообщение #13


Гуру
******

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



Цитата(singlskv @ Apr 18 2009, 01:34) *
цифровой джиттер самое важное, сделать его разумным при наличии других интерфейсов невозможно...

Так его на ARM'е в принципе сделать разумным затруднительно, безотносительно наличия интерфейсов.

Цитата(singlskv @ Apr 18 2009, 01:34) *
Ну вот пример, можно ли на АРМ7 который подключен к ПЦ через USB(961Кбод) и 3 x RS232(115Кбод)
опрашивать 4-8 сигналов частотой 10Кгц ?
А при наличии переферийной меги8 уже можно...

Уточните, что значит "опрашивать сигнал частотой 10Кгц".

А, например, если прошивку обновить в периферийном контроллере надо - уже проблема. Сделать мостик в основном, да наворотить софт для PC, который соберет/разберет несколько прошивок в один файл (ибо делать больше одного - не уважать клиента) и т.п.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Apr 17 2009, 21:58
Сообщение #14


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(aaarrr @ Apr 18 2009, 01:41) *
Так его на ARM'е в принципе сделать разумным затруднительно, безотносительно наличия интерфейсов.
Ну тоже можно(и я над этим думаю для младших чипов как перферийных) при ограничении использования
инструкций с набором регистров.
Цитата
Уточните, что значит "опрашивать сигнал частотой 10Кгц".
Опрашивать с частотой 20Кгц+, ну и соответственно уметь "поймать" меандр с частотой 10Кгц(за 1 сек например).
Цитата
А, например, если прошивку обновить в периферийном контроллере надо - уже проблема. Сделать мостик в основном, да наворотить софт для PC, который соберет/разберет несколько прошивок в один файл (ибо делать больше одного - не уважать клиента) и т.п.
Вот здесь Вы очень правы, то есть как бы и все инструменты есть(для ПЦ), но как
только задумываешься их прикрутить для реалтаймовских вещей то сразу желание пропадает...
Ну наверное для этих частей просто должны быть прошивки которые "никогда" не меняются...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 17 2009, 22:08
Сообщение #15


Гуру
******

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



Цитата(singlskv @ Apr 18 2009, 01:58) *
Ну тоже можно(и я над этим думаю для младших чипов как перферийных) при ограничении использования
инструкций с набором регистров.

Объяснить это желание компилятору только затруднительно smile.gif Да и все пересылки данных автоматически пострадают.
Лучше тогда не использовать прерывания... да и ARM тоже.

Цитата(singlskv @ Apr 18 2009, 01:58) *
Ну наверное для этих частей просто должны быть прошивки которые "никогда" не меняются...

Никогда не говори "никогда" smile.gif Если в системе что-то может меняться, то оно обязательно потребует изменений.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Apr 17 2009, 22:12
Сообщение #16


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



DBGU у меня для всего используется. А это чем-то плохо? Ятак решил, что даже очень хорошо. Все дела по одному кабелю. И фирмаврь заливать, и в случае серьезного трабла - родной загрузчик - тут же. Тем более, свободных выводов у меня нет вообще.

Вложенные прерывания на самом деле завсегда пригодятся и надо заранее к этому готовиться. Вот я полдня потратил, пока догадался, почему короткие команды в систему проходят всегда, а когда файл большой заливаю (порциями по килобайту), то все умирает.

А на ассемблере больше нет желания писать. А на сях только полгода боле-менее активно программирую. Спасибо Иару 4, а особенно 5.3.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 17 2009, 22:26
Сообщение #17


Гуру
******

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



Цитата(DpInRock @ Apr 18 2009, 02:12) *
DBGU у меня для всего используется. А это чем-то плохо? Ятак решил, что даже очень хорошо. Все дела по одному кабелю. И фирмаврь заливать, и в случае серьезного трабла - родной загрузчик - тут же. Тем более, свободных выводов у меня нет вообще.

В Вашем случае я бы выбрал USB - тоскливо будет заливать разросшуюся программу через UART. И родным загрузчиком тоже поддерживается.

Цитата(DpInRock @ Apr 18 2009, 02:12) *
А на ассемблере больше нет желания писать. А на сях только полгода боле-менее активно программирую. Спасибо Иару 4, а особенно 5.3.

Лиха беда начало smile.gif
Go to the top of the page
 
+Quote Post
singlskv
сообщение Apr 17 2009, 22:28
Сообщение #18


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(aaarrr @ Apr 18 2009, 02:08) *
Объяснить это желание компилятору только затруднительно smile.gif Да и все пересылки данных автоматически пострадают.
Лучше тогда не использовать прерывания... да и ARM тоже.
В подобных системах(синхронный опрос входов) прерывание принципиально одно,
а как его синхронизировать... ну есть варианты с парой таймеров например...
но пока еще думаю...
Цитата
Никогда не говори "никогда" smile.gif Если в системе что-то может меняться, то оно обязательно потребует изменений.
конечно может поменяться..., но этот момент по возможности будет оттягиваться до бесконечности,
в конце концов софт на нижнем уровне(переферийном) написан просто "идеально" smile.gif ...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 17 2009, 22:40
Сообщение #19


Гуру
******

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



Цитата(singlskv @ Apr 18 2009, 02:28) *
В подобных системах(синхронный опрос входов) прерывание принципиально одно,
а как его синхронизировать... ну есть варианты с парой таймеров например...
но пока еще думаю...

ИМХО, если сразу не получается добиться удовлетворительных результатов, то это прямая дорога к использованию CPLD/FPGA.
С софтом можно возиться бесконечно, но только при наличии экономической целесообразности.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Apr 17 2009, 22:40
Сообщение #20


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(DpInRock @ Apr 18 2009, 02:12) *
Вложенные прерывания на самом деле завсегда пригодятся и надо заранее к этому готовиться.

Вот в том то и дело что они(Вложенные прерывания) пригодятся Вам 1 раз из 100
но при этом, написав обработчик умеющий работать с вложенными прерываниями,
он у Вас будет везде...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 17 2009, 22:46
Сообщение #21


Гуру
******

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



Цитата(singlskv @ Apr 18 2009, 02:40) *
он у Вас будет везде...

Нет, только на прерываниях с приоритетом меньше максимального. Да и не мешает ни разу - в любой системе можно разумно расставить приоритеты. О "бездумном", как бы сказал коллега zltigo, расточении памяти не упоминаю, ибо на самом деле оно несущественно в 99.9% случаев.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Apr 17 2009, 22:53
Сообщение #22


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(aaarrr @ Apr 18 2009, 02:40) *
ИМХО, если сразу не получается добиться удовлетворительных результатов, то это прямая дорога к использованию CPLD/FPGA.
С софтом можно возиться бесконечно, но только при наличии экономической целесообразности.

Ну я пока толком и не поробовал(на АРМ) но думаю что 8 сигналов частотой до 50(может 100)Кгц это вполне доступно...


Цитата(aaarrr @ Apr 18 2009, 02:46) *
Нет, только на прерываниях с приоритетом меньше максимального. Да и не мешает ни разу - в любой системе можно разумно расставить приоритеты. О "бездумном", как бы сказал коллега zltigo, расточении памяти не упоминаю, ибо на самом деле оно несущественно в 99.9% случаев.
Не очень понял как должен выглядеть обработчик IRQ что бы он зависил от приоритетов.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 17 2009, 22:59
Сообщение #23


Гуру
******

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



Цитата(singlskv @ Apr 18 2009, 02:53) *
Не очень понял как должен выглядеть обработчик IRQ что бы он зависил от приоритетов.

Очень просто: делаем отдельные обертки для каждого прерывания с приоритетом ниже максимального, для максимального используем обычные прерывания.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Apr 17 2009, 23:03
Сообщение #24


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(aaarrr @ Apr 18 2009, 02:59) *
Очень просто: делаем отдельные обертки для каждого прерывания с приоритетом ниже максимального, для максимального используем обычные прерывания.
А зачем ? Ведь все равно уйдем обрабатывать самое приоритетное ?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 17 2009, 23:07
Сообщение #25


Гуру
******

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



Затем, чтобы получить возможность уйти на обработку самого приоритетного.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Apr 17 2009, 23:13
Сообщение #26


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(aaarrr @ Apr 18 2009, 03:07) *
Затем, чтобы получить возможность уйти на обработку самого приоритетного.
Тогда это уже ловля "блох" и где-то в общем алгоритме допущена ошибка...
ИМХО, при одновременном возникновении прерываний из разных источников
тратить время на определение "кто приоритетьнее" это просто глупость...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 17 2009, 23:21
Сообщение #27


Гуру
******

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



Цитата(singlskv @ Apr 18 2009, 03:13) *
Тогда это уже ловля "блох" и где-то в общем алгоритме допущена ошибка...
ИМХО, при одновременном возникновении прерываний из разных источников
тратить время на определение "кто приоритетьнее" это просто глупость...

Так задача-то стоит обеспечить выполнение прерывания, имеющего более высокий приоритет, "внутри" прерывания с более низким. Определяет "кто приоритетнее" железка, но для того, чтобы прервать одно прерывание другим, нужно сделать некоторые софтовые телодвижения, для чего и нужно обертка.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Apr 17 2009, 23:24
Сообщение #28


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(aaarrr @ Apr 18 2009, 03:21) *
Так задача-то стоит обеспечить выполнение прерывания, имеющего более высокий приоритет, "внутри" прерывания с более низким. Определяет "кто приоритетнее" железка, но для того, чтобы прервать одно прерывание другим, нужно сделать некоторые софтовые телодвижения, для чего и нужно обертка.
А просто FIQ для этого не хватит ?
Ну или для Атмел просто IRQ как FIQ ?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 17 2009, 23:28
Сообщение #29


Гуру
******

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



"Просто FIQ" дает только один источник с более высоким приоритетом.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Apr 17 2009, 23:31
Сообщение #30


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(aaarrr @ Apr 18 2009, 03:28) *
"Просто FIQ" дает только один источник с более высоким приоритетом.
И ИМХО, этого достаточно...
А у атмел есть еще Fast Forcing...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 17 2009, 23:36
Сообщение #31


Гуру
******

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



Цитата(singlskv @ Apr 18 2009, 03:31) *
И ИМХО, этого достаточно...

Не всегда, пример я приводил. 9 приоритетов лучше двух, из которых один только с одним источником.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Apr 17 2009, 23:38
Сообщение #32


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(aaarrr @ Apr 18 2009, 03:28) *
"Просто FIQ" дает только один источник с более высоким приоритетом.
Попробую просто пояснить свою мысль...
Почти все кто переходит на АРМ с некоторым упорством достойным лучшего применеия пишут
свой обработчик IRQ(который замечу вызывается всегда)
и в этом обработчике всегда предусмотреннны все возможные фичи типа вызова вложенных прерываний итд...
только вот все эти фичи нужны в 1% проектов а пользуют их всегда...
Странная история...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 17 2009, 23:44
Сообщение #33


Гуру
******

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



Цитата(singlskv @ Apr 18 2009, 03:38) *
Почти все кто переходит на АРМ с некоторым упорством достойным лучшего применеия пишут
свой обработчик IRQ(который замечу вызывается всегда)

Еще раз: не всегда.

Цитата(singlskv @ Apr 18 2009, 03:38) *
и в этом обработчике всегда предусмотреннны все возможные фичи типа вызова вложенных прерываний итд...

Это единственная фича, для которой нужен свой обработчик.

Цитата(singlskv @ Apr 18 2009, 03:38) *
только вот все эти фичи нужны в 1% проектов а пользуют их всегда...

Ну и что? Можно подумать, что это неподъемный труд - написать/скопипастить.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Apr 17 2009, 23:59
Сообщение #34


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(aaarrr @ Apr 18 2009, 03:44) *
Еще раз: не всегда.

Это единственная фича, для которой нужен свой обработчик.

Ну и что? Можно подумать, что это неподъемный труд - написать/скопипастить.
Труд вполне подъемный, но зачем ?
Зачем нужен весь этот лишний код в 99% проектов ?
Вот у меня под рукой есть маштабная(не маленькая) разработка на АРМ,
и вот эта фраза в коментах меня просто развеселила:
Код
#define DISABLE_NESTED_FIQ              // Запрет вложенности FIQ
#define DISABLE_NESTED_IRQ              // Запрет вложенности IRQ
                                        // Вложенность IRQ НЕОБХОДИМО запретить
                                        // для нормальной одновременной работы
                                        // моста на подчиненные сети USART
                                        // и алгоблочных запросов в подчиненную
                                        // сеть

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

и при этом мой код на этой же задачке намного быстрее(а я и не пытался сделать вложенные прерывания)...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 18 2009, 00:06
Сообщение #35


Гуру
******

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



Цитата(singlskv @ Apr 18 2009, 03:59) *
Труд вполне подъемный, но зачем ?
Зачем нужен весь этот лишний код в 99% проектов ?

А зачем делать круглые глаза при виде такого решения? Я не пропагандирую повсеместное использования вложенных прерываний, но иногда они действительно нужны.
Лишний код имеет объем порядка 80 байт на источник, что, согласитесь, не повод рвать на себе волосы.

Цитата(singlskv @ Apr 18 2009, 03:59) *
сначала долго и упорно писали весь код чтоб все работало с вложенными прерываниями
а потом оказалось что из-за не реентерабельности вложенные прерывания нужно запретить...

Из-за чего? При чем тут реентерабельность вообще?
Go to the top of the page
 
+Quote Post
singlskv
сообщение Apr 18 2009, 00:21
Сообщение #36


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(aaarrr @ Apr 18 2009, 04:06) *
Лишний код имеет объем порядка 80 байт на источник, что, согласитесь, не повод рвать на себе волосы.
Рвать волосы конечно не стоит, но допустим это обмен по i2c на скорости 400кбод
и проц работает на частоте 48Мгц.
400Кбод/9 = ~44Кбайт/сек (пиковая)
44Кбайт * "80 байт на источник"(только для выяснения причины)/4 = ~0.88Мбайт/сек (это только то что мы теряем на входе в прерывание)

дальше считать ?

я ни разу не понимаю почему нужно(обязательно) терять по 0,5мкс на кждый вход в прерывание...
Go to the top of the page
 
+Quote Post
defunct
сообщение Apr 18 2009, 00:33
Сообщение #37


кекс
******

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



Цитата(aaarrr @ Apr 17 2009, 23:38) *
P.S. Пользуясь случаем, хочу послать луч ненависти инженерам фирмы Атмел за фиксированный размер приемного буфера EMAC в 128 байт.

Какая разница какой длины приемный буфер?
128 абсолютно разумное число.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 18 2009, 00:35
Сообщение #38


Гуру
******

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



Цитата(singlskv @ Apr 18 2009, 04:21) *
дальше считать ?

За идиотский TWI опять-таки скажите спасибо атмеловцам. Прерываться ради него с частотой 44кГц неразумно, как и вообще прерываться с такой частотой.

Цитата(singlskv @ Apr 18 2009, 04:21) *
я ни разу не понимаю почему нужно(обязательно) терять по 0,5мкс на кждый вход в прерывание...

Да не обязательно. Ну, дайте Вы своему TWI высший приоритет - получите нулевой оверхед. А 0.5мкс потратите там, где и так уходит 50, и добавка не покажется заметной.
Все в конечном итоге зависит от конкретной системы, нельзя утверждать, что вложенные прерывания - это абсолютное зло, так же как и нельзя утверждать и обратное.

Цитата(defunct @ Apr 18 2009, 04:33) *
128 абсолютно разумное число.

О как! И в чем же состоит абсолют, хотелось бы мне услышать?

Мне вот почему-то кажется, что изменяемый размер буфера - гораздо более гибкое решение, Вы не находите?
Go to the top of the page
 
+Quote Post
defunct
сообщение Apr 18 2009, 00:40
Сообщение #39


кекс
******

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



Цитата(aaarrr @ Apr 18 2009, 03:35) *
О как! И в чем же состоит абсолют, хотелось бы мне услышать?

В золотой середине между 1536 и 1.
Видители когда надо принимать много и быстро, от фиксированного буфера не уйти.
Вопрос сколько его сделать?
Чем меньше тем сложнее и соответвенно медленнее с этим работать, чем больше - тем выше расход памяти.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 18 2009, 00:41
Сообщение #40


Гуру
******

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



Цитата(defunct @ Apr 18 2009, 04:33) *
Какая разница какой длины приемный буфер?

Большая, когда 100% пакетов в системе имеют фиксированный размер в 272 байта.
Go to the top of the page
 
+Quote Post
defunct
сообщение Apr 18 2009, 00:43
Сообщение #41


кекс
******

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



Цитата(aaarrr @ Apr 18 2009, 03:41) *
Большая, когда 100% пакетов в системе имеют фиксированный размер в 272 байта.

так уж и 100%? G.711-30?
пользуйте G.711-20 и будет щастье.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 18 2009, 00:45
Сообщение #42


Гуру
******

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



Цитата(defunct @ Apr 18 2009, 04:40) *
Видители когда надо принимать много и быстро, от фиксированного буфера не уйти.

Видите ли, мне приходилось иметь дело с разными MAC'ами, и почему-то нефиксированный размер входного буфера их разработчиков не смутил.

Цитата(defunct @ Apr 18 2009, 04:43) *
так уж и 100%? G.711-30?

100%. Не угадали.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Apr 18 2009, 00:45
Сообщение #43


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(aaarrr @ Apr 18 2009, 04:35) *
За идиотский TWI опять-таки скажите спасибо атмеловцам. Прерываться ради него с частотой 44кГц неразумно, как и вообще прерываться с такой частотой.
Уже много раз их поминал..., однако это не мешает мне работать через него с мегой на ~ 150Кбод
и 400 тоже возможно(если не делать искуственный оверхед smile.gif )
Цитата
Да не обязательно. Ну, дайте Вы своему TWI высший приоритет - получите нулевой оверхед.
Все в конечном итоге зависит от конкретной системы, нельзя утверждать, что вложенные прерывания - это абсолютное зло, так же как и нельзя утверждать и обратное.
Я и не утверждаю что это абсолютное зло, просто для меня странными выглядят попытки заставить это работать,
пользоваться этим всегда, а реально воспользоваться премуществами 1 раз в жизни...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 18 2009, 00:51
Сообщение #44


Гуру
******

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



Цитата(singlskv @ Apr 18 2009, 04:45) *
Уже много раз их поминал..., однако это не мешает мне работать через него с мегой на ~ 150Кбод
и 400 тоже возможно(если не делать искуственный оверхед smile.gif )

А мне вот наоборот приходилось снижать скорость до 20кГц, чтобы не слишком отвлекаться на прерывания от TWI.
Я уж не говорю о какой-то нездоровой прихоти инженеров Атмела, благодаря которой модуль влетает в underrun,
являясь мастером на синхронной в общем-то шине sad.gif

Цитата(singlskv @ Apr 18 2009, 04:45) *
Я и не утверждаю что это абсолютное зло, просто для меня странными выглядят попытки заставить это работать,
пользоваться этим всегда, а реально воспользоваться премуществами 1 раз в жизни...

Попытки полезны для мозга, для осознания назначения и особенностей работы различных режимов процессора, например.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Apr 18 2009, 01:01
Сообщение #45


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



У меня USB противопоказан. Типа, опторазвязка есть. Без нее от PC стоко гадости лезет...
А программный код почти написан. Максиму, еще столько же. Итогокило 10 в бинарнике. А вот ресурсы - нехилые. Одна wallpaper полмега откушывает. Вотщас срочно скачал jpeg и пытаюсь вычленить из этой кучи файлов только то, что надо для декомпрессии.И убрать всякие преобразователи в другие форматы. Чисто волпейперы на экран выводить.

Буду в этой библиотеке непонятное менять на понятное.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
defunct
сообщение Apr 18 2009, 01:01
Сообщение #46


кекс
******

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



Цитата(aaarrr @ Apr 18 2009, 03:45) *
Видите ли, мне приходилось иметь дело с разными MAC'ами, и почему-то нефиксированный размер входного буфера их разработчиков не смутил.

Ну дык почему же вы остановились на Atmel'е? Выбирайте такой MAC который наиболее подходит к вашей задаче.
Причем тут разработчики Atmel?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 18 2009, 01:05
Сообщение #47


Гуру
******

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



Цитата(DpInRock @ Apr 18 2009, 05:01) *
А вот ресурсы - нехилые. Одна wallpaper полмега откушывает.

Вот если бы Вы взяли RealView вместо IAR, то он бы со свистом эти ресурсы упаковал (не хуже RAR'а, проверено).
Go to the top of the page
 
+Quote Post
singlskv
сообщение Apr 18 2009, 01:06
Сообщение #48


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(aaarrr @ Apr 18 2009, 04:51) *
Попытки полезны для мозга, для осознания назначения и особенностей работы различных режимов процессора, например.
Я же не против попыток, я не поддерживаю повсеместное использование спецобработчиков IRQ там где это нафиг не нужно...
З.Ы. TWI ИМХО, можно разуливать почти всегда, по крайней мере после приведения логики обращений(чтение/запись) c
мегой к варианту общения с EEPROM траблов больше нет. Ну а частота прерываний... это все-таки уже вопрос об общеем
построении системы...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 18 2009, 01:09
Сообщение #49


Гуру
******

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



Цитата(defunct @ Apr 18 2009, 05:01) *
Ну дык почему же вы остановились на Atmel'е? Выбирайте такой MAC который наиболее подходит к вашей задаче.

По причине наличия у Атмела приличного SPI с DMA, и отсутствия LPC на момент начала проекта.

Цитата(defunct @ Apr 18 2009, 05:01) *
Причем тут разработчики Atmel?

Грех в них тапком не кинуть smile.gif Уж больно много приходится заниматься их продукцией, и качество оной не окрыляет.
Go to the top of the page
 
+Quote Post
defunct
сообщение Apr 18 2009, 01:13
Сообщение #50


кекс
******

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



Цитата(singlskv @ Apr 18 2009, 04:06) *
я не поддерживаю повсеместное использование спецобработчиков IRQ там где это нафиг не нужно...

+1

Цитата
Попытки полезны для мозга

Для мозга более полезно находить способы как обойтись без попыток.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 18 2009, 01:16
Сообщение #51


Гуру
******

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



Цитата(singlskv @ Apr 18 2009, 05:06) *
Я же не против попыток, я не поддерживаю повсеместное использование спецобработчиков IRQ там где это нафиг не нужно...

Дык и я не поддерживаю, хотя и не вижу в этом особого зла.

Цитата(singlskv @ Apr 18 2009, 05:06) *
З.Ы. TWI ИМХО, можно разуливать почти всегда, по крайней мере после приведения логики обращений(чтение/запись) c
мегой к варианту общения с EEPROM траблов больше нет. Ну а частота прерываний... это все-таки уже вопрос об общеем
построении системы...

Да, EEPROM - это, кажется, один из очень немногих относительно надежно работающих с TWI продуктов sad.gif

Цитата(defunct @ Apr 18 2009, 05:13) *
Для мозга более полезно находить способы как обойтись без попыток.

Да, например, задать глупый вопрос на форуме.
Go to the top of the page
 
+Quote Post
defunct
сообщение Apr 18 2009, 01:17
Сообщение #52


кекс
******

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



Цитата(aaarrr @ Apr 18 2009, 04:09) *
Грех в них тапком не кинуть smile.gif Уж больно много приходится заниматься их продукцией, и качество оной не окрыляет.

А мне их MAC нравится smile.gif - простой как пень, одинаковый на AVR32, SAM7 и SAM9 и быстрый. Что еще надо.
128 байтные буферы не смущают, т.к. имею дело с пакетами разной длины.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Apr 18 2009, 01:22
Сообщение #53


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(aaarrr @ Apr 18 2009, 05:16) *
Да, EEPROM - это, кажется, один из очень немногих относительно надежно работающих с TWI продуктов sad.gif
"Фишка" там в том, что если мастер требует еще данных то нужно ему их дать
"по-кругу" как в EEPROM... дальше все работает...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 18 2009, 01:23
Сообщение #54


Гуру
******

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



Цитата(defunct @ Apr 18 2009, 05:17) *
Что еще надо.

Чтобы в нем глюков не было. Например, обнаружил такую смешную вещь: иногда при сбросе бита TE в EMAC_NCR не сбрасывается TGO в EMAC_TSR, хотя если верить документации, должен сбрасываться по любому чиху.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Apr 18 2009, 01:27
Сообщение #55


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



И чего столько проблемсвложенностью образовалось?
Как оказалось все просто. Запускаемся в систем моде и ставим обработчику аттрибут _nested. Ну, и разрешаем внутри прерывание. И боле ни о чем не думаем. Никаких обработчиков на ассемблере.

А тут зато щастья привалило. Нашел полный аналог сишного jpeg на паскале. Щас разберусь в нем, а потом переведу обратно на Си. Чистый. Без ООП заморочек.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
singlskv
сообщение Apr 18 2009, 01:32
Сообщение #56


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(DpInRock @ Apr 18 2009, 05:27) *
И чего столько проблемсвложенностью образовалось?
Как оказалось все просто. Запускаемся в систем моде и ставим обработчику аттрибут _nested. Ну, и разрешаем внутри прерывание. И боле ни о чем не думаем. Никаких обработчиков на ассемблере.
Это шутка в пол шестого ?
Можно глянуть налистинг обработчиков ?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 18 2009, 01:33
Сообщение #57


Гуру
******

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



Не-а, не шутка. Почему это так удивляет?
Go to the top of the page
 
+Quote Post
singlskv
сообщение Apr 18 2009, 01:39
Сообщение #58


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(aaarrr @ Apr 18 2009, 05:33) *
Не-а, не шутка. Почему это так удивляет?
Патаму что пол шестого и nested я читаю исключительно как naked smile.gif
Спокойной ночи...
Go to the top of the page
 
+Quote Post
defunct
сообщение Apr 18 2009, 01:41
Сообщение #59


кекс
******

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



Цитата(aaarrr @ Apr 18 2009, 04:23) *
Чтобы в нем глюков не было. Например, обнаружил такую смешную вещь: иногда при сбросе бита TE в EMAC_NCR не сбрасывается TGO в EMAC_TSR, хотя если верить документации, должен сбрасываться по любому чиху.

Не сталкивался с подобным. Годами работает и не глючит.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 18 2009, 01:57
Сообщение #60


Гуру
******

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



Цитата(defunct @ Apr 18 2009, 05:41) *
Не сталкивался с подобным. Годами работает и не глючит.

А TE сбрасывать приходится? Ну, может просто повезло. Однако ситуация была отловлена вполне конкретно: TGO стоит, а передачи на самом деле нет.
Go to the top of the page
 
+Quote Post
defunct
сообщение Apr 18 2009, 02:47
Сообщение #61


кекс
******

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



Цитата(aaarrr @ Apr 18 2009, 04:57) *
А TE сбрасывать приходится? Ну, может просто повезло. Однако ситуация была отловлена вполне конкретно: TGO стоит, а передачи на самом деле нет.

Приходится, но это редкое явление, хотя устройств много... уже б наверное проявилось где-то/как-то.
Вот сейчас проделал небольшой эксперимент "в лоб", после установки EMAC_TSTART вставил сл. код:
Код
    ....
    // Start frame transmission.
    pEMAC->EMAC_NCR |= AT91C_EMAC_TSTART;

    delay_cycles( rnd() & 0xFFF );

    if (pEMAC->EMAC_TSR & AT91C_EMAC_TGO)
    {
        pEMAC->EMAC_NCR &= ~AT91C_EMAC_TE;
        r++;

        if (pEMAC->EMAC_TSR & AT91C_EMAC_TGO)
            f++; // TGO still set (reset failed)
        else
            s++; // TGO=0 (reset succeed)
    }
    ....
}

Пока r == s (уже > 100K)

PS: проц из относительно старой партии - 0616.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 18 2009, 13:08
Сообщение #62


Гуру
******

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



Цитата(defunct @ Apr 18 2009, 06:47) *
Вот сейчас проделал небольшой эксперимент "в лоб"

Спасибо, конечно, но это уж слишком "в лоб", у меня так тоже ничего не залипает. Есть еще куча условий, которые трудно будет воспроизвести... да и выделить тоже.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 27th June 2025 - 07:10
Рейтинг@Mail.ru


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