В том и дело, что этот "товарищ" только говорит что траблы. Пусть выкладывает проект, тем самым подкрепляет свои слова. А то Вы тут почти глотки друг другу рвете, а толку то?ARV писал(а):а во-вторых - если все так хорошо, как вы говорите - почему у товарища траблы с тем, что объявленная signed char переменная не анализируется на значение меньше нуля? согласен, причины могут быть и не в типе - но я сужу лишь по тому, что сказано на форуме.
CodeVision AVR в вопросах и ответах
- Реклама
какие глотки?! ведется цивилизованная корректная дискуссияmr.Kirill писал(а):А то Вы тут почти глотки друг другу рвете, а толку то?
это была шутка, чтобы tych не прицепился к словам
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Я думал, что написать три сроки для проверки проще чем качать файло.mr.Kirill писал(а): В том и дело, что этот "товарищ" только говорит что траблы. Пусть выкладывает проект, тем самым подкрепляет свои слова. А то Вы тут почти глотки друг другу рвете, а толку то?
Прикладываю, по просьбе "товарища".
- Вложения
-
- signed_char.rar
- проект+исходники
- (76.78 КБ) 324 скачивания
У меня отрицательные числа получаются при компиляции и в cvavr 1.25.9 pro и в cvavr 2.03.2
Proteus 7.4 выводит и текст (я добавил в прогу) и цифры, а 7.2sp6 только цифры ! В VMLAB не проверял.
Proteus 7.4 выводит и текст (я добавил в прогу) и цифры, а 7.2sp6 только цифры ! В VMLAB не проверял.
- Вложения
-
- cvavr test.rar
- (70.42 КБ) 328 скачиваний
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Надеюсь товарищи практики пример глянули, галочки тоже потыкали и выводы сделали.
Для тех кто верит на слово. От галочек результат не меняется да и меняться не должен. Получается, что в данном случае в сравнении signed char выступает как unsigned char.
В этом коде, если раскомментировать ифы при значении "с" меньше нуля сработает только третий(соответственно при с=-1).
Поэтому, получается что нормально использовать сравнение отрицательных чисел не получается. Как вариант выхода из ситуации - юзать переменные типа int в ущерб памяти.
Если необходимо сравнить с нулем( меньше нуля), как в моем случае, то можно написать например так: if (c<-1) c=2; или if (c<-22) c=2;
или любое число меньше 0... результат будет верный(сравнение будет как с нулем), но выглядеть будет дико.
ЗЫ. Данный глюк одинаков в 1.5.х и 2.0.х. Что это, баг или фича производителя - х.з. Возможно это одно из проявлений указанного тут красным шрифтом http://www.hpinfotech.ro/html/download.htm
Для тех кто верит на слово. От галочек результат не меняется да и меняться не должен. Получается, что в данном случае в сравнении signed char выступает как unsigned char.
Код: Выделить всё
signed char c;
signed char z;
c=2;
z=0;
while (1)
{
c--;
if (c<0) c=2;
//if (c<z) c=2;
//if (c==-1) c=2;
printf("c=%i\n\r",c);
delay_ms(500);
};Поэтому, получается что нормально использовать сравнение отрицательных чисел не получается. Как вариант выхода из ситуации - юзать переменные типа int в ущерб памяти.
Если необходимо сравнить с нулем( меньше нуля), как в моем случае, то можно написать например так: if (c<-1) c=2; или if (c<-22) c=2;
ЗЫ. Данный глюк одинаков в 1.5.х и 2.0.х. Что это, баг или фича производителя - х.з. Возможно это одно из проявлений указанного тут красным шрифтом http://www.hpinfotech.ro/html/download.htm
- Реклама
т.е. считаем что глюк Протеуса 7.2? у меня SP2tych писал(а):У меня отрицательные числа получаются при компиляции и в cvavr 1.25.9 pro и в cvavr 2.03.2
Proteus 7.4 выводит и текст (я добавил в прогу) и цифры, а 7.2sp6 только цифры ! В VMLAB не проверял.
картинко, это твой пример в 7.2sp2... т.е. как бы без изменений - глюк есть.
- Вложения
-
- gluk.jpg
- глюк
- (5.3 КБ) 577 скачиваний
о как!!!Telek писал(а):Возможно это одно из проявлений указанного тут красным шрифтом http://www.hpinfotech.ro/html/download.htm
ну что вам стоит пользоваться законно бесплатным софтом? который не только правильно работает, но и позволяет не чувствовать себя вором?!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
в Proteus 7.4 сравнение с нулем работает
а в 7.2 sp6 НЕТ
а в 7.2 sp6 НЕТ
- Вложения
-
- cvavr test 2 .rar
- (21.64 КБ) 304 скачивания
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Судя по последним сообщениям, получается глюк Протеуса...ARV писал(а):о как!!!Telek писал(а):Возможно это одно из проявлений указанного тут красным шрифтом http://www.hpinfotech.ro/html/download.htm
ну что вам стоит пользоваться законно бесплатным софтом? который не только правильно работает, но и позволяет не чувствовать себя вором?!
а протеус у вас легально купленный?!?! 
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
а есть бесплатная/разумно стоящая для частного юзера замена?ARV писал(а):а протеус у вас легально купленный?!?!
Последний раз редактировалось Telek Вт сен 23, 2008 22:33:56, всего редактировалось 1 раз.
да, называется макетная плата
и пользы на порядок больше!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 3604
- Зарегистрирован: Пн июл 28, 2008 22:12:01
VMLAB бесплатный и 4 Мб всего. В моей домашней страничке позырь.Telek писал(а):а есть бесплатная/разумно стоящая для частного юзера замена?ARV писал(а):а протеус у вас легально купленный?!?!
Но PROTEUS - ИМХО великолепен !
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
на Си работаю недавно - со 100% гарантией про компиляторы не скажу, но сомнения в справедливости только что вами сказанного есть. WinAVR мусор не создает, инициализирует все, как положено, нулями - можете посмотреть. Другие современные языки программирования тоже инициализируют нулями все: Delphi (кроме типа real), Java...dosikus писал(а):Увы компиляторы про это не знают .ARV писал(а):tych, в Си переменные инициализируются нулевым значением всегда, если не объявлено иное. это стандарт...
Не веришь? Посмотри асм после компиляции что у пиков что у авр что на компе...
Если при обьявление не было иницилизации , то в ячейках мусор.
Я думаю, что если "компилятор об этом не знает", то это либо плохой компилятор, либо (что скорее всего), чего-то не знаете вы и принимаете за проблему корректное поведение.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Хоть кол на голове теши ...
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
А какой создает ? Вы думаете в компилятор встроена функция создания мусора ?ARV писал(а): WinAVR мусор не создает
Компиялтор отводит память под переменную, и если ей не присвоено значение то в это место он ни чего не записывает - поэтому в этих ячейках памяти лежит то что лежало.
Он может еще и пирожки выпекать параллельно - но к Си то это какое отношение имеет ?ARV писал(а): WinAVR инициализирует все, как положено, нулями - можете посмотреть.
Где ? Че проект не цепляется ? Или вы не знаете как его к посту прицепить ?ARV писал(а): можете посмотреть.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Скачал и поставил WinAVR, сделал проектик - по АСМ листингу переменные размещены по адресам 62h 63h 60h - но в листинге я не вижу (я не спец по АСМу) где эти адреса обнуляются как грозился ARV. Я не утверждаю что там нет обнуления, просто прошу более опытных товарищей указать где оно.
Кстати в листинге путаница - в начале МЭЙН написан АСМ код, а потом строчка на Си которую онвыполнил, дальше уже все в обычном порядке - вначале Си а затем реализующий это АСМ.
Кстати в листинге путаница - в начале МЭЙН написан АСМ код, а потом строчка на Си которую онвыполнил, дальше уже все в обычном порядке - вначале Си а затем реализующий это АСМ.
Код: Выделить всё
void main(void) {
5e: 83 e0 ldi r24, 0x03 ; 3
60: 80 93 62 00 sts 0x0062, r24
aba = 3;
top = 5;
64: 85 e0 ldi r24, 0x05 ; 5
66: 80 93 63 00 sts 0x0063, r24- Вложения
-
- TEST WinAVR avr123.nm.ru.rar
- (46.76 КБ) 272 скачивания
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
с листингом у WinAVR давние траблы - после прохода оптимизатора нарушается разделение на операторы - ассемблерный код получается более компактным и уже не делится на отдельные сишные операторы - поэтому в листинге выводится порой бог знает что... сейчас еще хорошо - в предыдущих версиях вы бы видели, что там выводилось...
если отключить оптимизацию - то листинг немного красивеее, но все равно далек от идеала... вы еще поглядите на листинг цикла какого-нибудь
там вообще сразу не поймешь, откуда что начинается и где заканчивается 
что касается инициализации - она происходит до входа в функцию main() - на этапе инициализации. если интересно - могу подробно рассказать (я это дело изучил весьма основательно), но гораздо проще запустить отладчик в AVR Studio и посмотреть в Watch - все переменные будут обнулены, если явно не проинициализированы.
tych, неужели вы и в самом деле думаете, что исполнение программы, написанной на Си начинается именно с main()?! а где тогда по-вашему стек устанавливается, вы же в main() не пишите инициализацию SP... выходит, есть еще какой-то код, предваряющий main() - вот там и происходит инициализация переменных, в том числе и обнуление по умолчанию. кстати, а присваивание проинициализированным переменным их значений вы нашли в своем листинге?
что касается инициализации - она происходит до входа в функцию main() - на этапе инициализации. если интересно - могу подробно рассказать (я это дело изучил весьма основательно), но гораздо проще запустить отладчик в AVR Studio и посмотреть в Watch - все переменные будут обнулены, если явно не проинициализированы.
tych, неужели вы и в самом деле думаете, что исполнение программы, написанной на Си начинается именно с main()?! а где тогда по-вашему стек устанавливается, вы же в main() не пишите инициализацию SP... выходит, есть еще какой-то код, предваряющий main() - вот там и происходит инициализация переменных, в том числе и обнуление по умолчанию. кстати, а присваивание проинициализированным переменным их значений вы нашли в своем листинге?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Я и прошу от вас этого - показать асм код (в том листинге или (прошивке дизасм) что сделал WinAVR) который вписывает нули в адреса переменных.ARV писал(а): что касается инициализации - она происходит до входа в функцию main() - на этапе инициализации. если интересно - могу подробно рассказать (я это дело изучил весьма основательно)
Ваааааааааааще ОТЖИХХХХХ ! Корки отмачиваете не шуточные ! Откудаж в СИМУЛЯТОРЕ возьметься мусор в ячейках памяти ? Симулятор РОДИТ его чтоль ?ARV писал(а): но гораздо проще запустить отладчик в AVR Studio и посмотреть в Watch - все переменные будут обнулены, если явно не проинициализированы.
Вы полагаете что если код написать на CVAVR то в студии не будет нулей в переменных ? В листинге CVAVR есть специальный макрос очищающий всю оперативн память - не знаю задействует ли он его в каждой проге или нет.
В реальном процессоре "мусор" в ячейках памяти может остаться после ресета - не ужели НЕ ЯСНО ?
Если в симуляторе есть фича сохранять содержимое памяти при РЕСЕТЕ - то мусор КОНЕЧНО будет если до РЕСЕТа в эти ячейки вписать что-то не нулевое и если нет ЯВНОГО АСМ кода очищающего эти ячейки при старте программы.
Так оно и есть на самом деле - программа на Си начинает выполняться с мэйн обычно.ARV писал(а): tych, неужели вы и в самом деле думаете, что исполнение программы, написанной на Си начинается именно с main()?!
Там где компилятор "ЗАТОЧЕНЫЙ" ПОД АРХИТЕКТУРУ процессора накомпилит - видно в ЛИСТИНГЕ ЯВНО !ARV писал(а): а где тогда по-вашему стек устанавливается, вы же в main() не пишите инициализацию SP...
Как вы догадались ? Наверно в листинге .lss - кторый я приложил выше - увидели ?ARV писал(а): выходит, есть еще какой-то код, предваряющий main()
ПОКАЖИТЕ ГДЕ ???? Я ж выложил вам АСМ код в архиве и написал что я не спец по АСМ-у и попросил вам показать где нули вписываются !ARV писал(а): вот там и происходит инициализация переменных, в том числе и обнуление по умолчанию.)
Естественно НЕТ ! Опять дурачком прикидываетесь ???ARV писал(а): а присваивание проинициализированным переменным их значений вы нашли в своем листинге?
WinAVR имдиЁт чтоль ? Он чтоль не видит что переменная не считвается в коде до записи в нее, нафигаж он будет писать в нее то что не требуется - ОПТИМИЗАЦИЯ то включена !
Вот если в проге добавить чтение из этой переменной, до записи в нее нового значения, то компилер ВЫНУЖДЕН будет вписать (запомнить) присвоеное ей при инициализации значение. Хотя если оптимизацию не выключить он может и схитрить - сразу вычислить значение результата в первое месте где в проге она появится.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru


