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

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

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

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

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

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


 
Опции темы

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

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

Ну вот Вы сами же пришли к тому, что я вам доказывал :

40: GPIOR5=(port_state››24)&255;
+00000143: 019B MOVW R18,R22 Copy register pair
+00000144: 01A5 MOVW R20,R10 Copy register pair
+00000145: E060 LDI R22,0x00 Load immediate
+00000146: E070 LDI R23,0x00 Load immediate
+00000147: E080 LDI R24,0x00 Load immediate
+00000148: E090 LDI R25,0x00 Load immediate
+00000149: E108 LDI R16,0x18 Load immediate
+0000014A: 940E0502 CALL 0x00000502 Call subroutine
+0000014C: B925 OUT 0x05,R18 Out to I/O location

снова сходная конструкция:
в R16 грузим 0х18 == 24(D) т.е. к-во сдвигов и вызываем сдвиг.

К стати для старших байт во все порты грузится из одного регистра - R1.
Очевидно компилятор просчитал что в них постоянно хранится одно и тоже, скорее всего "0" и таким образом оптимизировал код. Попробуйте объявить port_state с volatile и скорее всего все байты начнут формироваться аналогичным образом.
Реклама:
AlexPi вне форума  
Непрочитано 15.06.2013, 04:05  
_Артём_
Гражданин KAZUS.RUN
 
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
_Артём_ на пути к лучшему
По умолчанию Re: Определение младшего и старшего байта числа типа int. Нужна подсказка

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

Сообщение от AlexPi Посмотреть сообщение
К стати для старших байт во все порты грузится из одного регистра - R1.
Очевидно компилятор просчитал что в них постоянно хранится одно и тоже, скорее всего "0" и таким образом оптимизировал код.
Это странно - либо ошибка компилятора, либо моя (что намного более вероятно). Не должно так быть - данные разные. Почему из одного регистра читает? Наверное на ночь глядя проглядел чего.


Сообщение от AlexPi Посмотреть сообщение
Попробуйте объявить port_state с volatile и скорее всего все байты начнут формироваться аналогичным образом.
А вот этого не надо. port_state - локальная переменная, значение которой присваевается функцией и далее не меняется. Или вы хотите палки в колёса компилятору вставлять? Тогда не удивляйтесь результату.
_Артём_ вне форума  
Непрочитано 15.06.2013, 14:44  
nahimovv
Заблокирован
 
Регистрация: 25.04.2013
Сообщений: 1,427
Сказал спасибо: 0
Сказали Спасибо 381 раз(а) в 251 сообщении(ях)
nahimovv на пути к лучшему
По умолчанию Re: Определение младшего и старшего байта числа типа int. Нужна подсказка

Сообщение от AlexPi Посмотреть сообщение
Ну вот Вы сами же пришли к тому
Не-не, это вы пришли-приехали-стоп-приплыли!
А нас, увы, не заводит ламповое звучание унылого кода КодэникуанеВижэн.

AVR Studio 4.18
Код:
30:       asm ("nop");
+0000003A:   0000        NOP                      No operation
34:       c = (uint8_t)(a ›› 56);
+0000003B:   93800060    STS       0x0060,R24     Store direct to data space
36:       asm ("nop");
+0000003D:   0000        NOP                      No operation
38:       b = *((unsigned char*)&a + 7);
+0000003E:   93800061    STS       0x0061,R24     Store direct to data space
40:       asm ("nop");
+00000040:   0000        NOP
Современные компиляторы продвинуты настолько, что в состоянии отличить сдвиги кратные восьми. Нужно только правильно выбрать и научиться ими пользоваться.
nahimovv вне форума  
Непрочитано 15.06.2013, 16:35  
tempora
Почётный гражданин KAZUS.RUN
 
Регистрация: 10.01.2007
Сообщений: 3,411
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: Определение младшего и старшего байта числа типа int. Нужна подсказка

Nahimovv, Вы, извините, зря теряете время. Он вчера, дважды спрашивал "а где же код сдвигов, куда его дели?", глядя на этот листинг:

Код:
    157                  fill_lli(&lli);
   \   00000004   018E               MOVW    R17:R16, R29:R28
   \   00000006   ....               RCALL   fill_lli
    158                  _putchar((lli››56)&0xFF);
   \   00000008   810F               LDD     R16, Y+7
   \   0000000A   ....               RCALL   _putchar
    159                  _putchar((lli››48)&0xFF);
   \   0000000C   810E               LDD     R16, Y+6
   \   0000000E   ....               RCALL   _putchar
    160                  _putchar((lli››40)&0xFF);
   \   00000010   810D               LDD     R16, Y+5
   \   00000012   ....               RCALL   _putchar
    161                  _putchar((lli››32)&0xFF);
   \   00000014   810C               LDD     R16, Y+4
   \   00000016   ....               RCALL   _putchar
    162                  _putchar((lli››24)&0xFF);
   \   00000018   810B               LDD     R16, Y+3
   \   0000001A   ....               RCALL   _putchar
    163                  _putchar((lli››16)&0xFF);
   \   0000001C   810A               LDD     R16, Y+2
   \   0000001E   ....               RCALL   _putchar
    164                  _putchar((lli›› 8)&0xFF);
   \   00000020   8109               LDD     R16, Y+1
   \   00000022   ....               RCALL   _putchar
    165                  _putchar((lli    )&0xFF);
   \   00000024   8108               LD      R16, Y
   \   00000026   ....               RCALL   _putchar


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

