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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Прерывания в Atmel 8535
alx2
сообщение Jun 9 2008, 20:28
Сообщение #16


Местный
***

Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091



Цитата(artemm @ Jun 9 2008, 10:56) *
Если разрешить прерывания в обработчике какого-нить прерывания то будет шопопало.
Если в обработчике прерывания I2C разрешить прерывания, то МК зависает. (по крайней мере у меня)
Будет происходить не "шопопало", а "шонаписано". Если МК зависает, это значит, что обработчик написан неправильно, и не более того. Наверное стоило не делать поспешный вывод, что вложенные прерывания невозможны, а проанализировать ситуацию и найти ошибку. У меня во многих устройствах выполняется sei в обработчике - и никаких "шопопало", работает как часы. Подозреваю, что "шопопало" возникало из-за превышения дозволенного уровня вложенности обработчиков...


--------------------
Всего наилучшего,
Alex Mogilnikov
Go to the top of the page
 
+Quote Post
Maik-vs
сообщение Jun 10 2008, 12:39
Сообщение #17


Местный
***

Группа: Участник
Сообщений: 246
Регистрация: 4-12-06
Пользователь №: 23 101



Цитата(defunct @ Jun 9 2008, 15:42) *
И будут преведы, да еще и на ассемблере. smile.gif
Потом попробуйте к такой программе прилепить новую функциональность. (например еще один протокол обмена).

Преведы бывают хоть на ассемблере, хоть на с хоть на чём! Если руки не оттуда.
Функциональность программы для МК - гм, изначально несколько более строго задаётся, чем функциональность программы для большого компьютера. Брать куски из одного проекта для другого - да. Расширять функциональность - это если плохое ТЗ.

Цитата(defunct @ Jun 9 2008, 15:42) *
почему многие так и рвутся получить проблему (через одно место работая с прерываниями)? А потом эту проблему исправлять опять же через то же самое место?!

Потому что многих жмёт пространство и время. Про коробочку размером с "крону" написано. Про время: попробуйте сделать хоть генератор текста для врезания в видеосигнал - будете считать циклы процессора. С карандашом в руках, совсем несложно.
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 10 2008, 14:22
Сообщение #18


кекс
******

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



Цитата(Maik-vs @ Jun 10 2008, 15:39) *
Преведы бывают хоть на ассемблере, хоть на с хоть на чём! Если руки не оттуда.

На ассемблере преведов на порядок больше, и руки тут не при чем.
Зерно примитивов меньше - текста больше, сложность программы выше.
Программа получается ДУБОВАЯ - практически не подлежащая вразумительному расширению.

Цитата
Функциональность программы для МК - гм, изначально несколько более строго задаётся, чем функциональность программы для большого компьютера. Брать куски из одного проекта для другого - да.

У кого как, мне важнее time-to-market и возможность заливать в одно и тоже железо разное ПО. Постепенно наращивать функциональность приходится - допустим выпустят новый Сепам или МРЗС и еще какую-то байду, добавить их к уже имеющейся прошивке нет проблем, и все управляющие устройства сразу умеют с ними работать. Надо только обновить прошивку.
За примерами далеко ходить не надо -
DVD/CD-RW - поддержка дисков разных производителей часто добавляется уже после выхода привода в продажу;
Wireless AP / Router'ы - добавление различных режимов и служб тоже происходит после.
и т.п.
Цитата
Расширять функциональность - это если плохое ТЗ.

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

Цитата
Потому что многих жмёт пространство и время.

Пространство меня не жмет. Хоть в медном тазу можно клепать, лишь бы крепилось на дин-рейку.
А про время, я вас умаляю. Ассемблеру с C не тягяться в этом.
Улыбнуло. ;>

Цитата
Про коробочку размером с "крону" написано. Про время: попробуйте сделать хоть генератор текста для врезания в видеосигнал - будете считать циклы процессора. С карандашом в руках, совсем несложно.

Мне не нужен генератор врезки текста, но например в IP router я смогу при необходимости легко добавить telnet консольку или http сервер или фильтр какой-нить хитроумный.
Go to the top of the page
 
