Например TDA7294

Форум РадиоКот • Просмотр темы - Ассемблер (ASM) для AVR в вопросах и ответах
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Ср апр 17, 2024 00:21:48

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 7597 ]     ... , , , 144, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср июл 11, 2012 09:05:17 
Опытный кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 52
Зарегистрирован: Чт дек 31, 2009 19:27:45
Сообщений: 842
Откуда: Бровари, Україна
Рейтинг сообщения: 0
shads писал(а):
Так если прерывание по сравнению, то там ошибка и не накапливается, зачем передвигать точку сравнения?
Уже объяснили, но повторю:
Если мы не будем сдвигать точку сравнения, то получим прерывание с тем же периодом, что и переполнение, просто сдвинутое по фазе. Иногда это и нужно, а инода удобно сделать импульсы тактирования чего-то ШИМ-ом, а по переполнению и по сравнению в прерываниях делать что-то сразу после соответствующих перепадов тактового сигнала.
В случае же с передвиганием точки сравнения мы получаем независимую сетку прерываний с частотой выше частоты переполнения и, в общем случае, асинхронную с ней. Для уменьшения писанины пусть нам не 9600 нужно было а 2400, так что добавляем по 48. Имеем прерывания в точках
0, 48, 96, 144, 192, 240, (тут проскочит прерывание переполнения), 32, 80, 128, 176, ...

shads писал(а):
Да вообщета для обмена по радиоканалу я не использую UART, использую свой обработчик на основе манчестера.
Несущественно. С манчестером на передачу удобно использовать модуль сравнения с аппаратным управлением ножкой в режиме инвертирования «toggle on compare». В зависимости от значения текущего бита и стадии его передачи, опять таки, смещаем OCR та величину в половину длительности бита или в полную. Следующее сравнение перекинет ножку и даст новое прерывание. В нём опять сдвинем OCR. При этом прерывания могут быть задержаны на время почти в половину длительности бита, но сам выходной сигнал манчестера будет идеальным, так как сформируется аппаратно. Хаотическая задержка прерывания на время до полубита ничего не испортит.
Код:
____----________--------____----____-  это выходной сигнал (аппаратно)
__-___-_______-_______-___-___-___-__  аж тут может производиться обработка прерывания
Приём можно взять на input compare и брать разность текущего значения регистра ICR с предыдущим, по ней вычислять длительность импульса и решать, что пришло и как это интерпретировать. Прерывание по переполнению при этом служит защитным интервалом, если прошло два переполнения, но ничего не было по input compare, значит, сигнал пропал / закончился. Занятость процессора — «дулі відсотка». Написать/отладить — гораздо быстрее, так как меньше завязок на все остальное.
Одно в таком решении плохо — исчезает повод для гордости «во как я всё потактово рассчитал». И еще могут обвинить в том, что проект сделан «как попало» (раз не сидел, такты команд не подсчитывал).

shads писал(а):
Да если надо будет то распихаю по разным, пока в этом проблемы нет. Вопрос, в том как в программе на С вставить ассемблерный блок, в частности обработчик прерываний.
...
А можно на С рарезервировать некоторые регистры контроллера, чтобы С их не использовал, обозвать эти регистры именами, и использовать из С и из Асма эти регистры совместно? Тогда основная прога будет на С, а к ней просто прилепить файл обработки прерываний написанный на Асме.....
Работу на асме, более длинную, чем десяток команд, в любом случае лучше не асм-вставкой в С делать, а отдельным асм-файлом. Регистры можно, причём и без асма, вручную разместить ключевые переменные. Смотреть в документацию на компилятор. Но, как уже писали, далеко не всегда это удобно (avr-gcc, например, для такой цели отдаёт только от R2 до R9), да не всегда и нужно.

_________________
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср июл 11, 2012 14:07:53 
Опытный кот
Аватар пользователя

Карма: 8
Рейтинг сообщений: 105
Зарегистрирован: Ср фев 22, 2012 01:25:21
Сообщений: 882
Рейтинг сообщения: 0
Леонид Иванович писал(а):
Советую плюнуть - и всё. Смириться, как получается в Си, так и пойдет.
Если 1 или 2 кГц, как у вас, то конечно нормально. Ну а 10 кГц, как у меня..... тем более у меня в этом прерывании организованы микросекундные задержки для 1wire. В обчем, пробовать надо.....

