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

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

Сообщение ARV »

tych, вы меня огорчаете... много эмоций, но мало восприятия сказанного мною.
я разбираюсь в ассемблере, но вы думаете, это мне прибавляет энтузиазма для ковыряния в листинге из-под WinAVR? однако, вы меня вынудили это сделать...

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

00000048 <__do_clear_bss>:
  48:   10 e0          ldi   r17, 0x00   ; 0
  4a:   a2 e6          ldi   r26, 0x62   ; 98
  4c:   b0 e0          ldi   r27, 0x00   ; 0
  4e:   01 c0          rjmp   .+2         ; 0x52 <do_clear_bss_start>

00000050 <do_clear_bss_loop>:
  50:   1d 92          st   X+, r1

00000052 <do_clear_bss_start>:
  52:   a4 36          cpi   r26, 0x64   ; 100
  54:   b1 07          cpc   r27, r17
  56:   e1 f7          brne   .-8         ; 0x50 <do_clear_bss_loop>
  58:   02 d0          rcall   .+4         ; 0x5e <main>
  5a:   0b c0          rjmp   .+22        ; 0x72 <_exit>

вот этот участок инициализирует нулями все переменные, которые объявлены, но им явно не указаны значения. даже по имени меток do_clear_bss_хххх вы можете догадаться, что речь идет об очистке памяти... .bss - это имя секции памяти WinAVR, отводимой для статических и глобальных переменных. Память тупо обнуляется, не взирая на размеры переменных.

теперь несколько слов в ответ на ваши эмоции.
Ваааааааааааще ОТЖИХХХХХ ! Корки отмачиваете не шуточные ! Откудаж в СИМУЛЯТОРЕ возьметься мусор в ячейках памяти ? Симулятор РОДИТ его чтоль ?
нет, его можно вручную намусорить в область ОЗУ - это не протеус, "виртуальная" память в студии доступна для редактирования. намусорьте туда сами - сколько хотите и куда хотите, потом проимитируйте сброс - и поглядите, что стало с переменными внутри main()...


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

Так оно и есть на самом деле - программа на Си начинает выполняться с мэйн обычно.
с точки зрения программиста - да, так и есть. но реально микроконтроллер выполняет еще немало предварительных действий, так называемый "пролог" или "инициализацию", и лишь потом вызывается main(). Если обраться к более крутым примерам - программам для Windows или даже DOS, то там объем предварительного кода (выполняемого до main()) может в разы превосходить код собственно main()!

WinAVR имдиЁт чтоль ? Он чтоль не видит что переменная не считвается в коде до записи в нее, нафигаж он будет писать в нее то что не требуется - ОПТИМИЗАЦИЯ то включена !
ну, во-первых, оптимизацию и выключить недолго, во-вторых, можно объявить переменную volatile - и тогда компилятор ее обязан будет проинициализировать... но и в первом, и во втором случае в листинге main() вы не увидите команд, делающих этого! все будет сделано до входа в главную функцию...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

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

Сообщение tych »

ARV писал(а):tych, вы меня огорчаете... вы меня вынудили это сделать...

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


Я этого ОБЪЯСНЕНИЯ и просил в верхнем посте ! Я ведь четко там (см наверх!) написал:

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

Я просто просил мне объяснить "где конкретно в асме" - форум для того и есть ведь !

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

Блин !!! Вы все УХОХАТЫВАЕТЕСЬ !!!???
Ну какой смысл это писать ПОСЛЕ того как вы наконец показали конкретный АСМ код очищающий всю память !!! при старте прграммы.

НО !!! Вы выше писали про обнуление ПЕРЕМЕННЫХ !!! а не просто всей памяти. Вот
ARV писал(а): там и происходит инициализация переменных, в том числе и обнуление по умолчанию.


т.е. обнуление это ни как ни связано с переменными с их размещением и со стандартом Си - это просто забота о нас со стороны компилятора.

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


Я и не требовал НИГДЕ ее нахождения в МЭЙН ! Че ей там делать если даже на Си она до мэйн появилась.

Кусок кодя я привел С ПОЯСНЕНИЕМ - что удивлен путаницей не большой в листинге WinAVR, котрой в CVAVR я не встречал.
Последний раз редактировалось tych Ср сен 24, 2008 19:22:29, всего редактировалось 1 раз.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

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

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

Сообщение tych »

ARV писал(а):я даже теперь опасаюсь...
если мое объяснение вас удовлетворило - значит ли это, что я "более опытный"?!

Ну естетсвенно вы более опытный, вы ж делаете всякие разработки, устройства - а я больше теоретизирую, симулирую, помогать пытаюсь словом. И в АСМ листинги я только изредка заглядываю.

И в заголовке домашней странички у меня
КРУПНО-красно написано: "... от ЧАЙНИКА".

ARV писал(а): и тем более, "товарищ" ли я?! :)))

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

Сообщение Telek »

tych писал(а):Скачал и поставил WinAVR, сделал проектик - по АСМ листингу переменные размещены по адресам 62h 63h 60h - но в листинге я не вижу (я не спец по АСМу) где эти адреса обнуляются как грозился ARV. Я не утверждаю что там нет обнуления, просто прошу более опытных товарищей указать где оно.


