WinAvr в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Avarges
Вымогатель припоя
Сообщения: 512
Зарегистрирован: Вт дек 22, 2009 02:24:50
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение Avarges »

Мастер Ломастер писал(а):мда... как все запущено.

ir - это переменная типа структура ir_t, а через точку пишутся ее поля при доступе к ним.

Любителям можно обходиться и без этого, "ООП понты" не более, для МК точно.
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Re: WinAvr в вопросах и ответах

Сообщение BerZerK-ku »

Avarges писал(а):Любителям можно обходиться и без этого, "ООП понты" не более, для МК точно.

Ошибаетесь на счет понтов. Почитайте рекомендации AVR035.
Аватара пользователя
Avarges
Вымогатель припоя
Сообщения: 512
Зарегистрирован: Вт дек 22, 2009 02:24:50
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение Avarges »

Если уж любителю на что-то напирать, то лучше уж на ассемблер. Вот он даёт на мк заметные преимущества. А структуры так себе 2 байта сэкономить, адресацию чуть подмазать, ерунда одним словом. Сравнил я конечно слона с мышью :)
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение Мастер Ломастер »

Avarges писал(а):Любителям можно обходиться и без этого, "ООП понты" не более, для МК точно.

Avarges писал(а):Если уж любителю на что-то напирать, то лучше уж на ассемблер. Вот он даёт на мк заметные преимущества. А структуры так себе 2 байта сэкономить, адресацию чуть подмазать, ерунда одним словом. Сравнил я конечно слона с мышью :)
обойтись можно без всего, в том числе и без МК. но если уж начинаешь использовать МК - неплохо научиться использовать его с легкостью, воспользовавшись возможностями, предоставляемыми языком Си. структуры не экономят абсолютно ни одного байта - это лишь способ УПОРЯДОЧИВАНИЯ ПЕРЕМЕННЫХ. а, как известно, порядок в программе - следствие порядка в голове. наводите порядок в программе, наводите его в голове - от этого только польза будет, и ни капли вреда. но можно жить и в беспорядке - кто спорит...
битва с дураками проиграна, победители торжествуют. слава победителям!
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Re: WinAvr в вопросах и ответах

Сообщение BerZerK-ku »

Мастер Ломастер писал(а):структуры не экономят абсолютно ни одного байта - это лишь способ УПОРЯДОЧИВАНИЯ ПЕРЕМЕННЫХ
Память данных нет, а вот сэкономить память программ поможет.
Avarges писал(а):Если уж любителю на что-то напирать, то лучше уж на ассемблер. Вот он даёт на мк заметные преимущества.
Мне даже интересно, вы в своей практике уже сталкивались с проблемой, когда задачу нельзя было реализовать на Си? или когда асм дал "заметное преимущество"?
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение Мастер Ломастер »

BerZerK-ku писал(а):
Мастер Ломастер писал(а):структуры не экономят абсолютно ни одного байта - это лишь способ УПОРЯДОЧИВАНИЯ ПЕРЕМЕННЫХ
Память данных нет, а вот сэкономить память программ поможет.
с моей точки зрения утверждение об экономии памяти программ - спорное, требующее определенных исследований. пока что я не замечал экономии, а в случае структур с битовыми полями следует ожидать скорее увеличения объема кода.
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
Avarges
Вымогатель припоя
Сообщения: 512
Зарегистрирован: Вт дек 22, 2009 02:24:50
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение Avarges »

BerZerK-ku писал(а):Мне даже интересно, вы в своей практике уже сталкивались с проблемой, когда задачу нельзя было реализовать на Си? или когда асм дал "заметное преимущество"?

Сталкивался, из ассемблера можно выжать максимальное быстродействие, каждой команде сопоставлено количество машинных тактов, си компилирует как ему нравится. Если нужно быстродействие, то куски надо писать на ассемблере, в 2-3 раза по скорости при этом можно си переиграть. А вот компактную прошивку всё-таки проще получить на си, если врубить оптимизацию и писать однотипными кусками кода где возможно.

Мастер Ломастер писал(а):это лишь способ УПОРЯДОЧИВАНИЯ ПЕРЕМЕННЫХ. а, как известно, порядок в программе - следствие порядка в голове. наводите порядок в программе, наводите его в голове - от этого только польза будет, и ни капли вреда. но можно жить и в беспорядке - кто спорит...

Какой там порядок, если людям даже не понятно "чё это". Самый простой способ писать код влоб и объявлять каждую переменную, так будет много больше порядка и понимания.
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Re: WinAvr в вопросах и ответах

Сообщение BerZerK-ku »

Мастер Ломастер писал(а):с моей точки зрения утверждение об экономии памяти программ - спорное
Тут не требуется ваше мнение и спорить не надо, достаточно написать простейший пример или заглянуть в AVR035 о котором я упоминал чуть выше.
Avarges писал(а):Сталкивался
Изивинте за назойливость, а пример привести можете? Какую задачу выполнял МК?
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение Мастер Ломастер »