Леонид Иванович писал(а):
Для 1-Wire зачем прерывание 10 кГц
Вложение:
1wire.gif [30.25 KiB]
Скачиваний: 591
Такое решение удобно тем что не надо запрещать прерывания, с вытекающими отсюда плюсами.

Леонид Иванович писал(а):
Радиообмен не делал, но для него использовал бы UART
UART для радиообмена не очень подходит, лучше использовать протокол с синхронизированием каждого бита, например с фазовой модуляцией или с частотной модуляцией. По крайней мере такие протоколы везде применяются, хоть в радиопередаче, хоть у ИК пультов.

Леонид Иванович писал(а):
это проще, чем ковыряться в ассемблере.
Ну это скорее дело привычки, мне например удовольствие доставляет. Я бы не назвал это ковырянием. Тем более обычно один раз задачу решил и все, потом три сек ее вставить в новый проект. (мож у меня так из-за того что другого не знаю пока)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср июл 11, 2012 14:30:52 
Опытный кот
Аватар пользователя

Карма: 8
Рейтинг сообщений: 105
Зарегистрирован: Ср фев 22, 2012 01:25:21
Сообщений: 882
Рейтинг сообщения: 0
avreal писал(а):
Если мы не будем сдвигать точку сравнения, то получим прерывание с тем же периодом, что и переполнение.
Дык для этого есть режим таймера\счетчика «прерывание и сброс счетчика при совпадении», не надо ничего перезаписывать…..

avreal писал(а):
лучше не асм-вставкой в С делать, а отдельным асм-файлом.
Вот вот именно такой вариант интересует. Где бы примерчик или наводку для AVRStudio надыбать. Ато я даже не знаю с какой стороны к этому вопросу подходить…..


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср июл 11, 2012 15:03:52 
Опытный кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 52
Зарегистрирован: Чт дек 31, 2009 19:27:45
Сообщений: 842
Откуда: Бровари, Україна
Рейтинг сообщения: 0
Не, ну работать сегодня вообще не прёт...
shads писал(а):
Такое решение удобно тем что не надо запрещать прерывания, с вытекающими отсюда плюсами
Исходник 30-килобайтной картинкой вместо текстового файла — это такая типа защита ноухау? Так кому лень думать, тот и из картинки выковыряет, остальным просто неудобство. Вот только по соседству обсуждали.
Если уж пишете на ассемблере, то вместо 4 команд
Код:
   sec
   sbis   WirePIN, WireBIT
   clc
   ror   WireDtIn
можно три
Код:
   lsr   WireDtIn
   sbic   WirePIN, WireBIT
   ori   WireDtIn, 0x80
Если очень важно, чтобы WireDtIn был нижним регистром (хотя если подэкономить в другимх местах, то, глядишь, и место найдётся), то можно так:
Код:
   ldi   a, 15
WData5:   subi   a, 1
   brne   WData5
   ; После задержки тут C гарантированно обнулён
   sbic   WirePIN, WireBIT
   sec
   ror   WireDtIn

Ишшо раз: я очень многие другие практически не пишем на ассемблере не потому, что его не знаем...
Нет, ну исходник гифкой — это таки свинство.


И вообще можно было под WireDtOt и WireDtIn выделить один регистр, WireDtIO, из которого передавать и в который сразу принимать (правда, у Вас сохраняется значение WireDtOt, если это для того, чтобы при последовательном приёме не писать туда каждый раз 0xFF, то пожалуй лучше таки в один регистр и каждый раз писать).
Код:
   sec
   sbrs   WireDtOt, 0
   clc
   ror   WireDtOt
   brcc WData4
   cbi   WireDDR, WireBit
WData4:
   ldi   a, 15
WData5:   dec   a
   brne   WData5
   
   sec
   sbis   WirePIN, WireBIT
   clc
   ror   WireDtIn
Заменяется на
Код:
   sbrс   WireDtIO, 0
   cbi   WireDDR, WireBit
WData4:
   ldi   a, 15      ; ну тут подкорректировать время
WData5:   dec   a
   brne   WData5
   
   lsr   WireDtIO
   sbic   WirePIN, WireBIT
   ori   WireDtIO, 0x80
8 байт кода и один регистр сэкономили.
А если тут сказать «да подумаешь», то почему тогда и не на С?

