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

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

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

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

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

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


 
Опции темы

Определение младшего и старшего байта числа типа int. Нужна подсказка

Непрочитано 14.06.2013, 14:46  
AlexPi
Прописка
 
Регистрация: 14.09.2010
Сообщений: 105
Сказал спасибо: 9
Сказали Спасибо 15 раз(а) в 11 сообщении(ях)
AlexPi на пути к лучшему
По умолчанию Re: Определение младшего и старшего байта числа типа int. Нужна подсказка

Сообщение от _Артём_ Посмотреть сообщение
Cortex-M может:
Я очень рад за Cortex, честно говоря я с ними дела не имел.
Но во первых:
Вы уверенны что он это делает за 1 цикл?
А во вторых автор темы задавал вопрос относительно gcc-avr.

А AVR уж точно за один цикл сдвинет только на 1 разряд и только один байт.
И порядок байт однозначно от мл. к ст.
И тут уж однозначно через union будет и быстрее и как говорится изящнее.
Реклама:

Последний раз редактировалось AlexPi; 14.06.2013 в 14:51.
AlexPi вне форума  
Непрочитано 14.06.2013, 14:53  
_Артём_
Гражданин KAZUS.RUN
 
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
_Артём_ на пути к лучшему
По умолчанию Re: Определение младшего и старшего байта числа типа int. Нужна подсказка

Сообщение от AlexPi Посмотреть сообщение
Я
Но во первых:
Вы уверенны что он это делает за 1 цикл?
Они так утверждают:

http://infocenter.arm.com/help/index.../CHDDIGAC.html


Сообщение от AlexPi Посмотреть сообщение
Я
А AVR уж точно за один цикл сдвинет только на 1 разряд и только один байт.
И порядок байт однозначно от мл. к ст.
И тут уж однозначно через union будет и быстрее и как говорится изящнее.
Вобщем да.
_Артём_ вне форума  
Непрочитано 14.06.2013, 14:54  
tempora
Почётный гражданин KAZUS.RUN
 
Регистрация: 10.01.2007
Сообщений: 3,411
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: Определение младшего и старшего байта числа типа int. Нужна подсказка

Сообщение от AlexPi Посмотреть сообщение
Вы хотите сказать что процессор сдвинет слово (16 или 32 бита) за одну операцию на заданное кво-во бит?
Какое искреннее изумление!
Не хочу вести сейчас подсчеты, но по-моему, таких процов поболе будет, чем тех, к которым Вы так привязаны. Да вот хотя бы:
__________________
There's always more than one way to skin a cat.
tempora вне форума  
Непрочитано 14.06.2013, 14:57  
nahimovv
Заблокирован
 
Регистрация: 25.04.2013
Сообщений: 1,427
Сказал спасибо: 0
Сказали Спасибо 381 раз(а) в 251 сообщении(ях)
nahimovv на пути к лучшему
По умолчанию Re: Определение младшего и старшего байта числа типа int. Нужна подсказка

Сообщение от AlexPi Посмотреть сообщение
Я очень рад за Cortex, честно говоря я с ними дела не имел.
Cortex'у очень повезло, в этом случае.
nahimovv вне форума  
Непрочитано 14.06.2013, 15:25  
AlexPi
Прописка
 
Регистрация: 14.09.2010
Сообщений: 105
Сказал спасибо: 9
Сказали Спасибо 15 раз(а) в 11 сообщении(ях)
AlexPi на пути к лучшему
По умолчанию Re: Определение младшего и старшего байта числа типа int. Нужна подсказка

Сообщение от nahimovv Посмотреть сообщение
Сообщение от AlexPi
Я очень рад за Cortex, честно говоря я с ними дела не имел.

Cortex'у очень повезло, в этом случае.
Спасибо тебе "милый" человек на "добром" слове. Земной поклон Вам господин, как говорится.
AlexPi вне форума  
Непрочитано 14.06.2013, 15:25  
nahimovv
Заблокирован
 
Регистрация: 25.04.2013
Сообщений: 1,427
Сказал спасибо: 0
Сказали Спасибо 381 раз(а) в 251 сообщении(ях)
nahimovv на пути к лучшему
По умолчанию Re: Определение младшего и старшего байта числа типа int. Нужна подсказка

Сообщение от AlexPi Посмотреть сообщение
А вот здесь да, Вы в принципе правы, потому то и 32 бита не всегда хорошо, не оптимально использует память.
Потому-то при переносе кода с восьми битника на 32х битник надо больше памяти.
Опять вас огорчу. На простых "светодиод блым-блым" задачах восьмибитник оденет майку лидера, на более-менее крупных и сложных - продует по всем статьям, вчистую.
nahimovv вне форума  
Непрочитано 14.06.2013, 15:28  
nahimovv
Заблокирован
 
Регистрация: 25.04.2013
Сообщений: 1,427
Сказал спасибо: 0
Сказали Спасибо 381 раз(а) в 251 сообщении(ях)
nahimovv на пути к лучшему
По умолчанию Re: Определение младшего и старшего байта числа типа int. Нужна подсказка

Сообщение от AlexPi Посмотреть сообщение
Спасибо тебе "милый" человек на "добром" слове. Земной поклон Вам господин, как говорится.
Ну, если вы так ненавидите Cortex... тогда - у MIPS'а тоже с этим всё в порядке.
nahimovv вне форума  
Непрочитано 14.06.2013, 17:29  
tempora
Почётный гражданин KAZUS.RUN
 
Регистрация: 10.01.2007
Сообщений: 3,411
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: Определение младшего и старшего байта числа типа int. Нужна подсказка

Сообщение от AlexPi Посмотреть сообщение
Вы уверенны что он это делает за 1 цикл?
В ситуации, которая тут обсуждается, даже восьмибитник сделает сдвиг за одну операцию.

Рассмотрим предложенный Вами пример:
Сообщение от AlexPi Посмотреть сообщение
Судите сами, вот у Вас 8ми битных процессор, а нужно получить старший байт переменной типа long long int.
И что будете делать сдвиг?

long long int A;
char B;

B= A››56;

А теперь прикиньте что процессору придется делать 56 сдвигов для 8ми байт, и того 8*56=448 операций сдвига, не считая вспомогательных процедур (увеличит, сравнить счетчик...).
То что это примерно так и откомпилируется у меня нет сомнений - проверял.

Как нетрудно проверить, утверждение, что "процессору придется делать 56 сдвигов" - полная фигня. Скомпилируется это, несмотря на то, что Вы "проверял", совсем не так, как Вы натеоретизировали (© AlexPi:"у меня нет сомнений - проверял"). Скомпилируется это вот так, к примеру:


Тут компилятор разместил переменную в регистрах, поэтому операция свелась к получению char-значения сразу из R20.

Я уж не знаю, что и как Вы "проверял", однако компиляторы чётко секут сдвиги на кратные восьмёрке длины, и просто берут нужный байт, а не двигают до дури, как это делал бы какой-нить теоретИк... Убедитесь сами:


Вот так оно выглядит на практике...
__________________
There's always more than one way to skin a cat.
tempora вне форума  
Непрочитано 14.06.2013, 18:34  
AlexPi
Прописка
 
Регистрация: 14.09.2010
Сообщений: 105
Сказал спасибо: 9
Сказали Спасибо 15 раз(а) в 11 сообщении(ях)
AlexPi на пути к лучшему
По умолчанию Re: Определение младшего и старшего байта числа типа int. Нужна подсказка

Сообщение от tempora Посмотреть сообщение
Тут компилятор разместил переменную в регистрах, поэтому операция свелась к получению char-значения сразу из R20.
Да нет это вам нужно разобраться.
Вы же показали как компилятор отработал _putchar.
А где же тот код который соответствует строке:
c=lli››56; // где этот код????????????????????????
его вы не привели.
наверняка там будет вызов подпрограммы и возможно не одной, тоже их посмотрите, скорее всего там будут присудствовать инструкции типа:

LSR Rх1
ROR Rх2
ROR Rх3
ROR Rх4
...
Короче говоря я еще раз говорю проверял. Именно через сдвиги там и получается, правда putchar не использовал а именно присваивание.
Приводить куски кода не вижу смысла - у всех компиляторы разные, включены разные опции оптимизации ... .

Последний раз редактировалось AlexPi; 14.06.2013 в 18:46.
AlexPi вне форума  
Непрочитано 14.06.2013, 18:47  
_Артём_
Гражданин KAZUS.RUN
 
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
_Артём_ на пути к лучшему
По умолчанию Re: Определение младшего и старшего байта числа типа int. Нужна подсказка

Сообщение от AlexPi Посмотреть сообщение
Да нет это вам нужно разобраться.
Разбираться вам нужно.


Сообщение от AlexPi Посмотреть сообщение
А где же тот код который соответствует строке:
c=lli››56; // где этот код????????????????????????
его вы не привели.
Он [s]самоликвидировался[/s] соптимизировался. Его нет.
Сообщение от AlexPi Посмотреть сообщение
наверняка там будет вызов подпрограммы и возможно не одной, тоже их посмотрите, скорее всего там будут присудствовать инструкции типа:

LSR Rх1
ROR Rх2
ROR Rх3
ROR Rх4
...
Это ваши фантазии. Вам код привели.


Сообщение от AlexPi Посмотреть сообщение
Короче говоря я еще раз говорю проверял.
На чём проверяли? Какие опции оптимизации?


Сообщение от AlexPi Посмотреть сообщение
Именно через сдвиги там и получается
Зачем там сдвиги, если можно байт по известному адресу прочитать и передать в функцию?
_Артём_ вне форума  
 
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определение типа симистора maks191 Информация по радиокомпонентам 5 09.12.2012 23:15
Научите int в два байта и наоборот? ) whoim Электроника - это просто 4 13.08.2012 21:56
Как 4 байта, принятых по USART превратить в число формата long int Black Jack Микроконтроллеры, АЦП, память и т.д 2 06.06.2012 21:32
Определение типа усилителя JeckVi Электроника - это просто 16 22.02.2010 17:49
Программное определение типа EEPROM Jendoss Микроконтроллеры, АЦП, память и т.д 3 24.03.2009 18:44


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.