Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 25.09.2012, 01:57  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: FAQ по STM8

Возможно, я с недосыпу уже не фокусирую, но тогда объясните, плиз, в чем здесь может заключаться розыгрыш? :
Код:
Вариант 1:
    128              PORTD &= 0xF0;
    129              PORTD |= 0x0A;
   \                     ??main_5:
   \   0000006E   B302               IN      R16, 0x12
   \   00000070   7F00               ANDI    R16, 0xF0
   \   00000072   BB02               OUT     0x12, R16
   \   00000074   B302               IN      R16, 0x12
   \   00000076   600A               ORI     R16, 0x0A
   \   00000078   BB02               OUT     0x12, R16

Вариант 2:
    128              PORTD = ( PORTD & 0xF0 ) | 0x0A;
   \                     ??main_5:
   \   0000006E   B302               IN      R16, 0x12
   \   00000070   7F00               ANDI    R16, 0xF0
   \   00000072   600A               ORI     R16, 0x0A
   \   00000074   BB02               OUT     0x12, R16
В первом варианте - два OUT'а, сначала в нижний нибл пишутся нули, затем - целевое значение, во втором варианте OUT - один, нули не пишутся.
Реклама:
__________________
There's always more than one way to skin a cat.
tempora вне форума  
Непрочитано 25.09.2012, 02:59  
Yurkin2007
Заблокирован
 
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
Yurkin2007 на пути к лучшему
По умолчанию Re: FAQ по STM8

То есть Вас смущают две лишних строчки ассемблера?
Хороший пример, но немного неудачный. У Вас используется порт ввода-вывода, поэтому компилятору приходится тупо подряд писать
Код:
\   00000072   BB02               OUT     0x12, R16
\   00000074   B302               IN      R16, 0x12
А если вместо порта использовать регистр или ячейку памяти, то компилятор просто выкинет ненужные перемещения из аккумулятора в память и обратно, и поэтому приведённый Вами код не будет отличаться от библиотечного.
В этом, собственно, и заключается розыгрыш.
Yurkin2007 вне форума  
Непрочитано 25.09.2012, 09:59  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: FAQ по STM8

Yurkin2007, Вы, положительно, не понимаете в чем состоит мой вопрос, что меня насторожило. Сейчас не могу писать пространно - сделаю это позже, однако, дам наводящий вопрос - какая мысль посещает Вас, когда Вы видите в исходнике, например, такой фрагмент:
Код:
int x;

    x = 5;
    x = 7;
    ...
Я позже вернусь и мне будет интересно узнать Ваши варианты.
Благодарю.

__________________________________________________
Сообщение от Yurkin2007 Посмотреть сообщение
то компилятор просто выкинет ненужные перемещения
Всё же, допишу сейчас, а-то, потом забуду. В общем случае:
  • возможности оптимизатора не безграничны, получив на входе более рыхлый код, он и результат выдаст хуже, чем с исходно плотным кодом,
  • в некоторых подобных случаях, оптимизированный код может оказаться неэффективным или даже неверным,
  • и наконец, зачем сознательно лепить горбатого - чтобы оптимизатору было чем заняться?
__________________
There's always more than one way to skin a cat.

Последний раз редактировалось tempora; 25.09.2012 в 10:18.
tempora вне форума  
Непрочитано 25.09.2012, 10:32  
ut1wpr
Почётный гражданин KAZUS.RU
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: FAQ по STM8

Сообщение от tempora Посмотреть сообщение
Возможно, я с недосыпу уже не фокусирую, но тогда объясните, плиз, в чем здесь может заключаться розыгрыш? :
Код:
Вариант 1:
    128              PORTD &= 0xF0;
    129              PORTD |= 0x0A;
   \                     ??main_5:
   \   0000006E   B302               IN      R16, 0x12
   \   00000070   7F00               ANDI    R16, 0xF0
   \   00000072   BB02               OUT     0x12, R16
   \   00000074   B302               IN      R16, 0x12
   \   00000076   600A               ORI     R16, 0x0A
   \   00000078   BB02               OUT     0x12, R16

Вариант 2:
    128              PORTD = ( PORTD & 0xF0 ) | 0x0A;
   \                     ??main_5:
   \   0000006E   B302               IN      R16, 0x12
   \   00000070   7F00               ANDI    R16, 0xF0
   \   00000072   600A               ORI     R16, 0x0A
   \   00000074   BB02               OUT     0x12, R16
В первом варианте - два OUT'а, сначала в нижний нибл пишутся нули, затем - целевое значение, во втором варианте OUT - один, нули не пишутся.
В первом случае особого криминала не вижу. Типичное использование регистра порта как РОН (ячейки памяти). Извлекли содержимое регистра (порта), про-Эндили, очистили место под младший ниббл, сохранили в регистре (порту). Потом снова извлекли, про-Орили на освободившееся место в младщем ниббле и снова сохранили в регистре (вывели в порт). Неэффективно по сравнению со вторым, да. Но странностей не вижу. Может недопонимаю..
__________________
С уважением,
Vic / ut1wpr
ut1wpr вне форума  
Непрочитано 25.09.2012, 12:41  
Yurkin2007
Заблокирован
 
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
Yurkin2007 на пути к лучшему
По умолчанию Re: FAQ по STM8