Сообщение от tempora Посмотреть сообщение
Да ещё этот симптоматический ЦэВижн... Небось и версия - времён царя Гороха.
Та не, HI-TECH PICC STD V9.60PL3 царя Гороха вполне адекватен
Код:
27:                asm ("nop");
   3F7    0000     NOP
28:                
29:                c = (unsigned char)(a ›› 24);
   3F8    0825     MOVF 0x25, W
   3F9    00A1     MOVWF c
30:                
31:                asm ("nop");
   3FA    0000     NOP
32:                
33:                b = *((unsigned char*)&a + 3);
   3FB    0825     MOVF 0x25, W
   3FC    00A0     MOVWF b
34:                
35:                asm ("nop");
   3FD    0000     NOP
Цитата:
В общем, тяжёлый случай.
Неужели та самая, знаменитая КодэникуанеВижэн реликт-версия ледникового периода и переписи мамонтов?
nahimovv вне форума  
Непрочитано 15.06.2013, 19:01  
tempora
Почётный гражданин KAZUS.RUN
 
Регистрация: 10.01.2007
Сообщений: 3,411
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: Определение младшего и старшего байта числа типа int. Нужна подсказка

Сообщение от nahimovv Посмотреть сообщение
Сообщение от tempora Посмотреть сообщение
Да ещё этот симптоматический ЦэВижн... Небось и версия - времён царя Гороха.
Та не, HI-TECH PICC STD V9.60PL3 царя Гороха вполне адекватен

Не, не - я говорил про ЦэВижн, который Pi* предпочёл ("после изучения вопроса",ёпрст!) ЯРу:
Сообщение от AlexPi Посмотреть сообщение
IAR, ... те версии что нам попадались имели ... более серьезные проблемы. Вообщем пока не смени(л) его на CV были одни глюки.
и на котором он, видимо, проводил свои проверки с long_long'ом и сдвигами.
__________________
There's always more than one way to skin a cat.
tempora вне форума  
Непрочитано 15.06.2013, 19:15  
dash
Частый гость
 
Регистрация: 19.08.2004
Сообщений: 33
Сказал спасибо: 6
Сказали Спасибо 11 раз(а) в 9 сообщении(ях)
dash на пути к лучшему
По умолчанию Re: Определение младшего и старшего байта числа типа int. Нужна подсказка

надо же, какую простую вещь аж на 7 страниц растянули
кстати, на счет "ушедшей" платформы big-endian.
мне периодически приходится сталкиваться с MIPS'ами, так что я бы не сказал, что платформа "ушла"
dash вне форума  
Непрочитано 15.06.2013, 22:10  
AlexPi
Прописка
 
Регистрация: 14.09.2010
Сообщений: 105
Сказал спасибо: 9
Сказали Спасибо 15 раз(а) в 11 сообщении(ях)
AlexPi на пути к лучшему
По умолчанию Re: Определение младшего и старшего байта числа типа int. Нужна подсказка

Сообщение от nahimovv Посмотреть сообщение
А нас, увы, не заводит ламповое звучание унылого кода КодэникуанеВижэн.
AVR Studio 4.18
Господин "nahimovv", я вот уже дважды Вас просил (заметьте в весьма вежливой форме) сказать какой именно у Вас компилятор, Вы же занимаетесь острословием на грани оскорблений вместо того чтобы дать внятный ответ на простой вопрос.
AVR Studio 4.18 - не компилятор , а так называемая IDE. Меня интересует что Вы к ней подключили.

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

Сообщение от AlexPi Посмотреть сообщение
на предыдущей странице я приводил еще код сгенерированний GCC
GCC и CvAvr (которые, впрочем, также были Вами названы далеко не сразу), без указания версий - тоже не компиляторы, а только названия линеек продуктов, так что "неча на зеркало пенять".

Хотя, дело, конечно же, не в компиляторах...
__________________
There's always more than one way to skin a cat.
tempora вне форума  
Непрочитано 15.06.2013, 22:31  
evg220
Гражданин KAZUS.RUN
 
Аватар для evg220
 
Регистрация: 03.02.2007
Сообщений: 116
Сказал спасибо: 3
Сказали Спасибо 20 раз(а) в 9 сообщении(ях)
evg220 на пути к лучшему
По умолчанию Re: Определение младшего и старшего байта числа типа int. Нужна подсказка

Сообщение от tempora Посмотреть сообщение
Хотя, дело, конечно же, не в компиляторах
И в них - тоже.
__________________
Здесь вам не тут!
evg220 вне форума  
 
Опции темы

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

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


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