Например TDA7294

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



Текущее время: Пн янв 21, 2019 18:57:36



Часовой пояс: UTC + 3 часа [ Летнее время ]


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



Начать новую тему Ответить на тему  [ Сообщений: 6847 ]     ... , , , 143, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Пн июл 09, 2012 12:28:08 
Друг Кота
Аватар пользователя

Карма: 39
Зарегистрирован: Вт апр 24, 2007 08:45:40
Сообщений: 4057
Откуда: Minsk
Рейтинг сообщения: 0
Мне кажется, у начинающих есть такое недопонимание : вот на асме для данной задачки - целая страница, а на С - пару строчек, и все работает, значит, оно проще. И невдомек, что "проще" это только экономия усилий пальцами по клаве, а в результирующем коде, как правило, МК-ру приходится во втором случае трудиться в несколько раз больше.
Это отнюдь не означает, что я антиСишник, и если бы мне пришлось на заказ клепать массу дивайсов так, что пот утереть некогда, то кончно, использовал бы его. А как для души - так на асме :)


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

Карма: 79
Зарегистрирован: Сб апр 02, 2011 13:40:46
Сообщений: 4779
Откуда: Минск
Рейтинг сообщения: 0
Jack_A писал(а):
А как для души - так на асме :)


Это только для молодой души. Со старостью приходит лень - какой там может быть ассемблер!

Что касается загрузки проца, так в большинстве проектов его вычислительная мощность используется только на несколько процентов. Ну будет он пустой Main Loop крутить не за 100 мкс, а за 500, ну и что? Пользователь даже не заметит. Есть, конечно, редкие случаи, где процессор загружен под завязку. Из своей практики могу привести один пример - генератор синуса. Такой проект пишется только на ассемблере. Раньше я так и делал. Но из-за лени в новой версии генератора я поставил 2 процессора, один запрограммирован на asm, но там только ядро DDS, а другой запрограммирован на Си, там все менюшки и прочее, связанное с интерфейсом пользователя.


Вернуться наверх
 
JLCPCB, 10 прототипов ПП всего за $2 и 2 дня доставка!

Крупнейший производитель печатных плат в Китае, 300,000+ заказчиков, 10,000+ он-лайн заказов в день.

Рассчитайте цену онлайн:https://jlcpcb.com/quote

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

Карма: 8
Зарегистрирован: Чт дек 31, 2009 20:27:45
Сообщений: 842
Откуда: Бровари, Україна
Рейтинг сообщения: 0
Леонид Иванович писал(а):
Это только для молодой души. Со старостью приходит лень - какой там может быть ассемблер!
Пусть будет «лень» :-) («мне лень за такое-то время писать один проект на асме, лучше я за это время два на С напишу… Или один на С и на даче вишни обрежу…»).

Леонид Иванович писал(а):
Есть, конечно, редкие случаи, где процессор загружен под завязку.
Исключения всегда есть.
Кто со времён RU.EMBEDDED помнит флеймы am vs. C, тот помнит, что я всегда за С агитировал (время от времени демонстрируя, что на асме я тоже могу ;-) ). Позже, правда (ещё там, в RU.EMBEDDED), Журов за С++ начал и я уже в сторонке был :-)
Но сейчас я один небольшой проект для меги48 «макетирую» на С, но потом перепишу на асме. Чтобы с 1 мегагерца тактовую скинуть на 500 кГц и выиграть по потреблению. Там прерываний много и в прерываниях со многими переменными работа. На С прологи/эпилоги много жрут. А на асме внимательно разместив ключевые переменные (где-то так 20-24 из 32, на С -ffixed-reg/asm("Ri") столько не позволят разместить) навсегда в регистрах я выиграю достаточно для того, чтобы на 500 кГц всё успевать.
Вот только далеко не всегда такое нужно.

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


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

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

Второй конкурс по дизайну печатных плат от PCBWay!
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Пн июл 09, 2012 20:46:01 
Друг Кота

Карма: 29
Зарегистрирован: Чт май 05, 2011 22:26:34
Сообщений: 4453
Откуда: Украина, Славутич
Рейтинг сообщения: 0
Лучше сделать один проект хорошо, с пониманием чем два но лишь бы работало.