_________________
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

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

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср июл 11, 2012 15:23:19 
Опытный кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 52
Зарегистрирован: Чт дек 31, 2009 19:27:45
Сообщений: 842
Откуда: Бровари, Україна
Рейтинг сообщения: 0
shads писал(а):
Дык для этого есть режим таймера\счетчика «прерывание и сброс счетчика при совпадении», не надо ничего перезаписывать…..
Тогда Вы таймер займёте весь для одной задачи. Например, только приёма или только передачи по soft-UART. Ну или наворачивать всё в одно прерывание, в чём я вижу мало радости.
Остальная часть аппаратуры таймера будет зря простаивать, работу, которую на неё можно было бы возложить — будет выполняться программно.
А если таймер будет free-running, то его переполнения (редкие, 450 герц) будут для динамической индикации (и идут всегда).
Прерывания по OCR0A / OCR0B для независимых передачи и приёма (и идут только тогда, когда действительно нужны).
Все независимые, в каждом прерывании только то, что надо. Не нужно в быстром прерывании доделивать до частоты динамической индикации и из-за этого гнать его всегда.

shads писал(а):
Где бы примерчик или наводку для AVRStudio надыбать. Ато я даже не знаю с какой стороны к этому вопросу подходить…..
Где-то в окрестностях WinAVR\doc\avr-libc\examples должен быть пример asmdemo и где-то в WinAVR\doc\avr-libc\avr-libc-user-manual файл group__asmdemo.html
Как отправная точка должен пойти.

_________________
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.


Последний раз редактировалось avreal Ср июл 11, 2012 15:26:04, всего редактировалось 1 раз.

Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср июл 11, 2012 15:24:33 
Опытный кот
Аватар пользователя

Карма: 8
Рейтинг сообщений: 105
Зарегистрирован: Ср фев 22, 2012 01:25:21
Сообщений: 882
Рейтинг сообщения: 0
avreal писал(а):
Исходник 30-килобайтной картинкой вместо текстового файла — это такая типа защита ноухау?
Не, ну зачем людям сразу дурные мотивы приписывать..... да еще свиньей обзывать неразобравшись. Скинул так тока ради удобочитаемости, там цвет сохранен, отступы красивые, приятнее анализировать, чем в корявом одноцветном блоке CODE. Неужеш вы меня таким тупым считаете, что я таким образом пытаюсь чегото там дать и недать..... Ну ладно, я не обижаюсь.....

avreal писал(а):
Если уж пишете на ассемблере, то вместо 4 команд...........
Вообще то я не просил совета в оптимизации, а показал пример моей реализации 1Wire в прерывании.
Удивитесь наверное но я тока год как на AVR светодиодом помигал..... какая речь может быть об оптимальном коде. Раньше кодил на другом семействе. За ваши замечания спасибо конечно, но я писал исходя из своего уровня познаний и так как мне удобно. Постепенно думаю узнаю многие подобные тонкости......


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср июл 11, 2012 15:38:49 
Опытный кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 52
Зарегистрирован: Чт дек 31, 2009 19:27:45
Сообщений: 842
Откуда: Бровари, Україна
Рейтинг сообщения: 0
shads писал(а):
Не, ну зачем людям сразу дурные мотивы приписывать..... да еще свиньей обзывать неразобравшись. Скинул так тока ради удобочитаемости
Ну, вообще-то, только один поступок обозван свинством, а не весь человек :-)
Я просто в упор не понял мотив. Для меня необходимость открыть фрагмент кода как картинку, иметь зависимость качества текста от масштаба (у каждого свой монитор и свои глаза, для текста в браузере свои настройки стоят, у меня с картинкой вышло не слишком удобно — при «родном» для картинки разрешении текст слишком крупный, я вижу гораздо мельче, а можно было бы больше строк уместить, а при масштабировании оно ж в размытость ушло, это ж картинка) плюс невозможность скопировать и подредактировать фрагмент — большое неудобство. А цвета... Ну оно может и хорошо, но далеко не главное.

shads писал(а):
какая речь может быть об оптимальном коде.
Ну так было ж написано:
shads писал(а):
там я вылизываю процедуры до байтов
я и показал где ещё лизнуть :)))

_________________
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср июл 11, 2012 18:02:17 
Друг Кота
Аватар пользователя

Карма: 82
Рейтинг сообщений: 1027
Зарегистрирован: Сб апр 02, 2011 12:40:46
Сообщений: 4779
Откуда: Минск
Рейтинг сообщения: 0
shads писал(а):
Такое решение удобно тем что не надо запрещать прерывания, с вытекающими отсюда плюсами.


Вручную запрещать не надо, но они у Вас все равно автоматически запрещены на длительность всего слота, раз код находится в обработчике прерывания и слот формируется обычными циклами-задержками. Ваша реализация не выдерживает временные интервалы согласно спецификации 1-Wire. К тому же, при желании поменять тактовую, нужно будет менять множество разбросанных по всему тексту констант. Я ведь не запрещаю прерывания на время всего обмена по 1-Wire, а только на мимально-необходимое время, которое около 60 мкс. Ну а потом из "кирпичиков" TReset и TByte (а можно и TBit) в основной программе строю нужную последовательность обмена. Если это критично, на одном витке менеджера задач выполняется только одна функция.

Код:
//---------- Запись/чтение бита по однопроводной шине: ----------

bool TBit(bool b)
{
  char si;
  si = __save_interrupt();
  __disable_interrupt();       //запрещение прерываний
  Port_OWP_0;
  Port_OWP_OUT;                //OWP <- 0
  Delay_us(2);                 //delay 2 uS
  if(b) Port_OWP_IN;           //bit = 1, OWP <- 1
  Delay_us(13);                //delay 13 uS
  bool owp = Pin_OWP;          //чтение порта
  Delay_us(45);                //delay 45 uS
  Port_OWP_1;                  //force pullup
  Port_OWP_OUT;
  __restore_interrupt(si);     //восстанавление прерываний
  Delay_us(2);                 //delay 2 uS
  return(owp);
}


Что касается Си, так я не только плюнул на все преимущества в объеме и скорости, которые дает ассемблер, но и в самом Си пишу так, чтобы программа была как можно наглядней. При этом она становится еще медленней и больше. Например, никаких глобальных переменных, все данные спрятаны внутри модулей, все обращения к ним - только через функции. Чтобы не расширять области видимости функций, иногда вызов идет через цепочку функций-оберток. Это большой оверхед. Но зато количество ошибок в программах удалось свести к минимуму, основные части программы отладки вообще не требуют. Отладка остается там, где не всё понятно, что мы от программы хотим. А раньше я тоже писал только на asm, на Си смотрел, как на изврат. Готов был спорить до бесконечности, отстаивая asm. А теперь в огромных количествах растранжириваю ресурсы, зато не надо напрягаться по каждой ерунде, можно сконцентрироваться на главном.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср июл 11, 2012 22:05:07 
Держит паяльник хвостом
Аватар пользователя

Карма: 15
Рейтинг сообщений: 70
Зарегистрирован: Ср мар 28, 2012 21:45:24
Сообщений: 904
Откуда: ВО
Рейтинг сообщения: 0
один из нетрадиционных методов работы с DS1820 раз уж про нее речь зашла здесь.
Писалось давно , всего сам не помню. Используется буфер (который можно резать как угодно) изначально вводились почти все команды для DS , проверка готовности данных - что сокращает время ожидания конвертации. Нет формирования тайм слотов, их формирует USART. Не очень оптимизировалось


Вложения:
DS18B20.rar [4.47 KiB]
Скачиваний: 204
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт июл 12, 2012 11:47:45 
Друг Кота
Аватар пользователя

Карма: 82
Рейтинг сообщений: 1027
Зарегистрирован: Сб апр 02, 2011 12:40:46
Сообщений: 4779
Откуда: Минск
Рейтинг сообщения: 0
ILYAUL писал(а):
один из нетрадиционных методов работы с DS1820


Использование UART для реализации шины 1-Wire было давным-давно описано в Application Note 74 от Dallas. Я так делал на PC, например, здесь: http://digit-el.com/files/open/ds18x20/ds18x20.html На микроконтроллерах так тоже можно делать, но обычно UART-а жалко.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт июл 12, 2012 12:56:49 
Держит паяльник хвостом
Аватар пользователя

Карма: 15
Рейтинг сообщений: 70
Зарегистрирован: Ср мар 28, 2012 21:45:24
Сообщений: 904
Откуда: ВО
Рейтинг сообщения: 0
Мне больше понравилось ATMEL-овское описание сего процесса.( Сейчас не тот комп в руках-из дома выложу) Ну и конечно так можно поступить , если USART-у больше делать нечего. Привлекла- то идея кольцевого буфера , с возможностью добавлять или убирать команды , просто добавляя их в буфер или убирая их из него ну и прерывания естественно.
Просто как то я не встречал таких решений на просторах инета , так же часто как ногодрыганье и delays- поэтому и не традиционно.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт июл 12, 2012 13:15:45 
Друг Кота
Аватар пользователя

Карма: 82
Рейтинг сообщений: 1027
Зарегистрирован: Сб апр 02, 2011 12:40:46
Сообщений: 4779
Откуда: Минск
Рейтинг сообщения: 0
ILYAUL писал(а):
Мне больше понравилось ATMEL-овское описание сего процесса.


Это? http://www.atmel.com/Images/doc2579.pdf


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт июл 12, 2012 14:48:59 
Опытный кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 52
Зарегистрирован: Чт дек 31, 2009 19:27:45
Сообщений: 842
Откуда: Бровари, Україна
Рейтинг сообщения: 0
Про UART (который сам просится, раз не нужен для радио) и про таймер (ШИМ на передачу, меняем длительность импульса, вход захвата на приём, смотрим, когда поднялось) я начал писать, но потом стёр. Счёл несколько неравным сравнением в данной теме, так как они требуют две ноги и внешних компонентов. А у производителя на тему UART апноты и так есть.

Если сравнивать «одноногие» реализации с 10-килогерцовым прерыванием и в фоне с запретом прерываний на время бита, то второе, на мой взгляд, лучше. Общее время запрещённых прерываний, что мешает другим, можно сделать ниже, возможность другим прерываниям «раздвигать» биты тоже может быть полезна. В случае (асмовой) реализации с привязкой регистров ещё и уменьшается количество зарезервированных регистров.
Если система не нагружена, то быстродействие (килобиты в секунду) фонового варианта не будeт хуже варианта с прерываниями. Если ситема нагружена, тем же радиоканалом, то работа с 1-Wire в прерываниях будет больше мешать.

_________________
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт июл 12, 2012 22:02:27 
Держит паяльник хвостом
Аватар пользователя

Карма: 15
Рейтинг сообщений: 70
Зарегистрирован: Ср мар 28, 2012 21:45:24
Сообщений: 904
Откуда: ВО
Рейтинг сообщения: 0
Леонид Иванович писал(а):

Это?

Да. По ней в принципе и писал

Уважаемый avreal. Не хочется спорить по данному поводу. Вы и я прекрасно представляем , что в определённых условиях и расставленных программой приоритетов можно просто проигнорировать любое прерывание , отметив , что оно произошло и вернутся к нему позже или просто "забыть".Приведённый код , это не лучший пример работы с прерываниями , но для того проекта он вполне меня устраивал. Конечно нужно сесть и переделать, но что-то лениво как-то. Наверно это чувство знакомо каждому. :))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Пт июл 13, 2012 12:03:46 
Опытный кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 52
Зарегистрирован: Чт дек 31, 2009 19:27:45
Сообщений: 842
Откуда: Бровари, Україна
Рейтинг сообщения: 0
Вообще-то я писал не об UART-реализации.
Сравнивал чисто программный ногодрыг либо в фоне с запретом прерываний, либо он же в таймерном прерывании 10 кГц.

ILYAUL писал(а):
Конечно нужно сесть и переделать, но что-то лениво как-то. Наверно это чувство знакомо каждому. :))
«Ой, и не говорите»™ Иногда утром в зеркало так стыдно смотреть :-)

_________________
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Пт июл 13, 2012 15:22:49 
Опытный кот
Аватар пользователя

Карма: 8
Рейтинг сообщений: 105
Зарегистрирован: Ср фев 22, 2012 01:25:21
Сообщений: 882
Рейтинг сообщения: 0
Леонид Иванович писал(а):
Что касается Си, так я не только плюнул на все преимущества в объеме и скорости, которые дает ассемблер, но и в самом Си пишу так, чтобы программа была как можно наглядней. При этом она становится еще медленней и больше.
Ну в обчем - понятно - куда надо двигаться. Ну его всякие гибриды, типа С+АСМ, буду пробовать чисто на С.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Пт июл 13, 2012 19:05:17 
Друг Кота

Карма: 28
Рейтинг сообщений: 568
Зарегистрирован: Чт май 05, 2011 21:26:34
Сообщений: 4550
Откуда: Украина, Славутич
Рейтинг сообщения: 0
А лучше HAL - на ассемблере, а остальную часть на паскале.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср июл 18, 2012 15:15:32 
Опытный кот
Аватар пользователя