+Quote Post
galjoen
сообщение Jun 10 2008, 15:17
Сообщение #19


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(defunct @ Jun 10 2008, 18:22) *
На ассемблере преведов на порядок больше, и руки тут не при чем.
Зерно примитивов меньше - текста больше, сложность программы выше.
Программа получается ДУБОВАЯ - практически не подлежащая вразумительному расширению.
У кого как, мне важнее time-to-market и возможность заливать в одно и тоже железо разное ПО. Постепенно наращивать функциональность приходится - допустим выпустят новый Сепам или МРЗС и еще какую-то байду, добавить их к уже имеющейся прошивке нет проблем, и все управляющие устройства сразу умеют с ними работать. Надо только обновить прошивку.

А я наоборот как наполучал преведы на С (для АВР), так на асм перешёл. И С для АВР забыл как страшный сон (для компьютера конечно на С++ пишу). У АВР 80% работы - это работа с USART, CAN, SPI, таймерами, портами др. устройсвами. А в этом С только мешает. Напишешь на С и понимаешь, что написал программу на ассемблере с помощью С. Всё равно приходится весь получившийся ассемблерный текст контролировать.
А насчёт расширяемости:
1. Я сначала USB-HID написал и обращение через него к специфическим задачам.
2. Самопрограммирование через USB.
3. Всякие модбасы и др. USARTовские дела.
4. Mass Storage.
5. FAT (при работе без подключения к компьютеру).
6. SLEEP (работа от ионистора).
7. CAN.
Всё это работает в разных проектах в разных вариантах. В т.ч. и всё это в одном устройстве (на AT90CAN128). И прошивки без проблем через интернет обновляются самими пользователями. Причём они даже об этом иногда не знают.
Я всё это к тому, что и на асме и на С можно как плохо, так и хорошо писать.
Go to the top of the page
 
+Quote Post
777777
сообщение Jun 11 2008, 05:51
Сообщение #20


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

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(galjoen @ Jun 10 2008, 19:17) *
А я наоборот как наполучал преведы на С (для АВР), так на асм перешёл.


Вместо того, чтобы найти их причину? smile.gif
Go to the top of the page
 
+Quote Post
galjoen
сообщение Jun 11 2008, 14:56
Сообщение #21


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(777777 @ Jun 11 2008, 09:51) *
Вместо того, чтобы найти их причину? smile.gif

Нашёл несколько причин. Одна из них - несохранение С некоторых регистров в прерываниях. Искал долго т.к. вылезало редко, не во всех режимах, вылезало совсем в другом месте (в том месте которое было прервано после возврата с испорченными регистрами) и приводило к тому, что процессор выдавал на шину 1, а устройство 0. При этом происходило замыкание, срабатывала защита по питанию, срабатывал BOD, процессор перезапускался. Столько времени я бесполезно потерял... Понимаю, что в новых версиях это исправлено, но у меня уже какая-то аллергия на С для АВР выработалась. Мне всё кажется, что это глюк не мой, а С. А когда на асме пишу, то между мной и процессором никого нет... Макрокоманд для стандартных случаев понаписал. Если надо быстро сделать (и можно неоптимально), то макрокомандами пользуюсь. В принципе что-то типа своего языка на макрокомандах получилось.
ЗЫ Прошу прощения за офтоп.
Go to the top of the page
 
+Quote Post
Maik-vs
сообщение Jun 12 2008, 11:11
Сообщение #22


Местный
***

Группа: Участник
Сообщений: 246
Регистрация: 4-12-06
Пользователь №: 23 101



Вот оно, ключевое слово:
Цитата(defunct @ Jun 10 2008, 18:22) *
У кого как, мне важнее time-to-market ...


Цитата(defunct @ Jun 10 2008, 18:22) *
За примерами далеко ходить не надо -
DVD/CD-RW,Wireless AP / Router'ы и т.п.

ИМХО для этого всего avr-ки мягко говоря, слабоваты. Или есть примеры DVD-RW на любимой народом восьмой меге? Нет, не контроллер евонного двигателя, а весь DVD привод?

Цитата(defunct @ Jun 10 2008, 18:22) *
Пространство меня не жмет. Хоть в медном тазу можно клепать, лишь бы крепилось на дин-рейку.
А про время, я вас умаляю. Ассемблеру с C не тягяться в этом.
Улыбнуло. ;>

Прям представил медный таз, повешенный на DIN-рейку smile.gif УмАлять меня не надо, и улыбаться про себя типа как Джоконда. Лучше расскажите, как на С написать обработчик прерывания, длиной, например, 10 тактов процессора.
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 12 2008, 18:49
Сообщение #23


кекс
******

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



Цитата(Maik-vs @ Jun 12 2008, 14:11) *
Лучше расскажите, как на С написать обработчик прерывания, длиной, например, 10 тактов процессора.

Что есть такты и зачем именно 10? Что это даст?
Прерывания использую не ради тактов, а ради своевременной реакции на события системы. И мне производительности хватает.

Цитата
ИМХО для этого всего avr-ки мягко говоря, слабоваты.

Если пользовать все обработчики длиной в 10 тактов, то конечно AVRки будут слабоваты для всего.
Go to the top of the page
 
+Quote Post
sKWO
сообщение Jun 13 2008, 10:42
Сообщение #24


Местный
***

Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530



Цитата(defunct @ Jun 12 2008, 22:49) *
Если пользовать все обработчики длиной в 10 тактов, то конечно AVRки будут слабоваты для всего.

+1 biggrin.gif


--------------------
нельзя недооценивать предсказуемость глупости
Go to the top of the page
 
+Quote Post
733259
сообщение Jun 13 2008, 18:09
Сообщение #25


Местный
***

Группа: Участник
Сообщений: 205
Регистрация: 8-03-05
Пользователь №: 3 146



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

Цитата
А у меня не зависает. Проверено.
Вы пишите на ассемблере, отлаживайте. И тогда всё будет нормально, хоть с вложенными прерываниями, хоть с выложенными
У меня тоже не зависает, проверено.
Пишу на С (gcc), как-то и особой отладки не разу не требовалось.
Go to the top of the page
 
+Quote Post
Maik-vs
сообщение Jun 14 2008, 18:52
Сообщение #26


Местный
***

Группа: Участник
Сообщений: 246
Регистрация: 4-12-06
Пользователь №: 23 101



Цитата(defunct @ Jun 12 2008, 22:49) *
Если пользовать все обработчики длиной в 10 тактов, то конечно AVRки будут слабоваты для всего.

Вы просто не умеете их готовить biggrin.gif
Go to the top of the page
 
+Quote Post
sKWO
сообщение Jun 15 2008, 09:05
Сообщение #27


Местный
***

Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530



Цитата(Maik-vs @ Jun 12 2008, 15:11) *
Прям представил медный таз, повешенный на DIN-рейку smile.gif УмАлять меня не надо, и улыбаться про себя типа как Джоконда. Лучше расскажите, как на С написать обработчик прерывания, длиной, например, 10 тактов процессора.

Прочитайте AVR035, многие сишные команды дают одинаковый код если бы Вы писали на ассемблере, ну а зная ключевые слова конкретного компилятора можете вмешаться в сохранение рабочих регистров или исключить их сохранение , ну и обработчик прерываний будет коротеньким.
С другой стороны если вы имеете ввиду построение обработчика прерывания таким образом чтобы немедленно отреагировать на определённое событие ну а в основном цыкле делать его обработку - тогда зачем заморачиваться с асм?


--------------------
нельзя недооценивать предсказуемость глупости
Go to the top of the page
 
+Quote Post
733259
сообщение Jun 15 2008, 09:42
Сообщение #28


Местный
***

Группа: Участник
Сообщений: 205
Регистрация: 8-03-05
Пользователь №: 3 146



Не по теме, но не удержался biggrin.gif
Код
register uint8_t count asm("r2"),
                 tsreg asm("r3");

SIGNAL (SIG_INTERRUPT0) __attribute__((naked));
SIGNAL (SIG_INTERRUPT0){
  tsreg = SREG;          // 1 такт
  count++;               // 1 такт
  SREG = tsreg;          // 1 такт
  asm volatile("reti");  // 4 такта
}
Обработчик на gcc, для подсчета импульсов, например. count потом обрабатываем в основном цикле. И правда - зачем заморачиваться с ассемблером?

Сообщение отредактировал 733259 - Jun 15 2008, 10:04
Go to the top of the page
 
+Quote Post

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

 


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


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