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

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

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

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

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

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


 
Опции темы

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

Непрочитано 13.06.2013, 18:10  
tempora
Почётный гражданин KAZUS.RUN
 
Регистрация: 10.01.2007
Сообщений: 3,411
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: Определение младшего и старшего байта числа типа int. Нужна подсказка

Сообщение от AlexPi Посмотреть сообщение
А сам способ, я считаю, весьма не плох.
Способ классный! Только пользоваться им нельзя, по причине, верно отмеченной _Артём_'ом. Если бы не эта беда, то цены б ему не было! Красиво, изящно... вот только, блин, не сработает и никому не скажет же...
Реклама:
__________________
There's always more than one way to skin a cat.
tempora вне форума  
Непрочитано 13.06.2013, 18:34  
terminator_seva
Вид на жительство
 
Аватар для terminator_seva
 
Регистрация: 03.06.2010
Сообщений: 451
Сказал спасибо: 35
Сказали Спасибо 168 раз(а) в 133 сообщении(ях)
terminator_seva на пути к лучшему
По умолчанию Re: Определение младшего и старшего байта числа типа int. Нужна подсказка

Сообщение от tempora Посмотреть сообщение
Только пользоваться им нельзя, по причине,...
Вот сразу после такого заявления, хотелось бы увидеть альтернативный, рабочий способ.
terminator_seva вне форума  
Непрочитано 13.06.2013, 18:52  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,313
Сказал спасибо: 2,633
Сказали Спасибо 12,076 раз(а) в 6,082 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Определение младшего и старшего байта числа типа int. Нужна подсказка

Сообщение от terminator_seva Посмотреть сообщение
Вот сразу после такого заявления, хотелось бы увидеть альтернативный, рабочий способ.
Абсолютно системно-независимый вариант - двигать вправо (на сколько нужно) и брать младший байт (неявным преoбразованием int-›char).
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 13.06.2013, 19:16  
nahimovv
Заблокирован
 
Регистрация: 25.04.2013
Сообщений: 1,427
Сказал спасибо: 0
Сказали Спасибо 381 раз(а) в 251 сообщении(ях)
nahimovv на пути к лучшему
По умолчанию Re: Определение младшего и старшего байта числа типа int. Нужна подсказка

А как же "индейцы"?
nahimovv вне форума  
Непрочитано 13.06.2013, 20:06  
_Артём_
Гражданин KAZUS.RUN
 
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
_Артём_ на пути к лучшему
По умолчанию Re: Определение младшего и старшего байта числа типа int. Нужна подсказка

Сообщение от tempora Посмотреть сообщение
Красиво, изящно... вот только, блин, не сработает и никому не скажет же...
Ну всё же не так всё плохо - на распространёных системах только little endian остался. Так для x86, AVR, Cortex-M0/3/4. Мне другие и не нужны.
_Артём_ вне форума  
Непрочитано 13.06.2013, 20:50  
tempora
Почётный гражданин KAZUS.RUN
 
Регистрация: 10.01.2007
Сообщений: 3,411
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: Определение младшего и старшего байта числа типа int. Нужна подсказка

Сообщение от _Артём_ Посмотреть сообщение
Ну всё же не так всё плохо ...
Именно так плохо. Если задача состоит в том, чтобы получить младший байт, то писать код, который берёт байт по младшему адресу - это ставить грабли, себе самому или тому, кто будет сопровождать этот код после тебя. Тем более, когда это оформляется макросом - он же потом будет "гулять" по всем будущим исходникам.
Любителей граблей разубеждать ни в чем не собираюсь, лишь хотел предупредить того, кому так мило "посоветовали".
__________________
There's always more than one way to skin a cat.
tempora вне форума  
Сказали "Спасибо" tempora
makakus (14.06.2013)
Непрочитано 13.06.2013, 21:33  
3d cube
Гражданин KAZUS.RUN
 