Сообщение от tempora Посмотреть сообщение
Вы, положительно, не понимаете в чем состоит мой вопрос,
Начинаю догадываться, не смотря на всю сумбурность изложения.
Вот Ваш вариант
Код:
AWU-›TBR =(AWU-›TBR &((uint8_t)~AWU_TBR_AWUTB)))|TBR_Array[(uint8_t)AWU_TimeBase];
хоть и записан в одну строчку, будет выполняться по частям всё равно. Сначала операция AND, затем OR. Промежуточный результат первой операции надо ж где-то сохранить. Но Вы категорически против использования для этого ячейки памяти с адресом AWU-›TBR и предлагаете использовать внутренние регистры микропроцессора. Я правильно Вас понял ?
Ну, у STM8S не очень много этих самых регистров: аккумулятор, два индексных регистра, стак-пойнтер, счётчик программного адреса и статус. И всё. Тесно как шахтёру в шахте. Уж не знаю, откуда Вы взяли R16 в Вашем варианте.
В таком случае, если повезёт, то, наверно, и можно всё прокрутить через аккумулятор. Но число ассемблерных строк будет больше, чем четыре. И ещё неизвестно, может код короче будет при использовании памяти для промежуточных значений ...
Yurkin2007 вне форума  
Непрочитано 25.09.2012, 17:18  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: FAQ по STM8

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

Ответом на этот вопрос были:
  • рассуждения о битах, не реализованных на кристалле, дескать, чтобы в них не писать, вся эта затея и сделана,
  • затем - соображения о том, что в ячейки памяти (в отличие от I/O-портов) можно писать сколько угодно - оптимизатор всю эту фигню исправит,
  • наконец, замечания о хранении промежуточных результатов вычислений и о том, что якобы я "категорически против использования для этого ячейки памяти с адресом AWU-›TBR"...

Если и есть тут какой-то сумбур, то он - ну, никак не в моём вопросе...

Сообщение от ut1wpr Посмотреть сообщение
Неэффективно по сравнению со вторым, да. Но странностей не вижу.
Ну, неэффективность в коде от производителя - это, на мой взгляд, тоже странность. Однако, дело не в ней.

Когда встречается фрагмент кода типа "x = 5; x = 7;" меня это, по меньшей мере, удивляет, и хочется понять что это такое. С одной стороны, действительно, можно предположить один из простых вариантов - пофигизм ("зачем париться, оптимизатор всё лишнее удалит"), результат копипаста, невнимательность/спешка и так далее. Но штука-то в том, что иногда такие "странности" в коде неслучайны и более того - должны выполняться именно так, поскольку кроме очевидных событий, типа изменения данных, такие инструкции производят и неочевидные действия.

Навскидку, пара-тройка примеров (вы их и сами назовётё массу):
  • смена значения делителя тактовой - CLKPR=0x80; CLKPR=0xNN;
  • очистка некоторых флагов прерываний чтением - i = AWU_CSR1;
  • блокировка регистра данных ADC чтением ADCL и разблокировка его чтением ADCH,
  • наконец, эта классная шутка Atmel'овцев, благодаря которой работает вот такой код:
    Код:
        while (1){
          PINB.0 = 1;
        }

Я писал выше, что буквально на днях впервые пощупал STM8 (чистого времени - от силы, часа три-четыре) и поэтому я пока гораздо лучше не знаю их особенности, чем знаю их. В связи с этим, у меня вызывают интерес те вещи - в доках, в коде - которые выглядят нелогичными. Отсюда и желание узнать, кто что думает по этому поводу.
Ну, а не обращай я внимание на такие штуки, я мог бы многого так никогда и не узнать. Например, как работает "PINB.0 = 1;".
__________________
There's always more than one way to skin a cat.
tempora вне форума  
Непрочитано 25.09.2012, 21:19  
ut1wpr
Почётный гражданин KAZUS.RU
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: FAQ по STM8

