|
Поменять местами биты в байте. |
|
|
|
 |
Ответов
|
May 13 2007, 07:05
|
Местный
  
Группа: Свой
Сообщений: 256
Регистрация: 6-03-06
Из: Украина, г. Винница
Пользователь №: 15 017

|
Цитата Все правильно, в варианте с битом 7, компилятор поступает правильно,тк значение tt.Bit7 есть не что иное как unsigned char (0 или 1, то есть полный байт),и если далее в коде будет работа с этим битом через обращение tt.Bit7, то он будет пользоваться значением временной регистровой переменной в которой хранится 0 или 1.А в варианте с битами 3 и 4 оптимизатор понял что дальше обращения к этим битам не будети смог соптимизировать это на конструкцию bst/bldВы спросите почему он не проделал тоже самое с битами 6 и 7 ?Так собственно по тому, что (8бит) это не только unsigned char(byte) но еще и просто char, для которого правила арифметики чуть-чуть отличаются...(старший бит может быть знаком) Все равно не могу понять поведения компилятора. Почему обработка битового поля внутри байта должна отличается аналогичного поля на границе байта? И почему компилятор должен воспринимать переменную как char, если для нее явно указан модификатор unsigned? А временным регистром можно было бы обойтись и одним. Второй использовал только для того, чтобы листинг не был перегружен обращением к volatile-переменной. Хотя уже сейчас понял, что нагляднее было бы впихнуть все это в какую-нибудь процедуру, отличную от main. К тому же я не стемился минимизовать размер кода/время выполнения, а просто хотел показать, как "заставить" IAR обратиться к флагу Т стандартными средствами С, а не выражениеми типа SREG.T = (s&0x01)!=0;
|
|
|
|
Сообщений в этой теме
ps1x Поменять местами биты в байте. May 9 2007, 09:43 zltigo Цитата(ps1x @ May 9 2007, 12:43) Допустим... May 9 2007, 10:22 ps1x Цитата(zltigo @ May 9 2007, 13:22) xxx = ... May 9 2007, 10:36  zltigo Цитата(ps1x @ May 9 2007, 13:36) да нет, ... May 9 2007, 10:46  haker_fox Цитата(ps1x @ May 9 2007, 18:36) да нет, ... May 9 2007, 11:47   ps1x Цитата(haker_fox @ May 9 2007, 14:47) А к... May 9 2007, 12:16    haker_fox Цитата(ps1x @ May 9 2007, 21:16) У меня е... May 11 2007, 02:41 Serg76 Цитата(zltigo @ May 9 2007, 13:22) xxx = ... May 9 2007, 12:23  ps1x Цитата(Serg76 @ May 9 2007, 15:23) Как мн... May 9 2007, 13:24   Serg76 Цитата(ps1x @ May 9 2007, 16:24) Я это сд... May 9 2007, 14:44    zltigo Цитата(Serg76 @ May 9 2007, 17:44) ....то... May 9 2007, 15:16    Edmundo Цитата(Serg76 @ May 9 2007, 18:44) 1. Сдв... May 9 2007, 15:30    IgorKossak Цитата(Serg76 @ May 9 2007, 17:44) Прошу ... May 10 2007, 20:36 Laksus Цитата(Serg76 @ May 9 2007, 14:23) Как мн... May 9 2007, 15:00 xemul Тупое решение в лоб
Кодt = x;
x &= 0x3f;
if... May 9 2007, 15:27 Visor Есть такой флаг "Т", вот через него можн... May 10 2007, 13:07 kv_addr Цитата(Visor @ May 10 2007, 16:07) Есть т... May 11 2007, 00:34  singlskv Цитата(kv_addr @ May 11 2007, 04:34) На а... May 11 2007, 15:27   kv_addr Цитата(singlskv @ May 11 2007, 18:27) Дли... May 11 2007, 15:50    singlskv Цитата(kv_addr @ May 11 2007, 19:50) Пыта... May 11 2007, 16:39     kv_addr Цитата(singlskv @ May 11 2007, 19:39) Дык... May 11 2007, 20:13      singlskv Цитата(kv_addr @ May 12 2007, 00:13) IAR-... May 11 2007, 21:05       kv_addr Цитата(singlskv @ May 11 2007, 23:20) А у... May 11 2007, 21:07        singlskv Цитата(kv_addr @ May 12 2007, 01:07) Пров... May 11 2007, 21:22         kv_addr Цитата(singlskv @ May 12 2007, 00:22) А в... May 11 2007, 22:35         Александр Куличок Цитата(singlskv @ May 12 2007, 00:22) А в... May 12 2007, 15:33          singlskv Цитата(Александр Куличок @ May 12 2007, 19... May 12 2007, 21:12 Punk Цитата(ps1x @ May 9 2007, 12:43) Допустим... May 10 2007, 14:06 Dog Pawlowa Два порта контроллера закольцевать еще не предлага... May 10 2007, 14:20 ae_ Цитата(ps1x @ May 9 2007, 18:43) Допустим... May 11 2007, 02:04 kv_addr Цитата(ae_ @ May 11 2007, 05:04) асм, три... May 11 2007, 14:47 defunct ЦитатаВедь и переносимость программ, написанных на... May 12 2007, 00:15 kv_addr Цитата(defunct @ May 12 2007, 03:15) Позв... May 12 2007, 02:01  defunct Цитата(kv_addr @ May 12 2007, 04:01) Но 1... May 12 2007, 02:42   kv_addr Цитата(defunct @ May 12 2007, 05:42) Прот... May 12 2007, 04:01    defunct Цитата(kv_addr @ May 12 2007, 06:01) IMHO... May 12 2007, 12:16 singlskv Видимо самый быстрый вариант на С будет таким:
Код... May 12 2007, 12:05 sensor_ua Цитатапрограммная реализация encoder'a/decoder... May 12 2007, 15:09 kv_addr Цитата(sensor_ua @ May 12 2007, 18:09) Ду... May 12 2007, 23:08
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|