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

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

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

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

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

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

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 02.04.2009, 19:32  
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию IAR AVR

Кто подскажет такую штуку... IAR AVR 5.11B

КОД 2 - компилируется нормально.
КОД 1 - компилируется ТОЛЬKО!! 1 я строчка,
а следующие строки компилятором игнорируются. Отличия в записи только в том что во втором примере перемееная записывается с условием ==1, а в первом это условие опущено.
Для наглядности удобнее указывать ==0, ==1, это было бы так более удобно для чтения программы,
а компилятор игнорирует, предупреждений и ошибок не пишет. В чём прикол?...

Код 1:
Код:
if ((statkey0 & 1)==1) {txdata=1;}
if ((statkey0 & 2)==1) {txdata=2;}
if ((statkey0 & 4)==1) {txdata=4;}
if ((statkey0 & 8)==1) {txdata=8;}
if ((statkey0 & 16)==1) {txdata=16;}
if ((statkey0 & 32)==1) {txdata=32;}
if ((statkey0 & 64)==1) {txdata=64;}
if ((statkey0 & 128)==1) {txdata=128;}
Код 2:
Код:
if (statkey0 & 1)  {txdata=1;}
if (statkey0 & 2)  {txdata=2;}
if (statkey0 & 4)  {txdata=4;}
if (statkey0 & 8)  {txdata=8;}
if (statkey0 & 16) {txdata=16;}
if (statkey0 & 32) {txdata=32;}
if (statkey0 & 64) {txdata=64;}
if (statkey0 & 128) {txdata=128;}
Работа с флагами - битовыми структурами..
как с битовыми переменными - работает нормально, но хочу загружать-читать весь этот байт из которого состоят битовые структуры, например грузить туда число а обращатся побитно...
как записать?

Код:
struct { unsigned char
	key0_0:1,
	key0_1:1,
	key0_2:1,
	key0_3:1,
	key0_4:1,
	key0_5:1,
	key0_6:1,
	key0_7:1;
}
Прикрепленный файл: 8653550.rar
Реклама:
picavr вне форума  
Непрочитано 02.04.2009, 20:15  
avr123-nm-ru
Почётный гражданин KAZUS.RU
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию

Если почитать

"Язык Си для МК AVR PIC ARM"
http://avr123.nm.ru/05.htm

то похоже всегда ложны выражения в скобках if()

if ((statkey0 & 2)==1) {txdata=2;}
if ((statkey0 & 4)==1) {txdata=4;}
if ((statkey0 & 8)==1) {txdata=8;}
if ((statkey0 & 16)==1) {txdata=16;}
if ((statkey0 & 32)==1) {txdata=32;}
if ((statkey0 & 64)==1) {txdata=64;}
if ((statkey0 & 128)==1) {txdata=128;}

потому их оптимизатор исключает.

а так наверно не будет исключать:

if ((statkey0 & 2)==2) {txdata=2;}
if ((statkey0 & 4)==4) {txdata=4;}
if ((statkey0 & 8)==8) {txdata=8;}
...
...

а может вот так бы работало

if ((statkey0 & 2) != 0) {txdata=2;}
if ((statkey0 & 4) != 0) {txdata=4;}
if ((statkey0 & 8) != 0) {txdata=8;}
...
...

... 10 лет на АСМ-е это круто !
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
Непрочитано 03.04.2009, 12:37  
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию

Сообщение от avr123-nm-ru
то похоже всегда ложны выражения в скобках if()
if ((statkey0 & 2)==1) {txdata=2;}
if ((statkey0 & 4)==1) {txdata=4;}
потому их оптимизатор исключает.

а может вот так бы работало
if ((statkey0 & 2) != 0) {txdata=2;}
if ((statkey0 & 4) != 0) {txdata=4;}
уровень оптимизации - NONE!

то есть идёт сравнение не с СОСТОЯНИЯ
ВЫДЕЛЕНЫЙ БИТ ==0
ВЫДЕЛЕНЫЙ БИТ ==1
а сравнение ВЕСА ВЫДЕЛЕНОГО БИТА!

я считал что компилятор будет сравнивать СОСТОЯНИЕ ВЫДЕЛЕННОГО бита (0/1), а не его вес(1/2/4/8/16/32/64/12!!!

Сенк...

тогда будет удобнее для восприятия писать так!
сравнение с 0
if ((statkey0››0 & 1)==0) {txdata=2;}
сравнение с 1
if ((statkey0››1 & 1)==1) {txdata=4;}

Сообщение от avr123-nm-ru
10 лет на АСМ-е это круто ![/
да как раз в АСМЕ всё понятно, нет прокладки между мной и ядром )))которой ещё нужно обьяснять что делать ))))
picavr вне форума  
Непрочитано 03.04.2009, 12:43  
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию

а как 8-ми битовым структурам присвоить имя байтовой переменой, тобы работать как с байтом.. адресовать через указатель?

Код:
struct { unsigned char
	key0_0:1,//флаг клавиши 0
	key0_1:1,//флаг клавиши 1
	key0_2:1,//флаг клавиши 2
	key0_3:1,//флаг клавиши 3
	key0_4:1,//флаг клавиши 4
	key0_5:1,//флаг клавиши 5
	key0_6:1,//флаг клавиши 6
	key0_7:1;//флаг клавиши 7
}
picavr вне форума  
Непрочитано 03.04.2009, 13:28  
avr123-nm-ru
Почётный гражданин KAZUS.RU
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию

Сообщение от picavr
я считал что компилятор будет сравнивать СОСТОЯНИЕ ВЫДЕЛЕННОГО бита (0/1), а не его вес(1/2/4/8/16/32/64/12!!!
Поэтому и надо читать Язык Си для МК прежде чем писать на Си - ИМХО.

Там написано что "ИСТИНА" это все что угодно отличное от нуля, а не обязательно 1.

Потому работало бы наверно:

==TRUE ( сумлеваюсь )

!= 0

== число то которое слева получается.

Сообщение от picavr
то есть идёт сравнение не с СОСТОЯНИЯ
ВЫДЕЛЕНЫЙ БИТ ==0
ВЫДЕЛЕНЫЙ БИТ ==1
а сравнение ВЕСА ВЫДЕЛЕНОГО БИТА!
Можете называть это и "весом бита" - но реально это просто число - результат по-битовой операции "И".

А то вы слква "состояние" пишите а сравниваете его с числом.
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
Непрочитано 03.04.2009, 13:30  
avr123-nm-ru
Почётный гражданин KAZUS.RU
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию

Сообщение от picavr
а как 8-ми битовым структурам присвоить имя байтовой переменой, тобы работать как с байтом.. адресовать через указатель?

Код:
struct { unsigned char
	key0_0:1,//флаг клавиши 0
	key0_1:1,//флаг клавиши 1
	key0_2:1,//флаг клавиши 2
	key0_3:1,//флаг клавиши 3
	key0_4:1,//флаг клавиши 4
	key0_5:1,//флаг клавиши 5
	key0_6:1,//флаг клавиши 6
	key0_7:1;//флаг клавиши 7
}
Если не претит то скачайте "FAQ по микроконтроллерам AVR PIC ARM"
http://avr123.nm.ru/avrfaq.rar

там и структуры struct и союзы union и примеры и всякого много нужного.

Если претит то ни в коем случае не скачивайте !
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
Непрочитано 03.04.2009, 14:31  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

Я скачал... Найти там что-то...
Код:
union{
struct { 
 unsigned  key0_0:1,//флаг клавиши 0
 unsigned  key0_1:1,//флаг клавиши 1
 unsigned  key0_2:1,//флаг клавиши 2
 unsigned  key0_3:1,//флаг клавиши 3
 unsigned  key0_4:1,//флаг клавиши 4
 unsigned  key0_5:1,//флаг клавиши 5
 unsigned  key0_6:1,//флаг клавиши 6
 unsigned  key0_7:1;//флаг клавиши 7
       }bite;
 unsigned char byte;
}un;
un.byte=0x7f;
un.bite.key0_0=0;
Юнион - это союз 2 разных переменных, которые занимают одно и то же место в памяти. Меняешь одну - меняется другая.
__________________
warez
urry вне форума  
Непрочитано 03.04.2009, 16:55  
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию

Сообщение от urry
Я скачал... Найти там что-то...
Та да ))) Вообще то, такие вещи нужно писать так что бы было понятно не только самому писавшему...
Что бы не было НЕОДНОЗНАЧНОГО толкования прочитанного.Вот Юра ответил так, что по другому его просто не поймёш. Самую суть.

Сообщение от urry
Юнион - это союз 2 разных переменных, которые занимают одно и то же место в памяти. Меняешь одну - меняется другая.
Спасибо, понятно, я думал можно обойтись каким то образом указав (при определении этой структуры) имя ПЕРЕМЕНОЙ (char, int, long) для бытовой структуры из 8,16,32 бит.

Сообщение от avr123-nm-ru
Можете называть это и "весом бита" - но реально это просто число - результат по-битовой операции "И".
ВЕС БИТА - это и есть устоявшееся название для ТАКОГО ЧИСЛА, которое показывает какой вес имеет данный бит в числе.

Сообщение от avr123-nm-ru
А то вы слква "состояние" пишите а сравниваете его с числом.
это я уже вкурил, просто я думал компилятор преобразует ВЕС бита в его СОСТОЯНИЕ. Наверное посчитал его слишком умным ))))

Сообщение от avr123-nm-ru
Там написано что "ИСТИНА" это все что угодно отличное от нуля, а не обязательно 1.
А у битовой переменной всего ДВА СТОСТОЯНИЯ. 0 и 1.
Поэтому и возникла путаница. Я считал что имеем состояние бита.

Просто хочется добится более наглядых записей для битовых операций, что бы програмы были более читабельны, как привык в АСМе.
picavr вне форума  
Непрочитано 03.04.2009, 18:05  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

я же давал ссылку на макросы... Куда уже наглядней...
http://electronix.ru/forum/index.php...=post&id=30242
__________________
warez
urry вне форума  
Непрочитано 03.04.2009, 21:56  
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию

Сообщение от urry
я же давал ссылку на макросы... Куда уже наглядней...
Сори.. Юрий, наверное я не очень ясно выразился..
это реплика
Код:
Вообще то, такие вещи нужно писать так что бы было понятно не только самому писавшему...
была по поводу изложения у avr123...
А ты как раз обьяснил доходчиво. За что и СПАСИБО.
picavr вне форума  
 

Закладки
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
IAR for AVR kassiopay Микроконтроллеры, АЦП, память и т.д 5 27.03.2009 17:20
Вопрос новичка. IAR C, AVR & interrupt sns13 Микроконтроллеры, АЦП, память и т.д 5 18.03.2008 18:08
IAR for AVR vasilij-kursikov Микроконтроллеры, АЦП, память и т.д 29 28.09.2006 18:14
Вопрос по дизайну IAR Oleksandr_Nemchenko Proteus, KiCAD и другие ECAD 1 04.08.2006 14:16
Вопрос по IAR константин Микроконтроллеры, АЦП, память и т.д 1 11.09.2005 23:07


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot