CodeVision AVR в вопросах и ответах
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18547
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
используйте компилятор, который соблюдает требования стандарта Си, и проблемы исчезнут: signed будет знаковым, unsigned - беззнаковым...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Реклама
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18547
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
я не знаю, частый это косяк или нет, но если компилятору написано unsigned - он не должен фантазировать, равно как и если написано signed. если же компилятор чего-то по-своему умничает - это непорядок.
стандарт с определенного момента разошелся во взглядах на char и сейчас разные компиляторы ориентируются на разные стандарты - некоторые считают char аналогом unsigned char (т.е. без знака по умолчанию), другие - signed char (т.е. по умолчанию со знаком), и это повсеместно. но чтобы явно написанное signed char или unsigned char как-то иначе понимать - этого стандарт не допускает никакой!
стандарт с определенного момента разошелся во взглядах на char и сейчас разные компиляторы ориентируются на разные стандарты - некоторые считают char аналогом unsigned char (т.е. без знака по умолчанию), другие - signed char (т.е. по умолчанию со знаком), и это повсеместно. но чтобы явно написанное signed char или unsigned char как-то иначе понимать - этого стандарт не допускает никакой!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- tych
- Э...
- Сообщения: 2792
- Зарегистрирован: Ср апр 04, 2007 08:39:14
- Откуда: Москва
- Контактная информация:
А что содержит переменная объявленая но которой не присвоено значение ?Telek писал(а):т.е. когда явно идет сравнение двух signed char, то все равно болт...Код: Выделить всё
signed char zero; signed char menu_V_position; zero=0; menu_V_position-- ; if (menu_V_position<zero) menu_V_position=2;
Это zero=0; вы сделали.
А вторую переменную обнулить пробовали ?
Последний раз редактировалось tych Пн сен 22, 2008 22:08:40, всего редактировалось 1 раз.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18547
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
по умолчанию все переменные обнуляться должны автоматически при инициализации программы, если нет принудительной инициализации.tych писал(а):Это zero=0; вы сделали. А вторую переменную обнулить ?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Реклама
- tych
- Э...
- Сообщения: 2792
- Зарегистрирован: Ср апр 04, 2007 08:39:14
- Откуда: Москва
- Контактная информация:
Дивная бредятина ! Там может быть что угодно.ARV писал(а):по умолчанию все переменные обнуляться должны автоматически при инициализации программы, если нет принудительной инициализации.tych писал(а):Это zero=0; вы сделали. А вторую переменную обнулить ?
Советую перечитать "Керниган, Ритчи - Язык программирования Си" - http://pid.by.ru/05.htm
Потому в курсе я и советую при объявлении переменных присваивать им значения явно, если важно быть увереным что там лежит.
В компиляторах IAR, ICC, CVAVR, KEIL, PICC18, PICC30 в свойствах проекта указывается чем считать char по-умолчанию. Изначатьно это беззнаковая обычно величина.
Наверняка и в WinAVR есть такая настройка - начальное ее значение мне не известно.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Это я привел условно. чтобы показать, что я тоже сравниваю с нулем.tych писал(а):А что содержит переменная объявленая но которой не присвоено значение ?Telek писал(а):т.е. когда явно идет сравнение двух signed char, то все равно болт...Код: Выделить всё
signed char zero; signed char menu_V_position; zero=0; menu_V_position-- ; if (menu_V_position<zero) menu_V_position=2;
Это 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
- Откуда: Челябинск
А вот эту галочку пытались снимать?
- Вложения
-
- Config.JPG
- Настройки проекта CVAVR
- (54.01 КБ) 397 скачиваний
- tych
- Э...
- Сообщения: 2792
- Зарегистрирован: Ср апр 04, 2007 08:39:14
- Откуда: Москва
- Контактная информация:
"на лицо" былобы если бы вы проект приложили и с файлами симулятора.Telek писал(а): Т.е. на лицо
Скачайте нормальный CVAVR у меня на дом. страничке и будет вам счастье и удача.Telek писал(а): явное неприятие signed char в if'e
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Позже приложу. ...а на вашей домашней странице он чем нормальней, чем на сайте производителя или на казусе?tych писал(а):"на лицо" былобы если бы вы проект приложили и с файлами симулятора.Telek писал(а): Т.е. на лицоСкачайте нормальный CVAVR у меня на дом. страничке и будет вам счастье и удача.Telek писал(а): явное неприятие signed char в if'e
ЗЫ. Глюк проверен в 1.5.х и 2.0.х - работает.
- mr.Kirill
- Мучитель микросхем
- Сообщения: 438
- Зарегистрирован: Вт сен 25, 2007 19:40:26
- Откуда: Челябинск
Между прочим прошу обратить внимание на название закладки в приведенной картинке. Если настраиваете проект наполовину, то не кричите что глюки и прочее. Софтом пользоваться нужно научиться, а потом о глюках кричать.Telek писал(а):А смысл, если я явно указал тип переменных? чтобы потом глюки в сторонних библиотеках ловить?
Глюки сторонних библиотек? Если они по нормам написаны то никаких глюков не будет.
Проверяйте и отчет в студию. Иначе на кой ляд Вы вообще взялись за это?
ИМХО снимайте галку и везде явно объявляйте тип char'a
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18547
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
tych, в Си переменные инициализируются нулевым значением всегда, если не объявлено иное. это стандарт. есть отступления - разные там объявления классов памяти, секций, атрибутов и т.п. - но если просто объявлена переменная - она считается имеющей значение 0.
во-вторых, в WinAVR, конечно, есть переключатель типа char - но WinAVR всегда следует тому, что написано в программе: даже если этот самый переключатель включен на беззнаковый char, а в программе написано signed char - эта переменная будет знаковой. что, собственно говоря, и должно быть.
ваш совет указывать значения явно - безусловно следует признать правильным, т.к. это во-первых признак хорошего стиля программирования, во-вторых, гарантия от нестандартного поведения компиляторов... но совет не имеет отношения к поведению компилятора - он или соответствует какому-то стандарту, или нет... (увы, стандартов Си развелось великое множество, и порой, они отличаются друг от друга на столько, что впору говорить о противоречиях)...
во-вторых, в WinAVR, конечно, есть переключатель типа char - но WinAVR всегда следует тому, что написано в программе: даже если этот самый переключатель включен на беззнаковый char, а в программе написано signed char - эта переменная будет знаковой. что, собственно говоря, и должно быть.
ваш совет указывать значения явно - безусловно следует признать правильным, т.к. это во-первых признак хорошего стиля программирования, во-вторых, гарантия от нестандартного поведения компиляторов... но совет не имеет отношения к поведению компилятора - он или соответствует какому-то стандарту, или нет... (увы, стандартов Си развелось великое множество, и порой, они отличаются друг от друга на столько, что впору говорить о противоречиях)...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Эта галка стоит по умолчанию. Настройки по умолчанию я не трогаю. Эта галка говорит как воспринимать тип чар, если явно не указана знаковость. Я явно указываю знаковоть.(как вообще эта галка может влиять на явно указанный тип? кроме как переделать явно неуказанные чары? переделка всех чаров, в которых не указана знаковость мне не нужна, т.к. наличие этой галки подразумевает что вместо unsigned char я могу написать просто char) Что в моих действиях не логично?mr.Kirill писал(а):Между прочим прошу обратить внимание на название закладки в приведенной картинке. Если настраиваете проект наполовину, то не кричите что глюки и прочее. Софтом пользоваться нужно научиться, а потом о глюках кричать.Telek писал(а):А смысл, если я явно указал тип переменных? чтобы потом глюки в сторонних библиотеках ловить?
Глюки сторонних библиотек? Если они по нормам написаны то никаких глюков не будет.
Проверяйте и отчет в студию. Иначе на кой ляд Вы вообще взялись за это?
ИМХО снимайте галку и везде явно объявляйте тип char'a
- tych
- Э...
- Сообщения: 2792
- Зарегистрирован: Ср апр 04, 2007 08:39:14
- Откуда: Москва
- Контактная информация:
Который вы придумали ?ARV писал(а): это стандарт.
да считать то можно что угодно.ARV писал(а): она считается имеющей значение 0
Так же и в компиляторах которые я перечислил выше. в CVAVR раздел справки "Data Types"ARV писал(а): WinAVR всегда следует тому, что написано в программе: даже если этот самый переключатель включен на беззнаковый char, а в программе написано signed char - эта переменная будет знаковой. что, собственно говоря, и должно быть.
Код: Выделить всё
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
- Откуда: Москва
- Контактная информация:
Наверно к новому году и проект выложите ! Да ? Т.е. в январе 2009 разговор станет наконец предметным.Telek писал(а): Я явно указываю знаковоть.
А тож ! Курс таки ... для ньюби.ARV писал(а):tych, ваш совет указывать значения явно - безусловно следует признать правильным.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18547
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
tych, не я придумал Си, и тем более его стандарты - я всего лишь им следую в своих рассуждениях (и в программах). это во-первых.
а во-вторых - если все так хорошо, как вы говорите - почему у товарища траблы с тем, что объявленная signed char переменная не анализируется на значение меньше нуля? согласен, причины могут быть и не в типе - но я сужу лишь по тому, что сказано на форуме.
в-третьих, "считается" - означает буквально "следует быть уверенным, что", а не "извечь" - из действительно непроинициализированной переменной можно извлечь (считать) все что угодно - тут вы правы. однако, не пытайтесь прикинуться дубом - вам не идет... вы прекрасно поняли, что я имел ввиду
в-четвертых, термин "Курс", который вы сами для своего творения придумали, еще не означает вообще принципиально его "академичность"... мало ли что обзовут "курсом" или "учебником"... а мнение специалистов (судя по разным форумам) об этом произведении пока что далеко от восхищения... и то, что в нем содержатся некие истины - положения не меняет. т.е. скорее наличие истин положительно характеризует содержание, но никак не название...
а во-вторых - если все так хорошо, как вы говорите - почему у товарища траблы с тем, что объявленная signed char переменная не анализируется на значение меньше нуля? согласен, причины могут быть и не в типе - но я сужу лишь по тому, что сказано на форуме.
в-третьих, "считается" - означает буквально "следует быть уверенным, что", а не "извечь" - из действительно непроинициализированной переменной можно извлечь (считать) все что угодно - тут вы правы. однако, не пытайтесь прикинуться дубом - вам не идет... вы прекрасно поняли, что я имел ввиду
в-четвертых, термин "Курс", который вы сами для своего творения придумали, еще не означает вообще принципиально его "академичность"... мало ли что обзовут "курсом" или "учебником"... а мнение специалистов (судя по разным форумам) об этом произведении пока что далеко от восхищения... и то, что в нем содержатся некие истины - положения не меняет. т.е. скорее наличие истин положительно характеризует содержание, но никак не название...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- tych
- Э...
- Сообщения: 2792
- Зарегистрирован: Ср апр 04, 2007 08:39:14
- Откуда: Москва
- Контактная информация:
Я догадался ! и потому привел вам ссылку на книгу основоположников где написано что "мусор может быть в переменной которой не присвоено значение"ARV писал(а):tych, не я придумал Си
Дак вы покажите этот стандарт ! Чтоб и другие могли ему следлвать. Покажите стандарт где написано что нули будут в переменных которым значение не присвоено.ARV писал(а):и тем более его стандарты - я всего лишь им следую
Вы про МИФИЧЕСКИЙ стандарт Си уже в нескольких ветках написали ... УВИДЕТЬ бы его ! Приобщиться ...
Я Ж НЕ ЭКСТРАСЕНС !!! Вот жду когда товаришь приложит архив с проектом и с прошивкой !ARV писал(а): почему у товарища траблы с тем, что объявленная signed char переменная не анализируется на значение меньше нуля?
Вы меня еще в образе ШЛАНГА не видели !ARV писал(а): не пытайтесь прикинуться дубом - вам не идет...
Слава богу что СПЕЦИАЛИСТЫ и НА РАЗНЫХ форумах имеют мнение о нём.ARV писал(а): а мнение специалистов (судя по разным форумам) об этом произведении пока что далеко от восхищения...
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18547
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
видимо, лишь потому и жив пока...tych писал(а):Вы меня еще в образе ШЛАНГА не видели !![]()
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18547
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
tych, я не поленился - скачал рекомендованную вами кигу "основоположников" - и что я вижу?!
да вы сами ее не читали, похоже!
итак, в разделе 4.9 читаем следующее:
по-моему, это явно говорит о том, что при объявлении переменной она автоматически получает значение НОЛЬ - это сказал уже не я, а "отцы" Ритчи с Керниганом, которым вы доверяете по-видимому... всю книгу, само-собой, я не читал, но не думаю, что где-то будет написано опровержение этого... а на счет автоматических и т.п. переменных - я уже говорил, они не инициализируются нулями, само собой...
P.S. если можно, слова БРЕД и т.п. резкие выражения не используйте, если на 100% в них не уверены... а в мой адрес - вообще не используйте, надеюсь на ваш культурный уровень.
P.P.S. а мнение о вашем творении не имеет, наверное, лишь не подключенный к интернету
да вы сами ее не читали, похоже!
итак, в разделе 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 раз.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!