Вернуться наверх
 


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

Карма: 39
Зарегистрирован: Вт апр 24, 2007 08:45:40
Сообщений: 4057
Откуда: Minsk
Рейтинг сообщения: 0
Леонид Иванович писал(а):
Это только для молодой души. Со старостью приходит лень - какой там может быть ассемблер!

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

Мне не повезло с синекурой - работал на частную фирму, где каждый цент на учете, и "давайте возьмем проц пошустрее" вызвало бы у шефа несколько слов, которых нет в словаре Ожегова :) И когда делаешь реалтайм по 4 каналам 50-Гц сигнала да еще с кучей float вычислений по оцифрованным массивам - тут уж даже на асме МК-ру, фигурально говоря, высморкаться некогда было :)


Вернуться наверх
 
Впервые на русском языке! «Поваренная книга разработчика аналоговых схем: Операционные усилители»

Практическое руководство «Разработчика аналоговой электроники по операционным усилителям», созданной инженерами компании Texas Instruments. Содержит схемы, примеры типовых расчетов с указанием формул и последовательности действий. Результаты расчетов дополнительно проверяются в программе SPICE-моделирования.
Подробнее...
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вт июл 10, 2012 00:51:03 
Потрогал лапой паяльник
Аватар пользователя

Зарегистрирован: Вт мар 17, 2009 00:35:42
Сообщений: 378
Откуда: Украина Новоднестровск
Рейтинг сообщения: 0
Вобще написал сюда, потому что тут тема про АСМ, а тут флуда про си на две страницы, ребята любящие си, простите но вы не в ту тему пишете.

_________________
Всем известно что любая микросхема работает на дыме, и если волшебный дым из неё вышел то она перестает работать.


Вернуться наверх
 


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

Карма: 54
Зарегистрирован: Вс июл 12, 2009 20:15:29
Сообщений: 6726
Откуда: Ижевск
Рейтинг сообщения: 0
Вариантов - море. Все зависит от схемы и вашего алгоритма. Одно из возможных:

Код:
   LSL   data             ;ваши данные
   SBI       data_port, n ;устанавливаем "1" на входе 595
   BRCS   met              ;если перенос есть, то обходим
   CBI   data_port, n  ;устанавливаем "0" на входе 595
met:
   CBI   shift_port,m  ;импульс сдвига для 595. Данные записываются внутрь
   SBI   shift_port,m

   CBI   latch_port,k  ;импульс записи для 595
   SBI   latch_port,k

Сдвигать влево или вправо, записывать по одному биту или все махом, передавать на выход 595-ой - все в ваших руках.

_________________
Docendo discimus


Вернуться наверх
 


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

Карма: 8
Зарегистрирован: Чт дек 31, 2009 20:27:45
Сообщений: 842
Откуда: Бровари, Україна
Рейтинг сообщения: 0
Alexeyslav писал(а):
Лучше сделать один проект хорошо, с пониманием чем два но лишь бы работало.
А ещё лучше два с пониманием. Или Вы о том, что за одно и то же время можно сделать один проект на асме с пониманием или два на С без понимания?
Это не так. Причём чем сложнее проект, тем это более не так.

pyzhman писал(а):
Вариантов - море. Все зависит от схемы и вашего алгоритма.
Так в том-то и дело! Если кидаться кодить на асме «для эффективности» и просить примеров, но без понимания своей задачи, то и ответы не подойдут, и задача не решится. Асм как таковой не поможет, скорее наоборт — за деревьями леса не будет видно.

Если нужна предельная скорость, а объём кода не важен, то софт-spi можно и как-то так сделать:
http://www.forum.radiokot.ru/forum/view ... 77#p514577
(только там и ввод, и вывод, в случае только вывода две последних команды в блоке rept нужно убрать)
(вообще в этой теме soft-spi обсуждался, кажется, далеко не один раз)

Если кристалл позволяет инверсию выхода выводом в PIN (а сейчас таких большинство), то можно в каком-то регистре хранить маску с единичкой в месте тактового сигнала для сдвигового регистра и строб выдавать способом
Код:
    ldi   r16, 1 << m
...
...
    out shift_PIN, r16 ; два раза подряд инвертируем выход
    out shift_PIN, r16
...
...
Это можно и в цикле делать, размер кода растёт на один ldi в начале плюс, при необходимости, на один sbi либо cbi на установку нужного состояние выхода клока, а время выполнения уменьшается на два такта для одного бита, на 16 тактов на байт.

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


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

Карма: 8
Зарегистрирован: Ср фев 22, 2012 02:25:21
Сообщений: 878
Рейтинг сообщения: 0
Леонид Иванович писал(а):
Что касается загрузки проца, так в большинстве проектов его вычислительная мощность используется только на несколько процентов. Ну будет он пустой Main Loop крутить не за 100 мкс, а за 500, ну и что? Пользователь даже не заметит. Есть, конечно, редкие случаи, где процессор загружен под завязку. Из своей практики могу привести один пример - генератор синуса. Такой проект пишется только на ассемблере. Раньше я так и делал. Но из-за лени в новой версии генератора я поставил 2 процессора, один запрограммирован на asm, но там только ядро DDS, а другой запрограммирован на Си, там все менюшки и прочее, связанное с интерфейсом пользователя.

Вот у меня дилемма сейчас. Пишу пока все на АСМЕ, в т.ч. и менюшки. Конечно хотелось бы освоить С чтобы не мелочится с интерфейсом. Но есть проблема - я использую активно прерывания по таймеру и большинство задач решаю в прерывании. Причем мой любимый метод настроить одно прерывание например 10кгц (обрабатываются скоростные процедуры, как например 1wire, обработка радиообмена, и т.д.), внутри этого же прерывания организован счетчик который делит частоту прохода до 100-400 гц (динамическая индикация, опрос кнопок, часы, переменные, и т.д.) причем в низкоскоростной части прерывания разрешены чтобы не нарушать высокоскоростную часть.
Если я все это зделаю на С, то скоростная часть безнадежно не впишется, так как там я вылизываю процедуры до байтов.
Посоветуйте, как можно решить эту дилемму, основную прогу писать на С, а в прерываниях сохранить компактность ассемблера.....


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

Карма: 8
Зарегистрирован: Чт дек 31, 2009 20:27:45
Сообщений: 842
Откуда: Бровари, Україна
Рейтинг сообщения: 0
shads писал(а):
Причем мой любимый метод настроить одно прерывание например 10кгц (обрабатываются скоростные процедуры, как например 1wire, обработка радиообмена, и т.д.)
Ну так я делал на старых классических 51-ых, где катастрофически не хватало таймеров.
Одна оставшаяся свободной половинка давала прерывание раз в 256 циклов процессора и от него всё плясало. Кстати, одна из программ дожила до где-то семи тысяч строк на С плюс около трёх на асме. Это было последнее, что я на 51-ых делал.
Все прерывания были на асме для скорости.
Часть обработки на асме для компактности не сильно в ущерб скорости (там практически прямой шитый код был). Если бы не то, что поначалу был зажат 16-килобайтным ПЗУ, то этого и не делал бы. Но потом все равно не влезло, в итоге в 32 килобайтах было занято 25. Не думаю, что на чистом асме назад в 16 К влез бы, там одних знакогенератора и текстовых строк было килобайт 8, а 17 килобайт из-под С в 8 килобайт на асме всё равно не влезли бы.

В таких случаях программа на С общается с прерываниями через буфера и флаги запуска действия и готовности выполнения. Не забывать такие флаги на С квалифицировать как volatile, иногда и буфера желательно.
Но сейчас вроде ж с таймерами полегче, нет нужды вешать всё на один (точнее, на одно прерывание от него).
Ну например, у нас есть кварц 7.3728 и 8-битный таймер с каналами сравнения.
Ставим таймеру прескалер 64.
Переполнение таймера получаем 7372800/64/256 = 450 герц, для той же динамической индикации. Ну и там уже не жалко времени на доделиватели для 10 мс и 1 сек программных таймеров для «просто службы времени».

Теперь один из каналов сравнения настраиваем на прерывание по сравнению и в прерывании передвигаем точку сравнения в будущее, причём как опора не текущее состояние таймера, а предыдущее значение регистра сравнения, тогда сетка будет равномернее, ошибка не будет накапливаться.
Код:
    ...
  ; // OCR0A += 12;
    in      r16, OCR0A
    subi    r16, -12
    out     OCR0A, r16
Получим прерывание 7372800/64/12 = 9600 Гц, это программный UART, передача.
Приём аналогично, только по прерыванию по спаду стартового бита в OCR0B заносим значение TCNT0 с отступом вперёд на пол или полтора бита (в зависимости от того, будем ли ловить ошибку старт-бита) и некоторой коррекцией на задержку обработки этого прерывания от спада.

Если прерывание от спада далать по input capture, то тогда легче, просто OCR1B = ICR1 + (в зависимости от длины бита и задачи).

Таким образом для обслуживания soft-UART занято аж три прерывания, два из которых работают с одним автоматом (машиной состояний) на приём. Но зато они возникают только тогда, когда они нужны.
По завершению передачи прерывание TX OCR0A просто запрещается (в конце отработки стопового бита — если в буфере передачи нет других байтов). Пока не приёл стартовый бит на приём, OCR0B тоже запрещено.
Если это вешать на один таймер, то надо было бы хотя бы на 28.8 килогерца проверять состояние входной линии RX, не пришёл ли стартовый бит. И прерывание лупило бы постоянно, даже когда никто ничего не присылает.

Конечно, можо и такую методику облегчения нагрузки и всё на асме писать, но если оно надо. А нагружать все в одно прерывание с тем, чтобы оно часть работы каждый раз делало впустую (а иначе нельзя, пропустит) — какой смысл?

После расталкивания по разным прерываниям уже можно решить, кто может подождать и в начале тех прерываний разрешать вложенные.
Иногда это и не нужно, так как каждое прерывание получается довольно простое, С-компилятор не сохраняет/восстанавливает по полтора десятка регистров, чо благотворно сказывается на времени обработки.
Иногда это невозможно -- в одной из небольших (около 8 килобайт вместе с printf, это С++ с шаблонами для размножения обработчиков прерываний из одного шаблона) программ на меге64 у меня все шесть OCR от 16-битных таймеров и еще 6 внешних прерываний задействованы. Плюс UART на компьютер, еще два прерывания, итого 14. Так и немного :-)
Это был 6-канальный приёмник чего-то LIN-подобного с настройкой частоты по первому байту пакета. Все 6 каналов равноправны, выделять какой-то один и в остальных разрешать вложенные прерывания просто нет смысла.

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


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

Карма: 8
Зарегистрирован: Ср фев 22, 2012 02:25:21
Сообщений: 878
Рейтинг сообщения: 0
avreal писал(а):
Теперь один из каналов сравнения настраиваем на прерывание по сравнению и в прерывании передвигаем точку сравнения в будущее, причём как опора не текущее состояние таймера, а предыдущее значение регистра сравнения, тогда сетка будет равномернее, ошибка не будет накапливаться.
Так если прерывание по сравнению, то там ошибка и не накапливается, зачем передвигать точку сравнения?

avreal писал(а):
Таким образом для обслуживания soft-UART
Да вообщета для обмена по радиоканалу я не использую UART, использую свой обработчик на основе манчестера.

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

avreal писал(а):
В таких случаях программа на С общается с прерываниями через буфера и флаги запуска действия и готовности выполнения.
Вот тут прозвучала интересная мысля..... Хотя основная программа так и общается с прерываниями, но и та и та у меня на асме. А можно на С рарезервировать некоторые регистры контроллера, чтобы С их не использовал, обозвать эти регистры именами, и использовать из С и из Асма эти регистры совместно? Тогда основная прога будет на С, а к ней просто прилепить файл обработки прерываний написанный на Асме.....


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

Карма: 16
Зарегистрирован: Ср мар 28, 2012 22:45:24
Сообщений: 905
Откуда: ВО
Рейтинг сообщения: 0
Цитата:
Так если прерывание по сравнению, то там ошибка и не накапливается, зачем передвигать точку сравнения?

Это так называемый Free Timer. Он считает от 0 до 0xFF или 0xFFFF(16-бит) и так по кругу не останавливаясь.(Mode- NORMAL)
Если нам нужно получить частоту 9600 , то каждые (Х+12) мы будем получать прерывание по сравнению . Где Х=0...FF или для 16-ти (FFFF)


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

Карма: 8
Зарегистрирован: Ср фев 22, 2012 02:25:21
Сообщений: 878
Рейтинг сообщения: 0
И все таки:
Возможно ли на С рарезервировать некоторые регистры контроллера, чтобы С их не использовал, обозвать эти регистры именами, и использовать (как переменные) из С и из Асма, совместно?
(например основная прога будет на С, а файл обработки прерываний написанный на Асме.....)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вт июл 10, 2012 16:29:42 
Модератор
Аватар пользователя

Карма: 52
Зарегистрирован: Чт сен 18, 2008 13:27:21
Сообщений: 17482
Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Ну, это уже лучше у СИшников спрашивать. Причём даже могут быть различия между компиляторами.
В СИ для ядра 8051 вроде можно было объявить переменную со свойством register. Правда, сам не пробовал.

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


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

Карма: 29
Зарегистрирован: Чт май 05, 2011 22:26:34
Сообщений: 4453
Откуда: Украина, Славутич
Рейтинг сообщения: 0
Мне кажется, что всегда можно написать целый инклудник на ассемблере с обработчиками прерываний, и включать его отдельно в C-проекте.

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


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

Карма: 54
Зарегистрирован: Вс июл 12, 2009 20:15:29
Сообщений: 6726
Откуда: Ижевск
Рейтинг сообщения: 0
В сторону: эк народ прорвало-то... Сделаю себе зарубку - тему asm vs C не трогать.

_________________
Docendo discimus


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

Карма: 52
Зарегистрирован: Чт сен 18, 2008 13:27:21
Сообщений: 17482
Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
pyzhman писал(а):
asm vs C

Можно в МЯЯЯУ открыть. Такой срач начнётся...........

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


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

Карма: 16
Зарегистрирован: Ср мар 28, 2012 22:45:24
Сообщений: 905
Откуда: ВО
Рейтинг сообщения: 0
Не врядли начнётся .Надоело и скучно это .


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

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


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

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


Советую плюнуть - и всё. Смириться, как получается в Си, так и пойдет. Неужели есть охота сильно напрягаться? Вообще, я делаю примерно всё то же самое, причем на Си, и всё работает. Для 1-Wire зачем прерывание 10 кГц? У меня этот интерфейс обслуживается в основной программе. Да, есть в нем микросекундные интервалы, кторые нужно точно выдержать, там в любом случае прерывания должны быть запрещены. Ничего длинного в обработчиках не делаю, всё по флагам делает основная программа. Прерывание таймера обычно тикает 1 или 2 кГц и только устанавливает флаг нового системного интервала, внутри обработчика ничего больше нет. По этому флагу все процессы декрементируют свои программные таймеры, которые формируют нужные интервалы (антидребезг, автоповтор клавиатуры, мигание дисплея и т.д.). Радиообмен не делал, но для него или использовал бы UART, или завел бы еще одно прерывание другого таймера. Понятно, что программируя на Си жесткого реалтайма не достичь, но в 99% случаев его хватает, а в остальных можно поставить аппаратные кодеки и т.д., это проще, чем ковыряться в ассемблере.

shads писал(а):
Возможно ли на С рарезервировать некоторые регистры


Можно, но с ограничениями. Вообще, на практике наибольший прирост эффективности программ получался при монопольном владении в прерывании не простым регистром, а, например, указателем (XH:XL, YH:YL или чаще ZH:ZL) и даже несколькими. Компилятор не отдаст свои любимые регистры. В результате таким шаманством, как часть программы на asm, а часть на Си, не занимался никогда. Почти всё ложится на Си, и всего лишь два сопроцессора с маленькой программой (ATmega88 и AT90PWM3B) запрограммировал на asm за последних 4 года.


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



Часовой пояс: UTC + 3 часа [ Летнее время ]


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

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


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

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


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