Уважаемый tempora.
Не уверен, но мне кажется, что пару месяцев назад я находился в таком же состоянии, как и вы. Интенсивно до этого работал на продуктах Микрочипа и Атмела. Сформировались свои стереотипы. И точно так же, как и вы, был в легком недоумении от решений ЭсТешников. И когда я прочитал ответ (не помню кого, вроде Досикус это был) на мои ПАЧИМУ?, все встало на свои места в голове. Надо сменить позицию оценки. Вам предлагают изделие со своими фичами и загогулинами. А кто ж спорит, что оно отличается от того, с чем вы ранее работали. И ваше право принять это или отвергнуть.
Все ваши рассуждения базируются на вашей ЛИЧНОЙ, субъективной оценке. Но если вы не в состоянии внести изменения в сторону улучшения, то какова цена вашим выкладкам? Да и сами оценки весьма спорны. Может есть смысл выждать некоторое время, поработать с камнем поплотнее? Ваши посты по теме STM8 со стороны выглядят как приглашение ярого полемиста такому же же коллеге, для которого важен скорее не результат, а сам факт наличия полемики.
Я пока воздерживаюсь от глобальных оценок камня (его топологии, архитектуры), но чем дальше, тем больше он нравится.
Я не хочу принимать участия в спорах о лишнем байте-команде в процедуре инициализации, которая исполняется один раз за время нахождения МК во включенном состоянии. Скажу одно. Я в прошлом году писал программу на М8 от Атмела, не имеет значения, что там было. Но отмечу, что заняла она процентов 85 памяти кодов. Когда я ради освоения STM8 начал портировать ее, с удивлением обнаружил, что те же функции заняли не более 30%. После решения расширить возможности, я добавил туда еще три (!) фичи, но так и не добрался до тех же 80%. Из 8К занято около 5К. Наверное так и формируется личное восприятие и личные оценки. Повторяю, субъективно. Я не задавался и не собираюсь задаваться целью производить какие-либо сравнения ни по скорости, ни по иным параметрам. Одно скажу, время показало, что мне почему-то не хочется возвращаться к Мегам-Тайням.
Ну, а ваши замечания о "нелогичности" в доках и кодах тоже не совсем однозначны. К примеру, рассуждать о логике разработчика МК и сравнивать ее со совей логикой, я бы не стал. Разные вещи. У разработчика больше информации, и моя логика просто может разбиться об нее, узнай я поближе, "почему так, а не так сделано"....
Извините меня за абсолютный треп и "многа букафф".
__________________
С уважением,
Vic / ut1wpr
ut1wpr вне форума  
Непрочитано 25.09.2012, 22:03  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: FAQ по STM8

Сообщение от ut1wpr Посмотреть сообщение
Все ваши рассуждения базируются на вашей ЛИЧНОЙ, субъективной оценке.
Бог с Вами - какие рассуждения? Я задал вопрос, который, как Вы правильно отметили, возник из-за того, что этот кристалл сильно отличается от atmel'овского, и выслушиваю ответы. Выслушиваю с интересом, оцениваю для себя, но вслух свою оценку не произношу - какая ж тогда полемика?
В общем, разбираюсь в новостях - и только. Спасибо.

Сообщение от ut1wpr Посмотреть сообщение
рассуждать о логике разработчика МК и сравнивать ее со совей логикой, я бы не стал
Я тоже не сравниваю разные логики. Здесь логичность - служит лишь индикатором понимания/непонимания материала - если что-то кажется нелогичным, значит нужно изучить глубже. И только.
___________________________________________
Сообщение от ut1wpr Посмотреть сообщение
те же функции заняли не более 30%
Это радует.
__________________
There's always more than one way to skin a cat.

Последний раз редактировалось tempora; 25.09.2012 в 22:09.
tempora вне форума  
Непрочитано 25.09.2012, 22:28  
ut1wpr
Почётный гражданин KAZUS.RU
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: FAQ по STM8

Сообщение от tempora Посмотреть сообщение
Это радует.
Меня тоже. Искренне.
Готов поделиться только что проделанным экспериментом с stm8s003. Залил в него прогу, состоящую из одной команды на асме HALT. Потребление глянуть. Насколько могу верить своему китайцу XB-868 (ширпотреб с базара) - 400 мкА. Питание 3.3. Чтение ДШ вдоль и поперек и по диагонали наводило на меньшие значения. Но все так размазано, перетасовано условиями (то включено, это выключено, разницы какие-то в 5 мкА, путают, гады нашего брата, пролетария). Да и само состояние хальт не очень расписано. Скользко и размазанно. Оставляет место для разночтений. Мысля такая. Если надо супермикро - надо Эльки закладывать ("L"). Наверное правильно все это, для каждой ниши свой камушек. Хотя вспоминая PIC с его micropower технологией...
__________________
С уважением,
Vic / ut1wpr
ut1wpr вне форума  
Непрочитано 25.09.2012, 22:59  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: FAQ по STM8

Сообщение от ut1wpr Посмотреть сообщение
400 мкА
Ну, 8s003 для меня и вовсе штука ненадёванная.
А на каком клоке и в котором из трёх хальтов он столько потребляет? Просто, те самые эльки обещают 3мкА в самом жрущем из хальтов. У них еще и контроллеры LCD бывают...
__________________
There's always more than one way to skin a cat.
tempora вне форума  
 

Закладки

Метки
arm, cortex, stm32, stm8
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Импульсная зарядка для авто-аккумуляторов (новодел) Falconist Источники питания и свет 1915 14.03.2024 19:56
FAQ (ЧаВО) по PROTEUS для начинающих и не только dosikus Proteus 221 07.03.2024 22:45
STM8(S/L), первые впечатления kison STM8 1423 19.05.2018 19:23
Вопросы и замечания по топику - FAQ по PROTEUS avr123-nm-ru Proteus 291 05.06.2015 20:49
FAQ Импульсный трансформатор alberio Источники питания и свет 87 13.11.2012 18:07


Часовой пояс GMT +4, время: 15:38.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot