Ассемблер (ASM) для AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 6324
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

DX168B писал(а):Или так:

Код: Выделить всё

CRC8:.....

CRC8 - по моему, несерьезно. 0,4% вероятность пропуска необнаруженной ошибки для солидных применений, я полагаю, недопустимо. CRC-16 чуть больше байт таблица :) , но результат намного надежней. Протокол Modbus CRC-16 рекомендует.
Реклама
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город

Сообщение Мастер Ломастер »

Jack_A писал(а):CRC-16 чуть больше байт таблица :) , но результат намного надежней. Протокол Modbus CRC-16 рекомендует.
ну да, совсем чуть-чуть больше таблица, пустячок! :))) и все равно, что там модбас рекомендует - в 1-wire принята CRC8 для адресов и коротких пакетов.
битва с дураками проиграна, победители торжествуют. слава победителям!
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)

Сообщение DX168B »

Jack_A писал(а): CRC8 - по моему, несерьезно. 0,4% вероятность пропуска необнаруженной ошибки для солидных применений, я полагаю, недопустимо. CRC-16 чуть больше байт таблица :) , но результат намного надежней. Протокол Modbus CRC-16 рекомендует.
Для 1-wire принята CRC8. Она юзается как и для термодатчиков, так и для iButton. Их не заставишь выдавать контрольную сумму CRC16. Вот если бы это был обмен между двумя самопальными девайсами, то да. Лучше конечно применить CRC16.
I am DX168B and this is my favourite forum on internet!
Контактная информация:
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город

Сообщение Мастер Ломастер »

DX168B писал(а):Для 1-wire принята CRC8.
не совсем так: этот метод подсчета принят только для адреса и ряда "малопередающих" устройств. в то же время микросхемы RAM/ROM семейства 1-wire большого объема используют для контроля целостности данных CRC16.
битва с дураками проиграна, победители торжествуют. слава победителям!
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
IM1
Грызет канифоль
Аватара пользователя
Сообщения: 268
Зарегистрирован: Вт фев 16, 2010 12:10:38
Откуда: Воронеж, Россия

Сообщение IM1 »

DX168B писал(а):А если за эту секунду надо ещё много чего успеть сделать?
У меня никогда не получалось полностью забить ПЗУ МК, как бы я не старался. Максимум мне удалось забить 70% из 2хкилобайтной тиньки(26). Программа и так была нафарширована. Так что памяти в МК достаточно, а вот потеря быстродействия - это другое.

PS: Заметил, что многие борются за каждый байт ПЗУ. Лично я ищу компромисс между объёмом и быстродействием с перевесом в сторону быстродействия. Если есть лишняя память, так почему же её не использовать, для получения быстродействия.
А вот я всегда борюсь за каждый байт, потому-что идей много, а места мало.
Интересно, а что за фарш у Вас? Крайне интересно, что можно напрессовать в 2К, если только таблица 256 байт, да еще и 30% свободного места остается. Это при общей убогости АВР-ных команд.
Если, конечно не секрет.

PS: Не на чем не настаиваю, хозяин-барин. Хотя некоторые господа у нас на форуме категорически не вычисляют CRC в своем многоликом терморегуляторе на ПИКе 84, опять же дело хозяйское.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)

Сообщение DX168B »

Использование индексной адресации, разделение частей программ на модули. Если есть какой-то кусок программы, который используется в нескольких местах, то проще оформить его в виде п\программы с принимаемыми аргументами или без них. Макросы не более трёх строк. Некоторые части в основном ядре программы можно использовать несколько раз. К примеру, один из моих проектов.
И то, это ещё не оптимизированная и не завершённая программа.
I am DX168B and this is my favourite forum on internet!
Контактная информация:
Реклама
IM1
Грызет канифоль
Аватара пользователя
Сообщения: 268
Зарегистрирован: Вт фев 16, 2010 12:10:38
Откуда: Воронеж, Россия

Сообщение IM1 »

DX168B писал(а):К примеру, один из моих проектов.
Да уж, подход основательный. Может быть для данного конкретного проекта такой подход и избыточен, но на будущее, конечно, самое то. Буду изучать, так сказать, посмотрю системный подход изнутри.
А так с лету, то я бы выбросил м/сх U2 и сделал матрицу 4х4, благо выводов хватает, да и кварц явно лишний. Но это сугубо мое ИМХО.
И еще в Протеусе в меню "Шаблон", во вкладке "Проект по умолчанию" я бы убрал галку "Показать скрытый текст", чтобы убрать глупые серые надписи <TEXT>, опять же ИМХО.
Файл без скрытого текста прилагаю.
Вложения
DXCODE4_ATTINY2313.zip
(17.71 КБ) 185 скачиваний
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город

Сообщение Мастер Ломастер »

DX168B писал(а):К примеру, один из моих проектов
ну что ж... можно, конечно, найти и огрехи, но в целом чувствуется стремление делать качественно и хорошо. похвально.
битва с дураками проиграна, победители торжествуют. слава победителям!
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)

Сообщение DX168B »

IM1 писал(а):Да уж, подход основательный. Может быть для данного конкретного проекта такой подход и избыточен, но на будущее, конечно, самое то. Буду изучать, так сказать, посмотрю системный подход изнутри.
Там в принципе сложного мало чего. Проект писался 5 месяцев назад. И так и не завершён до конца. Разве, что некоторым может ядро программы напрочь вскипятить моск, так как там одни и те же алгоритмы используются несколько раз для разных целей и ответвляются в разные стороны.
IM1 писал(а): А так с лету, то я бы выбросил м/сх U2 и сделал матрицу 4х4, благо выводов хватает, да и кварц явно лишний. Но это сугубо мое ИМХО.
Этот корпус достался в наследство от прошлого МК, у которого не хватало ног для клавы 4х4. За тем проект был портирован под ATTINY2313, а вот корпус (дешифратор) не убрал.
В принципе, надо просто переписать код от метки KEYREQ до его конечных RETов. Там 10-15 строк.
IM1 писал(а): И еще в Протеусе в меню "Шаблон", во вкладке "Проект по умолчанию" я бы убрал галку "Показать скрытый текст", чтобы убрать глупые серые надписи <TEXT>, опять же ИМХО.
Файл без скрытого текста прилагаю.
Да мне это как-то не мешает. :)
Мастер Ломастер писал(а):ну что ж... можно, конечно, найти и огрехи, но в целом чувствуется стремление делать качественно и хорошо. похвально.
Ну, без огрехов и ошибок там не обошлось. Проект старый. Писался давно. В то время я меньше в этом разбирался. Сейчас всё посерьёзнее, но это уже коммерческие проекты.
I am DX168B and this is my favourite forum on internet!
Контактная информация:
IM1
Грызет канифоль
Аватара пользователя
Сообщения: 268
Зарегистрирован: Вт фев 16, 2010 12:10:38
Откуда: Воронеж, Россия

Сообщение IM1 »

DX168B писал(а):Да мне это как-то не мешает. :)
Я же добавил, что ИМХО. Само-собой, на вкус и цвет - товарищей нет.
Друг Кота
Аватара пользователя
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)

Сообщение DX168B »

IM1 писал(а):Само-собой, на вкус и цвет - товарищей нет.
Я в принципе это же и имел в виду. :beer:

На счёт кварца. Да, его действительно можно выкинуть и настроить МК на работу от внутреннего RC на 8 МГц.
Просто паялось на заранее подготовленных универсальных платках а-ля МК+кварц+керамика по питанию+подтяжка с керамикой на RESET. То есть с минимальным обвязом. Делал их на все случаи жизни. :)
I am DX168B and this is my favourite forum on internet!
Контактная информация:
Прорезались зубы
Сообщения: 209
Зарегистрирован: Ср ноя 03, 2010 14:46:17

Сообщение Челюскин »

Подскажите пожалуйста вот такие вопросы:
1. #define XXX = 0x10 ; Что это означает, что мы имени XXX присвоили значение 10?, если да, то в какой системе (двоичной??)

2.
#define XXX = 0x20 ;

#define YYY = 0 ;

#define ZZZ = 0x08 ;

#define WWW = 0 ;

ldi R16, XXX | YYY | ZZZ | WWW | ; ЧТО в итоге будет в РОН.???

спасибо за любую помощь....
Лень - двигатель прогресса!
Друг Кота
Аватара пользователя
Сообщения: 6324
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

1. В 16-ричной
2. В регистре будет сборка по ИЛИ всех констант, т.е. если хотя бы в одной константе i-й бит = 1, он же будет 1 и в регистре.

Например : 0x02 | 0x36 | 0x43 = 0x77
Прорезались зубы
Сообщения: 209
Зарегистрирован: Ср ноя 03, 2010 14:46:17

Сообщение Челюскин »

спасибо за быстрый ответ)) тогда в получается, что 0x08 это тоже что и $08??? (глупые вопросы, просто мозги кипят - пытаюсь код понять для дисплея LCD, там фичей всяких просто море, вот и спрашиваю....)
Лень - двигатель прогресса!
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

Если удобней в десятичной - в ней и пиши.
Например вместо xxx = 0x12 можно смело записать xxx = 18. Префикс "0x" говорит компилятору, что дальше 16-ричное число. Без всяких префиксов - 10-чное
"0b" - двоичное, например 18 можно записать как 0b00010010
Прорезались зубы
Сообщения: 209
Зарегистрирован: Ср ноя 03, 2010 14:46:17

Сообщение Челюскин »

Спасибо, понял теперь. буду к десятичной привыкать, коль она без префиксов. :solder:
Лень - двигатель прогресса!
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

Не зря ведь разные варианты придумали, где-то одна удобней, где-то другая...
Попробуй, например, задать в 10-чтой системе константу, чтобы старшие 4 и младшие 4 бита были равны и равнялись десяти? Во... Только за калькулятор хвататься. А в 16-чной легко: 0xAA и готово.
Прорезались зубы
Сообщения: 209
Зарегистрирован: Ср ноя 03, 2010 14:46:17

Сообщение Челюскин »

подскажите пожалуйста, про вот такое выражение:
#define HD44780_EM_SHIFT_CURSOR 0

вопрос: для #define разве не нужна запятая, как например для "ldi r16, 0x08;"????
Лень - двигатель прогресса!
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

В #define запятая не нужна. А определение означает, что вместо вашей абракадабры компилятор подставит 0.
Docendo discimus
Контактная информация:
Прорезались зубы
Сообщения: 209
Зарегистрирован: Ср ноя 03, 2010 14:46:17

Сообщение Челюскин »

Спасибо большое за быстрый ответ. вот еще вопросы:

1. чем команда "OR" отличается от "ORI" ??? я вроде так понял, что первая для констант, вторая для регистров.... объясните, пожалуйста.?

2. Как это вообще понять?? или с какой стороны читать.... :shock:

#ifndef F_CPU
#error "F_CPU must be defined!"
#endif

#if F_CPU < 4000000
#warning "F_CPU too low, possible wrong delay"
#endif

#define CYCLES_PER_US (F_CPU/1000000)
#define C4PUS (CYCLES_PER_US/4)
#define DVUS(x) (C4PUS*x)
Лень - двигатель прогресса!
Ответить

Вернуться в «AVR»