|
2 страниц
1 2 >
|
 |
Ответов
(1 - 14)
|
Feb 8 2006, 13:23
|
Участник

Группа: Свой
Сообщений: 25
Регистрация: 2-02-06
Пользователь №: 13 904

|
спасибо за ответ но у меня идет одновременная работа с WinAVR и IAR и хотелось бы чего-нибудь универсального
|
|
|
|
|
Feb 8 2006, 13:47
|

Профессионал
    
Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380

|
Функции на асме, не обязательно инлайн. Расходы на call/ret известны, количество тактов - одинаково. Если подходить совсем глобально, вставить препроцессорный макрос высчитывающий количество проходов цикла в зависимости от частоты. Запретить прерывание внутри. Но это более пригодно для микросекундных задержек. Для миллисекундных я например использую 2-й таймер с автоперезагрузкой с циклом в 100мкс, а от него веду софтварные таймеры, в которые вставлены хэндлеры функций. Точность получается весьма пристойная для самых критичных задач.
--------------------
Вони шукають те, чого нема, Щоб довести, що його не існує.
|
|
|
|
|
Feb 9 2006, 07:26
|

Шаман
     
Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221

|
Цитата(defunct @ Feb 8 2006, 22:58)  Цитата (IgorKossak @ Feb 8 2006, 14:41)
Возможны варианты только для очень специфических команд (сейчас не вспомню каких). Но в Вашей задаче они явно не будут использоваться. Видимо имелись в виду RCALL, CALL, ICALL, EICALL, RET, RETI, а также неявная команда перехода на обработчик прерывания. Время выполения которых зависит от разрядности PC. Ради интереса взял даташиты на mega128 и tiny13. Очень беглое сравнение наборов инструкций показывает, что для ВСЕХ инструкций (имеющихся у обоих МК) времена исполнения совпадают.
|
|
|
|
|
Feb 9 2006, 07:48
|

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

|
Цитата(IgorKossak @ Feb 9 2006, 09:26)  Цитата(defunct @ Feb 8 2006, 22:58)  Видимо имелись в виду RCALL, CALL, ICALL, EICALL, RET, RETI, а также неявная команда перехода на обработчик прерывания. Время выполения которых зависит от разрядности PC.
Ради интереса взял даташиты на mega128 и tiny13. Очень беглое сравнение наборов инструкций показывает, что для ВСЕХ инструкций (имеющихся у обоих МК) времена исполнения совпадают. Не могу сказать оригинального имени документа, поскольку он у меня сохранен под удобным для поиска именем (в оглавлении документа написано "AVR Instruction Set" rev. 0856D-AVR-08/02). В нем можно найти различия во времени выполнения приведенных выше команд, для МК с PC - 16bit и меньше и для MK с PC - 22bit.
|
|
|
|
|
Feb 9 2006, 10:47
|

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

|
Цитата(IgorKossak @ Feb 9 2006, 11:31)  Я это тоже видел, но к счастью таких нет среди тех, которые фигурировали в вопросе у автора темы. Отчего же так? В вопросе фигурирували чуть ли не все существующие МК с AVR ядром. Как минимум в одном из указанных в вопросе семейств(mega) есть предствитель 22bit PC (ATMega2560/1). Согласен с Вами в том, что автору вопроса пока не доведется работать с МК с 22bit PC, и что можно считать, что все одноименные команды AVR tiny/classic/mega выполняются за одинаковое число тактов. Может говоря о специфических командах имелись в виду "специфические МК" с широким PC?  ps: не ставлю целью Вам докучать, просто самому стало интересно, и если действительно есть такие специфические команды, то неплохо бы их знать..
|
|
|
|
|
Jan 17 2009, 20:03
|
Местный
  
Группа: Участник
Сообщений: 322
Регистрация: 28-05-05
Пользователь №: 5 512

|
Цитата(Rst7 @ Feb 8 2006, 15:32)  __delay_cycles(сколько тактов) в IAR'е решат ваши проблемы  а в CAVR что решит проблемы? использовал ф-цию delay_ms(10) дык вместо формирования меандра с Ти=10мс почему то Ти=2,5мс, т.е. приблизительно в 4 раза быстрее. Кварц. генератор = 2Мгц, МЦУ = Мега88. ЧТо посоветуете? Писать новую функцию, запихивать в нее nop-ы путём подбора с осциллографом? Задача выдавать импульсы с погрешностью хотя бы 1мс - и с delay_ms такой облом. При помощи счетчиков не хотелось бы заморачиваться.
Сообщение отредактировал Halfback - Jan 17 2009, 20:05
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|