там нет ни обнуления ни выставления -4

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

char aba, top, mikki = - 4;

void main(void) {

aba = 3;
top = 5;
mikki = 7;


этот пример не особо показательный. Точнее совсем не показательный. По ассемблеру видно, что там даже нет начальной инициализации переменных в -4.
Этот пример показывает, что оптимизатор работает хорошо, ибо начальная инициализация в -4 не нужна, т.к. следом(без совершения других операций над переменными) происходит повторная инициализация значениями 3 5 7...

Для проверки производится ли инициализация необходим пример типа:

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

char x,y,z;

x=y-3;

if (z==5) z++;

т.е. нужно выполнить какиенить действия без начального присвоения значений. Кстати, если компилятор с оптимизатором знают про необходимость начальной инициализации нулем, они могли бы заменить код x=y-3; на x=-3; что тоже будет подтверждением что про ноль знают... а if (z==5) z++; вообще пропустить, если с z больше никаких действий не производится...

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

Сообщение ARV »

tych писал(а):Вы полагаете что я гусь ? :lol:
гм... поговорка "гусь свинье не товарищ"... ежели вы гусь, то я, по-вашему, свинья?! :shock:

Telek, странно то, что оптимизатор вообще что-то оставил - программа, которая ничего никуда не выводит, не работает с периферийными устройствами и volatile-переменными - с точки зрения оптимизатора абсолютно бессмысленная! в моих тестах такая функция main() компилировалась в следующий код:
:)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

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

Сообщение tych »

ARV писал(а): ежели вы гусь, то я

я там смайлик поставил.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Lepehin Evgeniy
Открыл глаза
Сообщения: 72
Зарегистрирован: Вс сен 07, 2008 13:17:31
Откуда: Город Невест

Сообщение Lepehin Evgeniy »

tych, если Вы хотите что-то узнать, то(я по крайней мере так стараюсь делать), надо искать книги, материалы в сети, помогающие прояснить вопрос. Почитать про секции WinAVR, про startup код. Самому. И внимательно слушать и анализировать услышанное. А "наезжать" на человека, который пытается Вам объяснить то, что Вы спросили в Вашей форме изложения некрасиво. В многих системах симулирования, компиляторах и, особенно при их взаимодействии присутствуют разнообразные глюки. Как справедливо заметил ARV после установки оптимизации СИ кода возникает абракадабра. И не только в листинге. В протеусе и Codevision и WinAVR дают в этом случае не "удободебугируемый" код.
Нужно учитывать и неразбериху с отладочными форматами, например. Иногда лучше отлаживать не ELF, а EXTCOFF. С версиями компиляторов, в которых "убраны старые ошибки и добавлены новые" и отладчиках. Надо знать сильные и слабые стороны своего инструментария. И не надо кипятиться. Удачи и терпения!
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

tych писал(а):
ARV писал(а): ежели вы гусь, то я

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

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

Сообщение tych »

Lepehin Evgeniy писал(а):tych, Удачи и терпения!

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

Сообщение ARV »

self-censored
Последний раз редактировалось ARV Ср сен 24, 2008 20:53:37, всего редактировалось 1 раз.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

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

Сообщение tych »

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

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

Сообщение ARV »

self-censored
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
KIP
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Ср июл 09, 2008 11:48:16
Откуда: Обнинск

Сообщение KIP »

В программе не получается прогнать байт по битам от младшего к старшему.
Для понимания проблеммы прокомпилировал этот кусок отдельно:

#include <m8_128>

bit a;
unsigned char b;
unsigned char i;


void main (void){
b = b_1010_1010;

for(i=8;i>0;i--)
{
a = b;

b>>=1;
};

}

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

Сообщение tych »

блин .... ну архив то с проектом ПРИЛОЖИ !
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
KIP
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Ср июл 09, 2008 11:48:16
Откуда: Обнинск

Сообщение KIP »

Файлы проекта-выдача на 5 ножке порта В сигналов соответствующих содержимому переменной b от младшего к старшему.
Вложения
ТЕСТ.rar
(17.73 КБ) 270 скачиваний
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

a = b; - здесь b воспринималось как то что должен хранить ФЛАГ - "истино" - не ноль или "ложно" - ноль.

И пока не b была нулем она (целиком) считалась истиной.

я вместо 8 написал 11 и когда b обнулялось на PB5 выводился 0.

Изображение

После замены строчки на:

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

a = b & 1; // записать в а  бит0 из b 


Прога заработала чудесно !

Изображение

Файлы в прицепе !
Вложения
proga_cv_vmlab.rar
(39.9 КБ) 255 скачиваний
Последний раз редактировалось tych Сб сен 27, 2008 11:49:23, всего редактировалось 1 раз.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
KIP
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Ср июл 09, 2008 11:48:16
Откуда: Обнинск

Сообщение KIP »

Спасиба, всё понятно.

Значит в СИ битовой переменной нельзя присваивать значения переменных других типов? Я считал, что туда должен записаться младший бит.

Как пишут тут, правда в случае PIC, это именно так:
http://kazus.ru/faq/15/251.html
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

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

Сообщение tych »

CVAVR 2.03.4 без коклюша и ветрянки !

http://kazus.ru/forum/topic_11456-160.html
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Ответить

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