BerZerK-ku писал(а):
Мастер Ломастер писал(а):с моей точки зрения утверждение об экономии памяти программ - спорное
Тут не требуется ваше мнение и спорить не надо, достаточно написать простейший пример или заглянуть в AVR035 о котором я упоминал чуть выше.
с преогромным интересом погляжу на ваши примеры, доказывающие или опровергающие утверждение, что использование структур с битовыми полями позволяет экономить память программ.
битва с дураками проиграна, победители торжествуют. слава победителям!
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Re: WinAvr в вопросах и ответах

Сообщение BerZerK-ku »

Вы вообще суть разговора помните? Структура дает преимущество в пп по сравнению с кучей разрозненных переменных. При чем тут битовое поле? Толк от его применения, только если проблема с ОЗУ :dont_know:
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение Мастер Ломастер »

BerZerK-ku писал(а):Вы вообще суть разговора помните? Структура дает преимущество в пп по сравнению с кучей разрозненных переменных. При чем тут битовое поле? Толк от его применения, только если проблема с ОЗУ :dont_know:

с битовыми полями я как-то не в тему влез, извиняюсь, это мысли свои бродят и перемешиваются с реальностью... но по поводу заявления о том, что СТРУКТУРЫ ЭКОНОМЯТ ПАМЯТЬ ПРОГРАММ - хотел бы увидеть упомянутые опровержения или подтверждения.
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
slavokhire5
Прорезались зубы
Сообщения: 202
Зарегистрирован: Пн сен 26, 2011 13:48:25
Откуда: Харьков

Re: WinAvr в вопросах и ответах

Сообщение slavokhire5 »

Всем доброго времени суток:) мне нужно реализовать программно регулируемую задержку от 100 до 8100мкс. использую _delay_us(time), где time - результат вычислений. функция эта работает, но занимает 1кб в памяти при включенной оптимизации! как бы по-другому решить мою задачу, подскажите пожалуйста. в голову приходит только while (i < time) i++;
Осилит дорогу идущий
--------------------------
Пишу на Си за еду
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Re: WinAvr в вопросах и ответах

Сообщение BerZerK-ku »

Мастер Ломастер писал(а):с битовыми полями я как-то не в тему влез, извиняюсь, это мысли свои бродят и перемешиваются с реальностью... но по поводу заявления о том, что СТРУКТУРЫ ЭКОНОМЯТ ПАМЯТЬ ПРОГРАММ - хотел бы увидеть упомянутые опровержения или подтверждения.
На этой же странице я уже упоминал рекомендации производителя AVR035, не уж-то там мало написано?
Аватара пользователя
Avarges
Вымогатель припоя
Сообщения: 512
Зарегистрирован: Вт дек 22, 2009 02:24:50
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение Avarges »

slavokhire5 писал(а):Всем доброго времени суток:) мне нужно реализовать программно регулируемую задержку от 100 до 8100мкс. использую _delay_us(time), где time - результат вычислений. функция эта работает, но занимает 1кб в памяти при включенной оптимизации! как бы по-другому решить мою задачу, подскажите пожалуйста. в голову приходит только while (i < time) i++;

Хотел я тут свой код оптимизировать по размеру, у меня только два разных дилэя. сделал две процедуры и всё равно winavr при каждом вызове уже моей процедуры пихает весь код задержки целиком в место вызова. Писал свой цикл задержки внтури процедурки, его оптимизатор просто удаляет, если вписать volatile, то опять же пихает код в каждое место вызова. Пока ничего не придумал, чтоб отбить несколько байт места занятое кусками одинакового кода. (подглядывал в ассемблерный LSS листинг)
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение Мастер Ломастер »

BerZerK-ku писал(а):На этой же странице я уже упоминал рекомендации производителя AVR035, не уж-то там мало написано?
забодай вас комар! то вы требуете чуть ли не с ножом у горла ссылки от меня, то суете ссылки мне... а ведь я просил не ссылок, а реальных примеров. производитель - производителем, а ваши примеры - вашими примерами. то, что верно в теории далеко не всегда легко подтверждается практикой и наоборот.

Avarges писал(а):всё равно winavr при каждом вызове уже моей процедуры пихает весь код задержки целиком в место вызова.
очень странный у вас код или очень странный у вас WinAVR. я не замечал такого

Avarges писал(а):Пока ничего не придумал, чтоб отбить несколько байт места занятое кусками одинакового кода.
slavokhire5 писал(а):использую _delay_us(time), где time - результат вычислений. функция эта работает, но занимает 1кб в памяти
slavokhire5 писал(а):в голову приходит только while (i < time) i++;

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

в очередной раз за другими повторю прописные истины:
1. WinAVR качественно реализует задержки встроенными функциями только при включенной оптимизации
2. в качестве параметра функций программной задержки может быть только константа типа float или целочисленная - ни в коем случае не переменная!

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

