Определение младшего и старшего байта числа типа int. Нужна подсказка
15.06.2013, 02:24
|
|
|
Прописка
Регистрация: 14.09.2010
Сообщений: 105
Сказал спасибо: 9
Сказали Спасибо 15 раз(а) в 11 сообщении(ях)
|
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 и скорее всего все байты начнут формироваться аналогичным образом.
|
|
|
|
15.06.2013, 04:05
|
|
|
Гражданин KAZUS.RUN
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: Определение младшего и старшего байта числа типа int. Нужна подсказка
|
|
|
|
15.06.2013, 14:44
|
|
|
Заблокирован
Регистрация: 25.04.2013
Сообщений: 1,427
Сказал спасибо: 0
Сказали Спасибо 381 раз(а) в 251 сообщении(ях)
|
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 |
Современные компиляторы продвинуты настолько, что в состоянии отличить сдвиги кратные восьми. Нужно только правильно выбрать и научиться ими пользоваться.
|
|
|
|
15.06.2013, 16:35
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 10.01.2007
Сообщений: 3,411
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
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.
|
|
|
|
15.06.2013, 17:03
|
|
|
Заблокирован
Регистрация: 25.04.2013
Сообщений: 1,427
Сказал спасибо: 0
Сказали Спасибо 381 раз(а) в 251 сообщении(ях)
|
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 |
|
Цитата:
|
В общем, тяжёлый случай.
|
Неужели та самая, знаменитая КодэникуанеВижэн реликт-версия ледникового периода и переписи мамонтов?
|
|
|
|
15.06.2013, 19:01
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 10.01.2007
Сообщений: 3,411
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
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.
|
|
|
|
15.06.2013, 19:15
|
|
|
Частый гость
Регистрация: 19.08.2004
Сообщений: 33
Сказал спасибо: 6
Сказали Спасибо 11 раз(а) в 9 сообщении(ях)
|
Re: Определение младшего и старшего байта числа типа int. Нужна подсказка
надо же, какую простую вещь аж на 7 страниц растянули 
кстати, на счет "ушедшей" платформы big-endian.
мне периодически приходится сталкиваться с MIPS'ами, так что я бы не сказал, что платформа "ушла"
|
|
|
|
15.06.2013, 22:10
|
|
|
Прописка
Регистрация: 14.09.2010
Сообщений: 105
Сказал спасибо: 9
Сказали Спасибо 15 раз(а) в 11 сообщении(ях)
|
Re: Определение младшего и старшего байта числа типа int. Нужна подсказка
Сообщение от nahimovv
|
А нас, увы, не заводит ламповое звучание унылого кода КодэникуанеВижэн.
AVR Studio 4.18
|
Господин "nahimovv", я вот уже дважды Вас просил (заметьте в весьма вежливой форме) сказать какой именно у Вас компилятор, Вы же занимаетесь острословием на грани оскорблений вместо того чтобы дать внятный ответ на простой вопрос.
AVR Studio 4.18 - не компилятор , а так называемая IDE. Меня интересует что Вы к ней подключили.
А во вторых, на предыдущей странице я приводил еще код сгенерированний GCC, там приблизительно тот же результат, подобный результат получил и "_Артём_". Поэтому делать однозначный вывод при этом оскорбляя других по крайней мере не разумно.
Ваш частный случай мало что дает как и мои и того же "_Артём_". Нужно набрать статистику и только после этого можно делать выводы.
Лично я хочу просто разобраться с вопросом, а не доказывать свое любой ценой.
|
|
|
|
15.06.2013, 22:17
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 10.01.2007
Сообщений: 3,411
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Определение младшего и старшего байта числа типа int. Нужна подсказка
Сообщение от AlexPi
|
|
на предыдущей странице я приводил еще код сгенерированний GCC
|
GCC и CvAvr ( которые, впрочем, также были Вами названы далеко не сразу), без указания версий - тоже не компиляторы, а только названия линеек продуктов, так что " неча на зеркало пенять".
Хотя, дело, конечно же, не в компиляторах...
__________________
There's always more than one way to skin a cat.
|
|
|
|
15.06.2013, 22:31
|
|
|
Гражданин KAZUS.RUN
Регистрация: 03.02.2007
Сообщений: 116
Сказал спасибо: 3
Сказали Спасибо 20 раз(а) в 9 сообщении(ях)
|
Re: Определение младшего и старшего байта числа типа int. Нужна подсказка
Сообщение от tempora
|
|
Хотя, дело, конечно же, не в компиляторах
|
И в них - тоже.
__________________
Здесь вам не тут!
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 03:12.
|
|