CodeVision AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

используйте компилятор, который соблюдает требования стандарта Си, и проблемы исчезнут: signed будет знаковым, unsigned - беззнаковым...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Telek
Встал на лапы
Сообщения: 115
Зарегистрирован: Пт май 23, 2008 23:59:37
Откуда: Москва

Сообщение Telek »

ARV писал(а):используйте компилятор, который соблюдает требования стандарта Си, и проблемы исчезнут: signed будет знаковым, unsigned - беззнаковым...

Это типа ВинАВР? т.е. это частный косяк CVAVR и на этот момент забить/обходить_костылями?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

я не знаю, частый это косяк или нет, но если компилятору написано unsigned - он не должен фантазировать, равно как и если написано signed. если же компилятор чего-то по-своему умничает - это непорядок.

стандарт с определенного момента разошелся во взглядах на char и сейчас разные компиляторы ориентируются на разные стандарты - некоторые считают char аналогом unsigned char (т.е. без знака по умолчанию), другие - signed char (т.е. по умолчанию со знаком), и это повсеместно. но чтобы явно написанное signed char или unsigned char как-то иначе понимать - этого стандарт не допускает никакой!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

Telek писал(а):

Код: Выделить всё

signed char zero;
signed char menu_V_position;

zero=0;
menu_V_position-- ;
if (menu_V_position<zero) menu_V_position=2;

т.е. когда явно идет сравнение двух signed char, то все равно болт...


А что содержит переменная объявленая но которой не присвоено значение ?

Это zero=0; вы сделали.
А вторую переменную обнулить пробовали ?
Последний раз редактировалось tych Пн сен 22, 2008 22:08:40, всего редактировалось 1 раз.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

tych писал(а):Это zero=0; вы сделали. А вторую переменную обнулить ?
по умолчанию все переменные обнуляться должны автоматически при инициализации программы, если нет принудительной инициализации.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

ARV писал(а):
tych писал(а):Это zero=0; вы сделали. А вторую переменную обнулить ?
по умолчанию все переменные обнуляться должны автоматически при инициализации программы, если нет принудительной инициализации.

Дивная бредятина ! Там может быть что угодно.

Советую перечитать "Керниган, Ритчи - Язык программирования Си" - http://pid.by.ru/05.htm

Потому в курсе я и советую при объявлении переменных присваивать им значения явно, если важно быть увереным что там лежит.

В компиляторах IAR, ICC, CVAVR, KEIL, PICC18, PICC30 в свойствах проекта указывается чем считать char по-умолчанию. Изначатьно это беззнаковая обычно величина.

Наверняка и в WinAVR есть такая настройка - начальное ее значение мне не известно.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Telek
Встал на лапы
Сообщения: 115
Зарегистрирован: Пт май 23, 2008 23:59:37
Откуда: Москва

Сообщение Telek »

tych писал(а):
Telek писал(а):

Код: Выделить всё

signed char zero;
signed char menu_V_position;

zero=0;
menu_V_position-- ;
if (menu_V_position<zero) menu_V_position=2;

т.е. когда явно идет сравнение двух signed char, то все равно болт...


А что содержит переменная объявленая но которой не присвоено значение ?

Это zero=0; вы сделали.
А вторую переменную обнулить пробовали ?


Это я привел условно. чтобы показать, что я тоже сравниваю с нулем.
т.е. что условия идентичны
if(menu_V_position<zero)
if(menu_V_position<0)
Вторая переменная(menu_V_position) тоже обнуляется, и когда она достигает -1 то условие не работает.
а вот условие if(menu_V_position==-1) работает. и при -1 срабатывает условие типа if(menu_V_position больше 0)... вот такие пирожки с котятами. Т.е. на лицо явное неприятие signed char в if'e
Аватара пользователя
mr.Kirill
Мучитель микросхем
Сообщения: 438
Зарегистрирован: Вт сен 25, 2007 19:40:26
Откуда: Челябинск

Сообщение mr.Kirill »

А вот эту галочку пытались снимать?
Вложения
Config.JPG
Настройки проекта CVAVR
(54.01 КБ) 396 скачиваний
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

Telek писал(а): Т.е. на лицо

"на лицо" былобы если бы вы проект приложили и с файлами симулятора.
Telek писал(а): явное неприятие signed char в if'e

