CodeVision AVR в вопросах и ответах
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
используйте компилятор, который соблюдает требования стандарта Си, и проблемы исчезнут: signed будет знаковым, unsigned - беззнаковым...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 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 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
- Откуда: Новочеркасск
- Контактная информация:
по умолчанию все переменные обнуляться должны автоматически при инициализации программы, если нет принудительной инициализации.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 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
- Откуда: Челябинск
А вот эту галочку пытались снимать?
- Вложения
-
- Config.JPG
- Настройки проекта CVAVR
- (54.01 КБ) 396 скачиваний
- tych
- Э...
- Сообщения: 2792
- Зарегистрирован: Ср апр 04, 2007 08:39:14
- Откуда: Москва
- Контактная информация:
Telek писал(а): Т.е. на лицо
"на лицо" былобы если бы вы проект приложили и с файлами симулятора.
Telek писал(а): явное неприятие signed char в if'e
Скачайте нормальный CVAVR у меня на дом. страничке и будет вам счастье и удача.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
tych писал(а):Telek писал(а): Т.е. на лицо
"на лицо" былобы если бы вы проект приложили и с файлами симулятора.Telek писал(а): явное неприятие signed char в if'e
Скачайте нормальный CVAVR у меня на дом. страничке и будет вам счастье и удача.
Позже приложу. ...а на вашей домашней странице он чем нормальней, чем на сайте производителя или на казусе?
ЗЫ. Глюк проверен в 1.5.х и 2.0.х - работает.
- mr.Kirill
- Мучитель микросхем
- Сообщения: 438
- Зарегистрирован: Вт сен 25, 2007 19:40:26
- Откуда: Челябинск
Telek писал(а):А смысл, если я явно указал тип переменных? чтобы потом глюки в сторонних библиотеках ловить?
Между прочим прошу обратить внимание на название закладки в приведенной картинке. Если настраиваете проект наполовину, то не кричите что глюки и прочее. Софтом пользоваться нужно научиться, а потом о глюках кричать.
Глюки сторонних библиотек? Если они по нормам написаны то никаких глюков не будет.
Проверяйте и отчет в студию. Иначе на кой ляд Вы вообще взялись за это?
ИМХО снимайте галку и везде явно объявляйте тип char'a
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
tych, в Си переменные инициализируются нулевым значением всегда, если не объявлено иное. это стандарт. есть отступления - разные там объявления классов памяти, секций, атрибутов и т.п. - но если просто объявлена переменная - она считается имеющей значение 0.
во-вторых, в WinAVR, конечно, есть переключатель типа char - но WinAVR всегда следует тому, что написано в программе: даже если этот самый переключатель включен на беззнаковый char, а в программе написано signed char - эта переменная будет знаковой. что, собственно говоря, и должно быть.
ваш совет указывать значения явно - безусловно следует признать правильным, т.к. это во-первых признак хорошего стиля программирования, во-вторых, гарантия от нестандартного поведения компиляторов... но совет не имеет отношения к поведению компилятора - он или соответствует какому-то стандарту, или нет... (увы, стандартов Си развелось великое множество, и порой, они отличаются друг от друга на столько, что впору говорить о противоречиях)...
во-вторых, в WinAVR, конечно, есть переключатель типа char - но WinAVR всегда следует тому, что написано в программе: даже если этот самый переключатель включен на беззнаковый char, а в программе написано signed char - эта переменная будет знаковой. что, собственно говоря, и должно быть.
ваш совет указывать значения явно - безусловно следует признать правильным, т.к. это во-первых признак хорошего стиля программирования, во-вторых, гарантия от нестандартного поведения компиляторов... но совет не имеет отношения к поведению компилятора - он или соответствует какому-то стандарту, или нет... (увы, стандартов Си развелось великое множество, и порой, они отличаются друг от друга на столько, что впору говорить о противоречиях)...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
mr.Kirill писал(а):Telek писал(а):А смысл, если я явно указал тип переменных? чтобы потом глюки в сторонних библиотеках ловить?
Между прочим прошу обратить внимание на название закладки в приведенной картинке. Если настраиваете проект наполовину, то не кричите что глюки и прочее. Софтом пользоваться нужно научиться, а потом о глюках кричать.
Глюки сторонних библиотек? Если они по нормам написаны то никаких глюков не будет.
Проверяйте и отчет в студию. Иначе на кой ляд Вы вообще взялись за это?
ИМХО снимайте галку и везде явно объявляйте тип char'a
Эта галка стоит по умолчанию. Настройки по умолчанию я не трогаю. Эта галка говорит как воспринимать тип чар, если явно не указана знаковость. Я явно указываю знаковоть.(как вообще эта галка может влиять на явно указанный тип? кроме как переделать явно неуказанные чары? переделка всех чаров, в которых не указана знаковость мне не нужна, т.к. наличие этой галки подразумевает что вместо unsigned char я могу написать просто char) Что в моих действиях не логично?
- tych
- Э...
- Сообщения: 2792
- Зарегистрирован: Ср апр 04, 2007 08:39:14
- Откуда: Москва
- Контактная информация:
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
- Откуда: Москва
- Контактная информация:
Telek писал(а): Я явно указываю знаковоть.
Наверно к новому году и проект выложите ! Да ? Т.е. в январе 2009 разговор станет наконец предметным.
ARV писал(а):tych, ваш совет указывать значения явно - безусловно следует признать правильным.
А тож ! Курс таки ... для ньюби.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 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
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
видимо, лишь потому и жив пока...tych писал(а):Вы меня еще в образе ШЛАНГА не видели !![]()
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 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 раз.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!