Карма: 8
Рейтинг сообщений: 105
Зарегистрирован: Ср фев 22, 2012 01:25:21
Сообщений: 882
Рейтинг сообщения: 0
Леонид Иванович писал(а):
Ваша реализация не выдерживает временные интервалы согласно спецификации 1-Wire.
А где именно не выдерживается? Я рассчитывал задержки вот так:
Вложение:
1wire характеристики сигнала.gif [53.16 KiB]
Скачиваний: 291


Леонид Иванович писал(а):
Я ведь не запрещаю прерывания на время всего обмена по 1-Wire, а только на мимально-необходимое время, которое около 60 мкс.
Хотел я по вашему примерчику, обработку 1Wire, на С замутить, но потом подумал вот о чем. Для обмена байтами, в принципе эти 60 мкс, погоды не делают для динамической индикации, а вот когда сброс линии происходит, там уже задержка ок 600 мкс, т.е. для времени индикации одного разряда, задержка уже ощутима. Как тут быть? У меня сброс происходит в прерывании в фоне, и никак не влияет на другие процессы, а в случае формирования сброса с помощью задержки, будут видны колебания яркости разрядов, т.к. прерывания тоже запрещены. Или просто с этим смириться?

Если что отвечайте в теме "Всё по DS18(B/S)20." ато здесь съехали малость в сторону. Я там продублирую вопрос про сброс.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Сб июл 21, 2012 13:53:34 
Сверлит текстолит когтями

Карма: 1
Рейтинг сообщений: -1
Зарегистрирован: Ср июн 22, 2011 21:14:17
Сообщений: 1158
Рейтинг сообщения: 0
Изучаю самостоятельно ассемблер и мало что понимаю :shock:
До этого программировал на Си и Паскале немного было , а теперь вообще непривычно как то

В общем первый пример из моей книги - это перевод процессора в защищенный режим (под DOS) :

Код:
ORG 100h

start:
mov ax,3
int 10h

in al,92h
or al,2
out 92h,al

xor eax,eax
mov ax,cs
shl eax,4
add eax,PROTECTED_MODE_ENTRY_POINT
mov [ENTRY_OFF],eax

xor eax,eax
mov ax,cs
shl eax,4
add ax,GDT

mov dword[GDTR+2],eax

lgdt fword[GDTR]

cli

in al,70h
or al,80h
out 70h,al

xor eax,eax
mov eax,1
mov cr0,eax

db 66h
db 0EAh

ENTRY_OFF dd PROTECTED_MODE_ENTRY_POINT

dw 00001000b

GDT:
NULL_descr db 8 dup(0)
CODE_descr db 0FFh,0FFh,00h,00h,00h,10011010b,11001111b,00h
DATA_descr db 0FFh,0FFh,00h,00h,00h,10010010b,11001111b,00h
VIDEO_descr db  0FFh,0FFh,00h,80h,0Bh,10010010b,01000000b,00h
GDT_size equ $-GDT

label GDTR fword
dw GDT_size-1
dd ?

use32

PROTECTED_MODE_ENTRY_POINT: mov ax,00010000b

mov bx,ds
mov ds,ax
mov ax,00011000b
mov es,ax
xor esi,esi
mov si,bx
shl esi,4
add esi,message
xor edi,edi
mov ecx,26

rep movsb
jmp $
message db 'H',07h,'e',07h,'l',07h,'l',07h,'o',07h,' ',07h, 'W',07h,'o',07h,'r',07h,'l',07h,'d',07h,'!',09h,0


Всё таки объясните по-подробнее почему нельзя объявлять метки и данные в начале программы например как объявляются переменные или функции в других языках таких как Си напрмер ?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Сб июл 21, 2012 14:07:25 
Друг Кота

Карма: 28
Рейтинг сообщений: 568
Зарегистрирован: Чт май 05, 2011 21:26:34
Сообщений: 4550
Откуда: Украина, Славутич
Рейтинг сообщения: 0
в ассемблере нет понятия переменной, есть только регистры и ячейки памяти.

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

В начале программы можно объявить только константы. Чаще всего это предопределенные адреса ячеек памяти, которые используются наравне с метками.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 7597 ]     ... , , , 144, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 22


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y