Скачайте нормальный CVAVR у меня на дом. страничке и будет вам счастье и удача.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Telek
Встал на лапы
Сообщения: 115
Зарегистрирован: Пт май 23, 2008 23:59:37
Откуда: Москва

Сообщение Telek »

mr.Kirill писал(а):А вот эту галочку пытались снимать?

А смысл, если я явно указал тип переменных? чтобы потом глюки в сторонних библиотеках ловить?
Telek
Встал на лапы
Сообщения: 115
Зарегистрирован: Пт май 23, 2008 23:59:37
Откуда: Москва

Сообщение Telek »

tych писал(а):
Telek писал(а): Т.е. на лицо

"на лицо" былобы если бы вы проект приложили и с файлами симулятора.
Telek писал(а): явное неприятие signed char в if'e

Скачайте нормальный CVAVR у меня на дом. страничке и будет вам счастье и удача.

Позже приложу. ...а на вашей домашней странице он чем нормальней, чем на сайте производителя или на казусе?
ЗЫ. Глюк проверен в 1.5.х и 2.0.х - работает.
Аватара пользователя
mr.Kirill
Мучитель микросхем
Сообщения: 438
Зарегистрирован: Вт сен 25, 2007 19:40:26
Откуда: Челябинск

Сообщение mr.Kirill »

Telek писал(а):А смысл, если я явно указал тип переменных? чтобы потом глюки в сторонних библиотеках ловить?

Между прочим прошу обратить внимание на название закладки в приведенной картинке. Если настраиваете проект наполовину, то не кричите что глюки и прочее. Софтом пользоваться нужно научиться, а потом о глюках кричать.
Глюки сторонних библиотек? Если они по нормам написаны то никаких глюков не будет.
Проверяйте и отчет в студию. Иначе на кой ляд Вы вообще взялись за это?

ИМХО снимайте галку и везде явно объявляйте тип char'a
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

tych, в Си переменные инициализируются нулевым значением всегда, если не объявлено иное. это стандарт. есть отступления - разные там объявления классов памяти, секций, атрибутов и т.п. - но если просто объявлена переменная - она считается имеющей значение 0.
во-вторых, в WinAVR, конечно, есть переключатель типа char - но WinAVR всегда следует тому, что написано в программе: даже если этот самый переключатель включен на беззнаковый char, а в программе написано signed char - эта переменная будет знаковой. что, собственно говоря, и должно быть.
ваш совет указывать значения явно - безусловно следует признать правильным, т.к. это во-первых признак хорошего стиля программирования, во-вторых, гарантия от нестандартного поведения компиляторов... но совет не имеет отношения к поведению компилятора - он или соответствует какому-то стандарту, или нет... (увы, стандартов Си развелось великое множество, и порой, они отличаются друг от друга на столько, что впору говорить о противоречиях)...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Telek
Встал на лапы
Сообщения: 115
Зарегистрирован: Пт май 23, 2008 23:59:37
Откуда: Москва

Сообщение Telek »

mr.Kirill писал(а):
Telek писал(а):А смысл, если я явно указал тип переменных? чтобы потом глюки в сторонних библиотеках ловить?

Между прочим прошу обратить внимание на название закладки в приведенной картинке. Если настраиваете проект наполовину, то не кричите что глюки и прочее. Софтом пользоваться нужно научиться, а потом о глюках кричать.
Глюки сторонних библиотек? Если они по нормам написаны то никаких глюков не будет.
Проверяйте и отчет в студию. Иначе на кой ляд Вы вообще взялись за это?

ИМХО снимайте галку и везде явно объявляйте тип char'a

Эта галка стоит по умолчанию. Настройки по умолчанию я не трогаю. Эта галка говорит как воспринимать тип чар, если явно не указана знаковость. Я явно указываю знаковоть.(как вообще эта галка может влиять на явно указанный тип? кроме как переделать явно неуказанные чары? переделка всех чаров, в которых не указана знаковость мне не нужна, т.к. наличие этой галки подразумевает что вместо unsigned char я могу написать просто char) Что в моих действиях не логично?
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

ARV писал(а): это стандарт.

Который вы придумали ?
ARV писал(а): она считается имеющей значение 0

да считать то можно что угодно.
ARV писал(а): WinAVR всегда следует тому, что написано в программе: даже если этот самый переключатель включен на беззнаковый char, а в программе написано signed char - эта переменная будет знаковой. что, собственно говоря, и должно быть.

Так же и в компиляторах которые я перечислил выше. в CVAVR раздел справки "Data Types"

Код: Выделить всё

char   8   -128 to 127
unsigned char   8   0 to 255
signed char   8   -128 to 127
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

Telek писал(а): Я явно указываю знаковоть.

Наверно к новому году и проект выложите ! Да ? Т.е. в январе 2009 разговор станет наконец предметным.

ARV писал(а):tych, ваш совет указывать значения явно - безусловно следует признать правильным.

А тож ! Курс таки ... для ньюби.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

tych, не я придумал Си, и тем более его стандарты - я всего лишь им следую в своих рассуждениях (и в программах). это во-первых.

а во-вторых - если все так хорошо, как вы говорите - почему у товарища траблы с тем, что объявленная signed char переменная не анализируется на значение меньше нуля? согласен, причины могут быть и не в типе - но я сужу лишь по тому, что сказано на форуме.

в-третьих, "считается" - означает буквально "следует быть уверенным, что", а не "извечь" - из действительно непроинициализированной переменной можно извлечь (считать) все что угодно - тут вы правы. однако, не пытайтесь прикинуться дубом - вам не идет... вы прекрасно поняли, что я имел ввиду

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

Мой уютный бложик... заходите!
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

ARV писал(а):tych, не я придумал Си

Я догадался ! и потому привел вам ссылку на книгу основоположников где написано что "мусор может быть в переменной которой не присвоено значение"

ARV писал(а):и тем более его стандарты - я всего лишь им следую

Дак вы покажите этот стандарт ! Чтоб и другие могли ему следлвать. Покажите стандарт где написано что нули будут в переменных которым значение не присвоено.

Вы про МИФИЧЕСКИЙ стандарт Си уже в нескольких ветках написали ... УВИДЕТЬ бы его ! Приобщиться ...

ARV писал(а): почему у товарища траблы с тем, что объявленная signed char переменная не анализируется на значение меньше нуля?

Я Ж НЕ ЭКСТРАСЕНС !!! Вот жду когда товаришь приложит архив с проектом и с прошивкой !

ARV писал(а): не пытайтесь прикинуться дубом - вам не идет...

Вы меня еще в образе ШЛАНГА не видели ! :lol:

ARV писал(а): а мнение специалистов (судя по разным форумам) об этом произведении пока что далеко от восхищения...

Слава богу что СПЕЦИАЛИСТЫ и НА РАЗНЫХ форумах имеют мнение о нём.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

tych писал(а):Вы меня еще в образе ШЛАНГА не видели ! :lol:
видимо, лишь потому и жив пока...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

tych, я не поленился - скачал рекомендованную вами кигу "основоположников" - и что я вижу?!
да вы сами ее не читали, похоже!
итак, в разделе 4.9 читаем следующее:
INT NWHITE = 0;
INT NOTHER = 0;
INT NDIGIT[10] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;
MAIN() /* COUNT DIGITS, WHITE SPACE, OTHERS */
(
INT C, I;
...
)
Эти инициализации фактически не нужны, так как все присваиваемые значения равны нулю, но хороший стиль - сделать их явными.
(выделение - мое)

по-моему, это явно говорит о том, что при объявлении переменной она автоматически получает значение НОЛЬ - это сказал уже не я, а "отцы" Ритчи с Керниганом, которым вы доверяете по-видимому... всю книгу, само-собой, я не читал, но не думаю, что где-то будет написано опровержение этого... а на счет автоматических и т.п. переменных - я уже говорил, они не инициализируются нулями, само собой...

P.S. если можно, слова БРЕД и т.п. резкие выражения не используйте, если на 100% в них не уверены... а в мой адрес - вообще не используйте, надеюсь на ваш культурный уровень.

P.P.S. а мнение о вашем творении не имеет, наверное, лишь не подключенный к интернету :)))
Последний раз редактировалось ARV Вт сен 23, 2008 13:19:03, всего редактировалось 1 раз.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Ответить

Вернуться в «AVR»