Easyelectronics.ru

Электроника для всех
Текущее время: 23 сен 2018, 21:25

Часовой пояс: UTC + 5 часов



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин комплектующих.

Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
 Заголовок сообщения: ошибка с применением переменных типа bit
СообщениеДобавлено: 08 мар 2018, 17:47 
Только пришел

Зарегистрирован: 21 май 2017, 16:30
Сообщения: 13
Всем привет!
Народ подскажите как исправить ситуацию:
Для компиляции использую Code Vision, для отладки AVR Studio 4.19.
В коде программы использовал 4 битовые переменные, через disassembler посмотрел, что переменные записываются по адресу R2.0;R2.1;R2.2;R2.3, то есть в один регистр, но разные биты. В студии, адрес хранения в каждой из переменных отображается просто R2. При отладке в студии при изменении любой из переменных - изменяются все разом, сбрасываются так же, как будто нет разделения на биты и все четыре переменные находятся по одному адресу. Думал что создаётся только видимость ошибки, но программа работает соответственно не правильно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ошибка с применением переменных типа bit
СообщениеДобавлено: 08 мар 2018, 20:15 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 386
Скорее всего, в вашем секретном коде ошибка с применением переменных типа bit.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ошибка с применением переменных типа bit
СообщениеДобавлено: 08 мар 2018, 23:24 
Только пришел

Зарегистрирован: 21 май 2017, 16:30
Сообщения: 13
VladislavS писал(а):
Скорее всего, в вашем секретном коде ошибка с применением переменных типа bit.

Код не секретен, это часы, однако это мой первый код и он запутан. Для примера я написал простейший код, и получил новый результат: при установке любого из значений, вручную, в окне watch в "1", я её и получал. Когда программа установила переменную, находящуюся во втором разряде регистра в "1" то все переменные стали выдавать мне цифру 4, в добавок при установке программой нулевого бита, то есть получилось бинарное 0b00000101, все переменные отображали цифру 5. Очевидно предположить, что отладчик просто выдает мне не побитно переменные а весь регистр скопом в десятиричном виде.
Внимание вопрос: можно ли исправить данное недоразумение или придется компенсировать руками и калькулятором?