что касается последних жалоб, то я просто удивляюсь, как человек, пишуший на Си за еду до сих пор не умер от голода, так и не придумав самый тупой, но весьма эффективный способ получать задержки приемлемой точности ЛЮБОЙ длительности:

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

// функция, способная создать задержку до 65535 секунд
void mega_delay(uint16_t delay_in_seconds){
   for(; delay_in_seconds; delay_in_seconds--)
      _delay_ms(1000);
}
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
Avarges
Вымогатель припоя
Сообщения: 512
Зарегистрирован: Вт дек 22, 2009 02:24:50
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение Avarges »

Мастер Ломастер писал(а):1. WinAVR качественно реализует задержки встроенными функциями только при включенной оптимизации

Видимо в этом и кроется коварный замысел компилятора: создать точную задержку, пихая 10...12 байт ассемблерных команд реализующих заданную задержку по месту. Или мне просто надо обновить winavr или наоборот откатиться.

Вот так выглядит:
LCP|=1<<LCD_RS;
690: c1 9a sbi 0x18, 1 ; 24
LCP|=1<<LCD_E;
692: c0 9a sbi 0x18, 0 ; 24
694: c9 01 movw r24, r18
696: 01 97 sbiw r24, 0x01 ; 1
698: f1 f7 brne .-4 ; 0x696 <LCDsendChar+0x3e>

_delay_us(200);
LCP&=~(1<<LCD_E);
69a: c0 98 cbi 0x18, 0 ; 24
LCP&=~(1<<LCD_RS);
69c: c1 98 cbi 0x18, 1 ; 24
69e: c9 01 movw r24, r18
6a0: 01 97 sbiw r24, 0x01 ; 1
6a2: f1 f7 brne .-4 ; 0x6a0 <LCDsendChar+0x48>

_delay_us(200);


Ну да, 6 байт кода. На RCALL ушло бы 2 :roll:
Пусть подавится winavr парой десятков байт :))) Вот так мы оптимизируем код, када дядя шеф не при делах 8)
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Re: WinAvr в вопросах и ответах

Сообщение BerZerK-ku »

Мастер Ломастер писал(а):забодай вас комар! то вы требуете чуть ли не с ножом у горла ссылки от меня, то суете ссылки мне... а ведь я просил не ссылок, а реальных примеров. производитель - производителем, а ваши примеры - вашими примерами. то, что верно в теории далеко не всегда легко подтверждается практикой и наоборот.
А чем пример из appnote вам не угодил?! Не уж-то инкремент глобальной переменной / элемента структуры для вас что-то из разряда невероятного? НУ раз так, вот пример попроще:

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

char b, c ,d;

struct var
{
   char b;
   char c;
   char d;
} str;

void fs(char v)
{
   var *st = &str;
   
   //st->b = 3;
   st->c += v;
   st->d -= v;
}

void f(char v)
{
   //b = 4;
   c += v;
   d -= v;
}

__C_task void  main(void)
{
   while(1)
   {
      //fs(3);
      f(3);
   }
}
Мастер Ломастер писал(а):что касается последних жалоб, то я просто удивляюсь, как человек, пишуший на Си за еду до сих пор не умер от голода, так и не придумав самый тупой, но весьма эффективный способ получать задержки приемлемой точности ЛЮБОЙ длительности:
А почему пример абстрактный? Для требуемой задачи можете подобное выложить?
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Re: WinAvr в вопросах и ответах

Сообщение BerZerK-ku »

Avarges писал(а):Пусть подавится winavr парой десятков байт Вот так мы оптимизируем код, када дядя шеф не при делах
Не стоит грешить на разработчиков, они не виноваты. У вас есть по крайней мере 2 выхода для решения проблемы:
1. Оформите функцию задержки в отдельном файле.
2. Разберитесь с настройками оптимизации.
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение Мастер Ломастер »

BerZerK-ku писал(а):Не уж-то инкремент глобальной переменной / элемента структуры для вас что-то из разряда невероятного? НУ раз так, вот пример попроще:
юноша, напоминаю: речь шла про то, что структуры позволяют экономить ПАМЯТЬ ПРОГРАММ. поэтому мне ваши примеры попроще до лампочки, меня убедят результаты компиляции двух программ, в одной из которой данные СТРУКТУРИРОВАНЫ, а в другой - лежат в виде неструктурированных переменных. теперь понятно, почему ТЕКСТЫ, даже из апноутов, никому не нужны? назвался груздем - полезай в пузо: ляпнули про экономию - подтвердите реальным примером.

BerZerK-ku писал(а):А почему пример абстрактный? Для требуемой задачи можете подобное выложить?
я могу все - кто за это заплатит? пример, который я привел - это именно пример, толчок мыслям в нужном направлении. а решение реальной задачи - милости прошу в личку, обсудим.
битва с дураками проиграна, победители торжествуют. слава победителям!
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Re: WinAvr в вопросах и ответах

Сообщение BerZerK-ku »

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

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