Регистрация: 27.11.2012
Адрес: 30км от Софии
Сообщений: 732
Сказал спасибо: 89
Сказали Спасибо 310 раз(а) в 180 сообщении(ях)
3d cube на пути к лучшему
По умолчанию Re: Определение младшего и старшего байта числа типа int. Нужна подсказка

С риском быть заплеваным
МикроЕ Бейсик
Int переменная 16 бит
А переменная типа байт
Б переменная типа байт

А = Hi(Int) Пишем А в ЕЕПРОМ
Б = Lo(Int) Пишем Б в ЕЕПРОМ

Обратно
Hi(Int) = ЕЕПРОМ читать байт А
Lo(Int) = ЕЕПРОМ читать байт Б


Какого Хъя музикальными знаками пользоватся ? А ?

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

Сообщение от tempora Посмотреть сообщение
Именно так плохо. Если задача состоит в том, чтобы получить младший байт, то писать код, который берёт байт по младшему адресу - это ставить грабли, себе самому или тому, кто будет сопровождать этот код после тебя.
Как вы видите решение этой проблемы?

Мне кажется, что решением будет следование установленным правилам записи/чтения чисел (правила можно установить самому).
например записываем 4-байтовое целое как 4 последовательных байта - старший байт по младшему адресу (или наоборот):
Код:
unsigned long GetWord(unsigned char *ptr)
{
    unsigned long result=0;

    result+=((unsigned long)(*ptr++))‹‹24;
    result+=((unsigned long)(*ptr++))‹‹16;
    result+=((unsigned long)(*ptr++))‹‹8;
    result+=((unsigned long)(*ptr++));
    
    return result;
}

Последний раз редактировалось _Артём_; 13.06.2013 в 23:00.
_Артём_ вне форума  
Непрочитано 14.06.2013, 10:13  
AlexPi
Прописка
 
Регистрация: 14.09.2010
Сообщений: 105
Сказал спасибо: 9
Сказали Спасибо 15 раз(а) в 11 сообщении(ях)
AlexPi на пути к лучшему
По умолчанию Re: Определение младшего и старшего байта числа типа int. Нужна подсказка

Сообщение от _Артём_ Посмотреть сообщение
Ну всё же не так всё плохо - на распространёных системах только little endian остался. Так для x86, AVR, Cortex-M0/3/4. Мне другие и не нужны.
Вот и я о том же. На подавляющем большинстве систем используемых именно для встроенных систем применяется именно little-endian т.е. от меньшего к старшему. Другие же варианты более присущи форматам хранения данных на различных носителях или передачи данных.
Если Вы беспокоитесь о переносимости всегда можно применить директивы условной компиляции.
А перейти с одной платформы на другую, только перекомпиляцией программы все равно не получится. Как минимум прийдется подстраиваться под местную периферию.
AlexPi вне форума  
Непрочитано 14.06.2013, 10:33  
niXto
Почётный гражданин KAZUS.RUN
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,026
Сказал спасибо: 60
Сказали Спасибо 3,941 раз(а) в 2,302 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: Определение младшего и старшего байта числа типа int. Нужна подсказка

Кстати у Кортекса есть замечательная команда, о которой правда не подозревают компиляторы

Operation
SBFX extracts a bitfield from one register, sign extends it to 32 bits, and writes the result to
the destination register.
UBFX extracts a bitfield from one register, zero extends it to 32 bits, and writes the result to
the destination register.
Restrictions
Do not use SP and do not use PC.
Condition flags
These instructions do not affect the flags.
Examples
SBFX R0, R1, #20, #4 ; Extract bit 20 to bit 23 (4 bits) from R1 and sign
; extend to 32 bits and then write the result to R0.
UBFX R8, R11, #9, #10 ; Extract bit 9 to bit 18 (10 bits) from R11 and zero
; extend to 32 bits and then write the result to R8
niXto вне форума  
 
Опции темы

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

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, время: 15:48.


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