Вложения:
4.jpg
4.jpg [ 56.04 Кб | Просмотров: 546 ]
3.jpg
3.jpg [ 57 Кб | Просмотров: 546 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ошибка с применением переменных типа bit
СообщениеДобавлено: 08 мар 2018, 23:35 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2507
Откуда: Санкт-Петербург
А отладчик в avr studio вообще знает про изыски с битовыми переменными в code vision? Сдаётся мне, нет - раз уж показывает в качестве переменной не один бит, а целый регистр.

Вообще зря вы эти битовые переменные использовать стали. Криво, нестандартно, premature optimization... Можете не заморачиваясь выделить под каждую по байту (BOOL), быстрее работать будет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ошибка с применением переменных типа bit
СообщениеДобавлено: 08 мар 2018, 23:52 
Только пришел

Зарегистрирован: 21 май 2017, 16:30
Сообщения: 13
aamonster писал(а):
А отладчик в avr studio вообще знает про изыски с битовыми переменными в code vision? Сдаётся мне, нет - раз уж показывает в качестве переменной не один бит, а целый регистр.

Вообще зря вы эти битовые переменные использовать стали. Криво, нестандартно, premature optimization... Можете не заморачиваясь выделить под каждую по байту (BOOL), быстрее работать будет.


Решил что нужно привыкать экономить место. Склонялся поставить как и остальных "unsigned char", в таком случае есть ли у "BOOL" преимущество перед "unsigned char" или тоже не заморачиваться?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ошибка с применением переменных типа bit
СообщениеДобавлено: 09 мар 2018, 00:00 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2507
Откуда: Санкт-Петербург
Premature optimization, говорю же. К тому же за экономию пары байт ram вы расплачиваетесь разрастанием кода (взять/поменять значение бита - куда больше операций, чем байт целиком)
Ну и лучше привыкайте обходиться без нестандартных расширений.

BOOL - тот же unsigned char, разница чисто смысловая (если вы увидели в коде BOOL x=2 - значит, в коде ошибка). Считайте это пометкой для себя.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ошибка с применением переменных типа bit
СообщениеДобавлено: 09 мар 2018, 00:13 
Только пришел

Зарегистрирован: 21 май 2017, 16:30
Сообщения: 13
aamonster писал(а):
Premature optimization, говорю же. К тому же за экономию пары байт ram вы расплачиваетесь разрастанием кода (взять/поменять значение бита - куда больше операций, чем байт целиком)
Ну и лучше привыкайте обходиться без нестандартных расширений.

BOOL - тот же unsigned char, разница чисто смысловая (если вы увидели в коде BOOL x=2 - значит, в коде ошибка). Считайте это пометкой для себя.

Убедительно. Так и сделаю.
Спасибо!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ошибка с применением переменных типа bit
СообщениеДобавлено: 09 мар 2018, 00:27 
Старожил
Аватара пользователя

Зарегистрирован: 14 апр 2014, 11:06
Сообщения: 1314
Откуда: Курск
А в чём секретный смысл использования старой версии студии совместно с непонятным компилятором СИ ?
Мне правда интересно зачем такие извраты? Ведь данный тип (bit) не стандартный. Есть стандартные тип bool, ну или uint1_t (не уверен схавает ли компилятор)
Что то часто встречается связка Code Vision со старой студией, судя по вопросам. Особенно у новичков. Такое чувство что читают один учебник
Ладно б "гуру". У профи могут быть свои причины. Но в академических целях...
Чем плоха студия с компилятором "из коробки"?

/me Задумался


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ошибка с применением переменных типа bit
СообщениеДобавлено: 09 мар 2018, 01:35 
Заглядывает иногда

Зарегистрирован: 26 фев 2018, 03:06
Сообщения: 59
aamonster писал(а):
Вообще зря вы эти битовые переменные использовать стали. Криво, нестандартно, premature optimization... Можете не заморачиваясь выделить под каждую по байту (BOOL), быстрее работать будет.
интересно, а когда речь пойдет о сотне-другой флагов предложишь платформу сменить


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ошибка с применением переменных типа bit
СообщениеДобавлено: 09 мар 2018, 01:56 
Заглядывает иногда

Зарегистрирован: 26 фев 2018, 03:06
Сообщения: 59
MOZG12342 писал(а):
При отладке в студии при изменении любой из переменных - изменяются все разом, сбрасываются так же, как будто нет разделения на биты и все четыре переменные находятся по одному адресу. Думал что создаётся только видимость ошибки, но программа работает соответственно не правильно.
для описания битов примените структуру , как это рекомендует делать справочник молодого сурка по Си и если отладчик не полное г... он вам нормально покажет все биты.

Код:
volatile struct flag_type {
  unsigned  a : 1;
  unsigned b  : 1;
  unsigned c  : 1;
  unsigned     : 1;
  unsigned     : 1;
  unsigned     : 1;
  unsigned     : 1;
  unsigned     : 1;
} flag;
void main (void){
while(1){
  if(flag.b) flag.b=0;
  if (!flag.c) flag.c=1;
  if (flag.a) flag.a=0;
     else flag.a=1;
  }
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ошибка с применением переменных типа bit
СообщениеДобавлено: 09 мар 2018, 09:29 
Только пришел

Зарегистрирован: 21 май 2017, 16:30
Сообщения: 13
Cthulhu писал(а):
Мне правда интересно зачем такие извраты? Ведь данный тип (bit) не стандартный. Есть стандартные тип bool, ну или uint1_t

Не знал я просто что bool стандартный, а bit не стандартный.

Cthulhu писал(а):
А в чём секретный смысл использования старой версии студии совместно с непонятным компилятором СИ ?

Что то часто встречается связка Code Vision со старой студией, судя по вопросам. Особенно у новичков. Такое чувство что читают один учебник

Чем плоха студия с компилятором "из коробки"?

Вот на стадии выбора платформы разработки установил Code Vision, AVR studio 4.19 и Atmel studio 7, и стал пробовать и там и там, намереваясь выбрать подходящее. Почитал форум и там кто то писал, что Atmel studio ресурсоёмкая, что AVR studio 4.19 надежная и законченная, и что связки Code Vision и AVR studio 4.19 полностью хватает для разработки программ. К тому же большим преимуществом было именно то, что это старая связка, т.к. старые программы обычно хорошо изучены, известны подводные камни и написано множество примеров.
Но я задумался о Atmel studio, и обязательно попробую снова, если оно того стоит.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ошибка с применением переменных типа bit
СообщениеДобавлено: 09 мар 2018, 09:38 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2507
Откуда: Санкт-Петербург
DmitriyVDN писал(а):
интересно, а когда речь пойдет о сотне-другой флагов предложишь платформу сменить

К тому моменту, как у ТС образуется сотня-другая полей - он уже привыкнет пользоваться битовыми масками (что эффективней переменных типа bit при проверке нескольких полей сразу).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ошибка с применением переменных типа bit
СообщениеДобавлено: 09 мар 2018, 15:48 
Заглядывает иногда

Зарегистрирован: 26 фев 2018, 03:06
Сообщения: 59
ваше эффективно работает только в случае проверки установленных битов в одном регистре, в случае разных регистров и проверке на установку и сброс ваше эффективно сразу теряется. особенно если речь пойдет не об АВР , а о платформах имеющих биторентированные команды ассемблера для работы с регистрами.
к тому же не совсем понятно как ваш опус отвечает на вопрос ТС
Цитата:
Очевидно предположить, что отладчик просто выдает мне не побитно переменные а весь регистр скопом в десятиричном виде.
Внимание вопрос: можно ли исправить данное недоразумение или придется компенсировать руками и калькулятором?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ошибка с применением переменных типа bit
СообщениеДобавлено: 09 мар 2018, 22:35 
Только пришел

Зарегистрирован: 21 май 2017, 16:30
Сообщения: 13
Всем спасибо! тема закрыта


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB