ФИШКИ программирования.

Обсуждаем контроллеры компании Atmel.
Ответить
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

В одной из тем пошел разговор об интересных и полезных фишках программирования. Решил стартануть новый топик на эту тему. В основном, он касается ассемблера, но чем черт не шутит, мож кто и на СИ чего интересное подкинет. ;)

И вот первая ФИШКА:

Неиспользуемые регистры переферии можно удобно пользовать под хранение переменных. Особенно битовых.

ПОЕХАЛИ! ;)
Реклама
Мудрый кот
Аватара пользователя
Сообщения: 1802
Зарегистрирован: Ср сен 07, 2011 21:40:30

Сообщение Flasher »

Неиспользуемые -это какие? Reserved биты? Первый совет позволяет переименовать тему в фишки говнопрограммирования.
Последний раз редактировалось Flasher Ср апр 16, 2014 15:33:57, всего редактировалось 1 раз.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Не те, которые reserved, а те, которые "нормальные", но в конкретной программе не используются. Кстати, хотя и пишут в даташите что reserved использовать нельзя, а кто-нибудь пробовал в них писать, читать?
Кажись была похожая тема...
А, во, нашел http://radiokot.ru/forum/viewtopic.php?f=62&t=78185
Последний раз редактировалось Engineer_Keen Ср апр 16, 2014 15:36:09, всего редактировалось 1 раз.
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

Для Flasher. Это, например, таймер ты не используешь в программе, значит можно, к примеру, в его регистре сравнения или счетчике хранить переменную. Если Вы пишете говнокод - ЭТО ПОЛНОСТЬЮ ВАШИ ПРОБЛЕМЫ.
Последний раз редактировалось ИС-пытатель Ср апр 16, 2014 15:38:13, всего редактировалось 1 раз.
Реклама
Эиком - электронные компоненты и радиодетали
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

Там как-то все растянуто до уровня алгоритмов. и конкретных реализаций. А хотелось бы что-то более краткое и четкое. Наподобие справочника. Но тут, наверное такого не получится... Очень у нас уж КОТы общительные.... ))
Реклама
Мудрый кот
Аватара пользователя
Сообщения: 1802
Зарегистрирован: Ср сен 07, 2011 21:40:30

Сообщение Flasher »

Памяти не хватает? Или регистрового файла? Зачем эти цирки?
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

мля.......

http://radiokot.ru/forum/viewtopic.php? ... 1#p1987521

Загрузка значения из памяти - 2 такта. Из перифирийного регистра - 1 такт. +удобные команды sbis, sbic и т.д. А регистровый файл тоже не бесконечный
в даташите что reserved использовать нельзя, а кто-нибудь пробовал в них писать, читать?
пробовал. некоторые не пишутся. некоторые пишутся и просто ни на что не влияют.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18785
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

к подобным фишкам надо относиться примерно в таком ключе: тонущий хватается и за соломинку.

в нормальном режиме до этого опускаться не следует. крайне мало приложений, где действительно надо экономить каждый такт и каждый байт ОЗУ с байтом flash. но если вдруг в attiny10 не влезает MP3-плейер и как раз 1-2 байт не хватает - подход приемлем :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

Ну, это как раз для подобных ситуаций. )) Иногда бывает необходимо выполнить какой-то кусок кода максимально быстро. Вот тут поможет ассемблерная вставка с подобного рода оптимизацией.
Друг Кота
Аватара пользователя
Сообщения: 15752
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

ИС-пытатель писал(а): Загрузка значения из памяти - 2 такта. Из перифирийного регистра - 1 такт. +удобные команды sbis, sbic и т.д. А регистровый файл тоже не бесконечный
Во - первых: sbis, sbic действительны исключительно для участка РСФ 0x00-0x1F, а там не так уж и много "свободно-безопасных" регистров подобных GPIOR0-GPIOR2 у ATtiny2313.
Во-вторых: структура ядра AVR как раз и ориентирована на "работу через память" а не на работу внутри регистрового файла. (Для того, кстати, и частота работы выбрана максимальной.)
Да и операция LD тоже вроде 1-цикловая - чем Вас файл ОЗУ не устраивает?
При "поодтяжке" данных из внешнего источника или обработке массива все равно одним циклом не обойтись.
Ежли уж охота "на полную" использовать возможности регистрового файла и ОЗУ то берите за основу PIC24.
:beer:
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

LD - 2 clocks. К тому же, можно и в сях это использовать. Потому что СИ по умолчанию в памяти все размещает, а можно через дефаулт определить переменную в регистр и писать-читать из регистра.
Друг Кота
Аватара пользователя
Сообщения: 15752
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

ИС-пытатель писал(а):LD - 2 clocks. К тому же, можно и в сях это использовать. Потому что СИ по умолчанию в памяти все размещает, а можно через дефаулт определить переменную в регистр и писать-читать из регистра.
Смотри систему команд: - 2 цикла это в случае обмена по регистр-указателю с последующим изменением оного(постинкремент/преддекремент), а так -1 цикл. Но ведь далее при обработке массива данных все равно потребуется указатель модифицировать.
8)
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

Смотрю в 8535 и в 2313. только LDI 1 такт. Но тут k=0..255. Остальные LD/ST по 2. Речь не идет о массиве. ) Речь об отдельных переменных. К тому же IAR-овские компиляторы успешно пользуют данный прием. Это как еще один довод в пользу него. )
Друг Кота
Аватара пользователя
Сообщения: 15752
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Смотри doc0856I–AVR–07/10 ( 8-bit AVR Instruction Set )
страницы 87,88,89.

"Words: 1 (2 bytes)
Cycles: (i) 1(2)
(ii) 2
(iii) 3(2)
Cycles XMEGA: (i) 1(1)
(ii) 1(1)
(iii) 2(1)
Notes: 1. IF the LD instruction is accessing internal SRAM, one extra cycle is inserted.
2. LD instruction can load data from program memory since the flash is memory mapped. Loading data from the data memory
takes 1 clock cycle, and loading from the program memory takes 2 clock cycles. But if an interrupt occur (before the last
clock cycle) no additional clock cycles is necessary when loading from the program memory. Hence, the instruction takes
only 1 clock cycle to execute.
LD instruction with pre-decrement can load data from program memory since the flash is memory mapped. Loading data
from the data memory takes 2 clock cycles, and loading from the program memory takes 3 clock cycles. But if an interrupt
occur (before the last clock cycle) no additional clock cycles is necessary when loading from the program memory. Hence,
the instruction takes only 1 clock cycle to execute."
:beer:

Вопрос только где у атмеля "схитрили" в даташитах или в базовом материале? :wink:
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

Переведите, пожалуйста, дословно, а то что-то я затрудняюсь. Как-то коряво написано. При чем там флеш-память? :shock:
Друг Кота
Аватара пользователя
Сообщения: 15752
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Если смотреть фирменное описание команд, то к простому LD Rd,(X) относится индекс (i) и (i) прим.2
Поскольку LD могут применяться и для отображения ПЗУ как участка ОЗУ (это серия tiny10 и подобные) то загрузка из обычного ОЗУ выполняется за 1 цикл, а загрузка из ПЗУ отображаемого в области ОЗУ за 2 цикла.
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

Там еще что-то про прерывания между загрузками..
И вот это напрягает:
Cycles: (i) 1(2)
(ii) 2
(iii) 3(2)
И первый пункт не совсе понятен, хоть и для XMega

Все-таки, если Вас не затруднит, не могли бы дословно?
Последний раз редактировалось ИС-пытатель Пт апр 18, 2014 15:46:54, всего редактировалось 1 раз.
Друг Кота
Аватара пользователя
Сообщения: 15752
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Это случай если имело место прерывание в момент выполнения многоцикловой команды - смотри нюансы прерываний. 8)
И вообще-то там аж три странички с самого начала читать надо.
Вот отсюда:
http://www.atmel.com/Images/doc0856.pdf
Честно говоря в те дебри особо не лазил, но подвохов ожидать можно весьма значительных.
Как вот в этом зловредном проектике (кстати тоже обработчик массивов из ПЗУ):
http://radiokot.ru/forum/viewtopic.php? ... 0%BE%D0%BC
8)
Кстати... в хелпе по авр-студии также указаны 2 цикла и "дифференциация штанов" относительно xmega(но относительно авр ассемблер1 - под аврасм2 только про отличия), те же два цикла и в даташитах на МК. А вот в doc0856.pdf - 1 цикл, без указания на принадлежность к какой-либо "семье". :)
Вымогатель припоя
Аватара пользователя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Сообщение ИС-пытатель »

BOB51 писал(а):Как вот в этом зловредном проектике
Зря Вы мне это показали... )))) Я ж теперь спать не буду, пока не расковыряю все на винтики... ))) А так хотелось на выходных выспаться... )
Ответить

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