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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
mr.Kirill
Мучитель микросхем
Сообщения: 438
Зарегистрирован: Вт сен 25, 2007 19:40:26
Откуда: Челябинск

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

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

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

Сообщение ARV »

mr.Kirill писал(а):А то Вы тут почти глотки друг другу рвете, а толку то?
какие глотки?! ведется цивилизованная корректная дискуссия :) просто есть 2 мнения, одно у tych-a, а другое - неверное :)))
это была шутка, чтобы tych не прицепился к словам :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

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

Сообщение Telek »

mr.Kirill писал(а):В том и дело, что этот "товарищ" только говорит что траблы. Пусть выкладывает проект, тем самым подкрепляет свои слова. А то Вы тут почти глотки друг другу рвете, а толку то?

Я думал, что написать три сроки для проверки проще чем качать файло.
Прикладываю, по просьбе "товарища".
Вложения
signed_char.rar
проект+исходники
(76.78 КБ) 322 скачивания
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

У меня отрицательные числа получаются при компиляции и в cvavr 1.25.9 pro и в cvavr 2.03.2

Proteus 7.4 выводит и текст (я добавил в прогу) и цифры, а 7.2sp6 только цифры ! В VMLAB не проверял.
Вложения
cvavr test.rar
(70.42 КБ) 327 скачиваний
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Telek
Встал на лапы
Сообщения: 115
Зарегистрирован: Пт май 23, 2008 23:59:37
Откуда: Москва

Сообщение Telek »

Надеюсь товарищи практики пример глянули, галочки тоже потыкали и выводы сделали.

Для тех кто верит на слово. От галочек результат не меняется да и меняться не должен. Получается, что в данном случае в сравнении 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);
      };


В этом коде, если раскомментировать ифы при значении "с" меньше нуля сработает только третий(соответственно при с=-1).
Поэтому, получается что нормально использовать сравнение отрицательных чисел не получается. Как вариант выхода из ситуации - юзать переменные типа int в ущерб памяти.
Если необходимо сравнить с нулем( меньше нуля), как в моем случае, то можно написать например так: if (c<-1) c=2; или if (c<-22) c=2; :)) или любое число меньше 0... результат будет верный(сравнение будет как с нулем), но выглядеть будет дико.

ЗЫ. Данный глюк одинаков в 1.5.х и 2.0.х. Что это, баг или фича производителя - х.з. Возможно это одно из проявлений указанного тут красным шрифтом http://www.hpinfotech.ro/html/download.htm
Telek
Встал на лапы
Сообщения: 115
Зарегистрирован: Пт май 23, 2008 23:59:37
Откуда: Москва

Сообщение Telek »

tych писал(а):У меня отрицательные числа получаются при компиляции и в cvavr 1.25.9 pro и в cvavr 2.03.2

Proteus 7.4 выводит и текст (я добавил в прогу) и цифры, а 7.2sp6 только цифры ! В VMLAB не проверял.

т.е. считаем что глюк Протеуса 7.2? у меня SP2

картинко, это твой пример в 7.2sp2... т.е. как бы без изменений - глюк есть.
Вложения
gluk.jpg
глюк
(5.3 КБ) 575 скачиваний
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

Telek писал(а):Возможно это одно из проявлений указанного тут красным шрифтом http://www.hpinfotech.ro/html/download.htm
о как!!! :)))

ну что вам стоит пользоваться законно бесплатным софтом? который не только правильно работает, но и позволяет не чувствовать себя вором?!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

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

Сообщение tych »

в Proteus 7.4 сравнение с нулем работает
а в 7.2 sp6 НЕТ
Вложения
cvavr test 2 .rar
(21.64 КБ) 302 скачивания
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Telek
Встал на лапы
Сообщения: 115
Зарегистрирован: Пт май 23, 2008 23:59:37
Откуда: Москва

Сообщение Telek »

ARV писал(а):
Telek писал(а):Возможно это одно из проявлений указанного тут красным шрифтом http://www.hpinfotech.ro/html/download.htm
о как!!! :)))

ну что вам стоит пользоваться законно бесплатным софтом? который не только правильно работает, но и позволяет не чувствовать себя вором?!


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

Сообщение ARV »

а протеус у вас легально купленный?!?! :shock:
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

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

Сообщение Telek »

ARV писал(а):а протеус у вас легально купленный?!?! :shock:

а есть бесплатная/разумно стоящая для частного юзера замена?
Последний раз редактировалось Telek Вт сен 23, 2008 22:33:56, всего редактировалось 1 раз.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

да, называется макетная плата :) и пользы на порядок больше!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

ARV писал(а):tych, в Си переменные инициализируются нулевым значением всегда, если не объявлено иное. это стандарт...


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

Сообщение tych »

Telek писал(а):
ARV писал(а):а протеус у вас легально купленный?!?! :shock:

а есть бесплатная/разумно стоящая для частного юзера замена?

VMLAB бесплатный и 4 Мб всего. В моей домашней страничке позырь.

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

Сообщение ARV »

dosikus писал(а):
ARV писал(а):tych, в Си переменные инициализируются нулевым значением всегда, если не объявлено иное. это стандарт...


Увы компиляторы про это не знают .
Не веришь? Посмотри асм после компиляции что у пиков что у авр что на компе...
Если при обьявление не было иницилизации , то в ячейках мусор.
на Си работаю недавно - со 100% гарантией про компиляторы не скажу, но сомнения в справедливости только что вами сказанного есть. WinAVR мусор не создает, инициализирует все, как положено, нулями - можете посмотреть. Другие современные языки программирования тоже инициализируют нулями все: Delphi (кроме типа real), Java...

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

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

Сообщение tych »

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

Сообщение tych »

ARV писал(а): WinAVR мусор не создает

А какой создает ? Вы думаете в компилятор встроена функция создания мусора ?

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

ARV писал(а): WinAVR инициализирует все, как положено, нулями - можете посмотреть.


Он может еще и пирожки выпекать параллельно - но к Си то это какое отношение имеет ?

ARV писал(а): можете посмотреть.

Где ? Че проект не цепляется ? Или вы не знаете как его к посту прицепить ?
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

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

Сообщение ARV »

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

что касается инициализации - она происходит до входа в функцию main() - на этапе инициализации. если интересно - могу подробно рассказать (я это дело изучил весьма основательно), но гораздо проще запустить отладчик в AVR Studio и посмотреть в Watch - все переменные будут обнулены, если явно не проинициализированы.

tych, неужели вы и в самом деле думаете, что исполнение программы, написанной на Си начинается именно с main()?! а где тогда по-вашему стек устанавливается, вы же в main() не пишите инициализацию SP... выходит, есть еще какой-то код, предваряющий main() - вот там и происходит инициализация переменных, в том числе и обнуление по умолчанию. кстати, а присваивание проинициализированным переменным их значений вы нашли в своем листинге? ;)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

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

Сообщение tych »

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

Я и прошу от вас этого - показать асм код (в том листинге или (прошивке дизасм) что сделал WinAVR) который вписывает нули в адреса переменных.

ARV писал(а): но гораздо проще запустить отладчик в AVR Studio и посмотреть в Watch - все переменные будут обнулены, если явно не проинициализированы.

Ваааааааааааще ОТЖИХХХХХ ! Корки отмачиваете не шуточные ! Откудаж в СИМУЛЯТОРЕ возьметься мусор в ячейках памяти ? Симулятор РОДИТ его чтоль ?

Вы полагаете что если код написать на CVAVR то в студии не будет нулей в переменных ? В листинге CVAVR есть специальный макрос очищающий всю оперативн память - не знаю задействует ли он его в каждой проге или нет.

В реальном процессоре "мусор" в ячейках памяти может остаться после ресета - не ужели НЕ ЯСНО ?

Если в симуляторе есть фича сохранять содержимое памяти при РЕСЕТЕ - то мусор КОНЕЧНО будет если до РЕСЕТа в эти ячейки вписать что-то не нулевое и если нет ЯВНОГО АСМ кода очищающего эти ячейки при старте программы.

ARV писал(а): tych, неужели вы и в самом деле думаете, что исполнение программы, написанной на Си начинается именно с main()?!

Так оно и есть на самом деле - программа на Си начинает выполняться с мэйн обычно.

ARV писал(а): а где тогда по-вашему стек устанавливается, вы же в main() не пишите инициализацию SP...

Там где компилятор "ЗАТОЧЕНЫЙ" ПОД АРХИТЕКТУРУ процессора накомпилит - видно в ЛИСТИНГЕ ЯВНО !

ARV писал(а): выходит, есть еще какой-то код, предваряющий main()

Как вы догадались ? Наверно в листинге .lss - кторый я приложил выше - увидели ?

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

ПОКАЖИТЕ ГДЕ ???? Я ж выложил вам АСМ код в архиве и написал что я не спец по АСМ-у и попросил вам показать где нули вписываются !

ARV писал(а): а присваивание проинициализированным переменным их значений вы нашли в своем листинге? ;)

Естественно НЕТ ! Опять дурачком прикидываетесь ???
WinAVR имдиЁт чтоль ? Он чтоль не видит что переменная не считвается в коде до записи в нее, нафигаж он будет писать в нее то что не требуется - ОПТИМИЗАЦИЯ то включена !

Вот если в проге добавить чтение из этой переменной, до записи в нее нового значения, то компилер ВЫНУЖДЕН будет вписать (запомнить) присвоеное ей при инициализации значение. Хотя если оптимизацию не выключить он может и схитрить - сразу вычислить значение результата в первое месте где в проге она появится.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Ответить

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