компилятор С и среда разработки для AVR

Привет Jurgis!

30 Jul 06 13:12, Jurgis Armanavichius писал Alex Mogilnikov:

AM>> А ассемблер тот же? По идее, за листинг-то отвечает не только AM>> (и даже не столько) GCC, сколько ассемблер. GCC только дает ему AM>> указания на строки исходника, которые дали сгенеренный код...

JA> Во всех случаях компиляция и сборка проекта производилась с помощью JA> средств, входящих в один пакет, т.е. и avr-gcc, и WinAVR работали в JA> комплекте со своими родными binutils.

Я имел в виду, одни и те же ли binutils были в обоих экспериментах, или может между экспериментами была разница в год, за который binutils не один раз обновились...

Всего наилучшего, [Team PCAD 2000] Алексей М. ... Если долго думать одни и те же мысли, они становятся грязными.

Reply to
Alex Mogilnikov
Loading thread data ...
ðÒÉ×ÅÔ!

Sun Jul 30 2006 16:49, Alex Mogilnikov wrote to Jurgis Armanavichius:

JA>> ÷Ï ×ÓÅÈ ÓÌÕÞÁÑÈ ËÏÍÐÉÌÑÃÉÑ É ÓÂÏÒËÁ ÐÒÏÅËÔÁ ÐÒÏÉÚ×ÏÄÉÌÁÓØ Ó ÐÏÍÏÝØÀ JA>> ÓÒÅÄÓÔ×, ×ÈÏÄÑÝÉÈ × ÏÄÉÎ ÐÁËÅÔ, Ô.Å. É avr-gcc, É WinAVR ÒÁÂÏÔÁÌÉ × JA>> ËÏÍÐÌÅËÔÅ ÓÏ Ó×ÏÉÍÉ ÒÏÄÎÙÍÉ binutils. AM> ñ ÉÍÅÌ × ×ÉÄÕ, ÏÄÎÉ É ÔÅ ÖÅ ÌÉ binutils ÂÙÌÉ × ÏÂÏÉÈ ÜËÓÐÅÒÉÍÅÎÔÁÈ, AM> ÉÌÉ ÍÏÖÅÔ ÍÅÖÄÕ ÜËÓÐÅÒÉÍÅÎÔÁÍÉ ÂÙÌÁ ÒÁÚÎÉÃÁ × ÇÏÄ, ÚÁ ËÏÔÏÒÙÊ binutils AM> ÎÅ ÏÄÉÎ ÒÁÚ ÏÂÎÏ×ÉÌÉÓØ...

ïÂÁ ËÏÍÐÉÌÑÔÏÒÁ Ñ ÂÒÁÌ Ó ÓÁÊÔÁ AVRFreaks, × ÒÁÚÎÏÅ ×ÒÅÍÑ (Ó ÒÁÚÎÉÃÅÊ × ÎÅÓËÏÌØËÏ ÌÅÔ). HÏ × ÈÏÄÅ ÜËÓÐÅÒÉÍÅÎÔÏ×, ËÁË Ñ ÐÉÓÁÌ, ËÁÖÄÙÊ ÉÚ ÎÉÈ ÒÁÂÏÔÁÌ ÓÏ Ó×ÏÅÊ ×ÅÒÓÉÅÊ binutils. ñ ÐÒÑÍÏ × mk.bat ÚÁÂÉ×ÁÀ ÔÁËÉÅ ÓÔÒÏËÉ:

set PATH=d:\avrgcc1\bin;%PATH% set AVR=d:\avrgcc1

É

set PATH=C:\Program Files\WinAVR\bin;%PATH% set AVR=C:\Program Files\WinAVR

ôÁËÉÍ ÏÂÒÁÚÏÍ ÓÔÁÒÙÊ avr-gcc ÒÁÂÏÔÁÅÔ ÓÏ Ó×ÏÉÍÉ ÓÔÁÒÙÍÉ binutils, Á ÂÏÌÅÅ ÎÏ×ÙÊ WinAVR - ÓÏ Ó×ÏÉÍÉ ÎÏ×ÙÍÉ binutils. àÒÇÉÓ
Reply to
Jurgis Armanavichius

rjmp vs brxx -- ÓÁÍÏÍÕ ÎÅ ÄÏÇÁÄÁÔØÓÑ?

avr-gcc ÎÅ ÓÕÝÅÓÔ×ÕÅÔ. óÕÝÅÓÔ×ÕÅÔ backend Ë gcc.

Reply to
Kirill Frolov

Привет!

Mon Jul 31 2006 00:45, Kirill Frolov wrote to Jurgis Armanavichius:

Черт его знает... Может иногда это и полезно, но не думаю, что очень часто, т.к. обе эти команды занимают одно слово. Правда, brxx гибче, но зато rjmp прыгает гораздо дальше.

Я посчитал размер кода для оператора перехода по команде SerialCommand. Вот листинг с ключем оптимизации -O1:

38:sinter.c **** switch(SerialCommand) { 113 .LM2: 114 .LBB2: 115 0018 8091 0000 lds r24,SerialCommand 116 001c 9927 clr r25 117 001e 8B30 cpi r24,11 118 0020 9105 cpc r25,__zero_reg__ 119 0022 41F1 breq .L11 <=== на case SERCMD_GETEEPROM: 120 0024 8C30 cpi r24,12 121 0026 9105 cpc r25,__zero_reg__ 122 0028 1CF4 brge .L20 123 002a 0197 sbiw r24,1 124 002c 29F0 breq .L3 125 002e B3C0 rjmp .L2 <=== это выход 126 .L20: 127 0030 0C97 sbiw r24,12 128 0032 09F4 brne _PC_+2 129 0034 66C0 rjmp .L13 <=== на case SERCMD_SETEEPROM: 130 0036 AFC0 rjmp .L2 <=== это выход 131 .L3: 39:sinter.c **** 40:sinter.c **** case SERCMD_GETVERSION:

Далее идут всякие case'ы, на которые сделан переход. Перебор условий занимает 16 слов. А вот более оптимизированный код (с ключем -O2 и выше):

38:sinter.c **** switch(SerialCommand) { 116 .LM2: 117 .LBB2: 118 001e 8091 0000 lds r24,SerialCommand 119 0022 9927 clr r25 120 0024 8B30 cpi r24,11 121 0026 9105 cpc r25,__zero_reg__ 122 0028 09F4 brne _PC_+2 123 002a 68C0 rjmp .L11 <=== на case SERCMD_GETEEPROM: 124 002c 8C30 cpi r24,12 125 002e 9105 cpc r25,__zero_reg__ 126 0030 0CF5 brge .L20 <=== ! продолжение анализа 127 0032 0197 sbiw r24,1 128 0034 09F0 breq _PC_+2 129 0036 A6C0 rjmp .L2 <=== это выход 39:sinter.c **** 40:sinter.c **** case SERCMD_GETVERSION:

Дальше, после кода case SERCMD_GETVERSION:, продолжение анализа условия:

171 .L20: 172 0074 0C97 sbiw r24,12 173 0076 09F0 breq _PC_+2 174 0078 85C0 rjmp .L2 <=== это выход ... 80:sinter.c **** case SERCMD_SETEEPROM: 81:sinter.c **** MEMORYW_block = (MEMORYW_BLOCK *)&SerialBuffer;

Получается все те же 16 слов. Hо листинг становится нечитаемым (точнее, трудночитаемым). Hаверное это плата за мультиплатформенность... Т.к. на другом процессоре вполне может получиться выигрыш за счет меньшего размера команд условного перехода по-сравнению с командой безусловного. Только мне эта мультиплатформенность, в данном конкретном случае, нафиг не сдалась...

avr-gcc не существует? А чем же я столько лет пользовался?! Теперь вот перешел на WinAVR. Он-то хоть существует? ;-) (Воланда вспомнил...)

P.S. Сегодня последний день на работе, т.к. иду догуливать отпуск! Hаверное, не смогу писать пару недель. (Сегодня вечером еще поотвечаю и все.)

Юргис

Reply to
Jurgis Armanavichius

"Прыгает гораздо дальше". НЕужели программируя на ассемблерре хоть тот же AVR, хоть IBMPC не сталкивался с характерным трюком -- комбнации условного и безусловного перехода (*две* команды) только потому, что условный переход -- исключительно относительный (и на 128 байт)? Даже ручная перестановка кода в switch-case (асеемблерном) очень помогает.

Напиши свой компилятор...

Reply to
Kirill Frolov

Привет!

Mon Jul 31 2006 20:01, Kirill Frolov wrote to Jurgis Armanavichius:

Когда-то очень давно сталкивался :-) Бог миловал, эти времена давно прошли! Именно поэтому я так упёрто спорю с Георгием ;-)

KF> Даже ручная перестановка кода в switch-case (асеемблерном) очень KF> помогает.

"Очень" - это на сколько? Hа десятках килобайт программы выиграешь пяток байт? Оно сильно поможет? Лично я считаю, что если программная память использована на 95 и более процентов - это прокол инженера/программиста, который допустил безобразие, заключающееся в отсутствии технологического запаса на экстренные модификации кода. Мой многолетний опыт говорит, что такая моя точка зрения верна.

Это ты, типа, пошутил? ;-) Кстати, упрощенный компилятор с PL-1 я когда-то писал... По одной очень умной книге. Правда, до законченного рабочего вида не довел, т.к. в мою жизнь вошел ТурбоСи... :-)

Юргис

Reply to
Jurgis Armanavichius

KF>> Даже ручная перестановка кода в switch-case (асеемблерном) очень KF>> помогает. JA>

JA> "Очень" - это на сколько? Hа десятках килобайт программы выиграешь пяток JA> байт? Оно сильно поможет? Лично я считаю, что если программная память JA> использована на 95 и более процентов - это прокол инженера/программиста, JA> который допустил безобразие, заключающееся в отсутствии технологического JA> запаса на экстренные модификации кода. Мой многолетний опыт говорит, что JA> такая моя точка зрения верна. JA>

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

а "очень" это иногда прилично. несколько проектов я делал с заполнением 95% (сознательно на это шли, см. выше) так на 8Кб кода с включенной/выключенной оптимизацией иногда 0.5 Кб разница выходит :)

KF>> Hапиши свой компилятор... JA>

JA> Это ты, типа, пошутил? ;-) Кстати, упрощенный компилятор с PL-1 я когда-то JA> писал... По одной очень умной книге. Правда, до законченного рабочего вида JA> не довел, т.к. в мою жизнь вошел ТурбоСи... :-)

Reply to
Dmitry E. Oboukhov

 X-Virus-Scanned: amavisd-new at bezeqint.net

Hello, Jurgis Armanavichius! You wrote in conference fido7.ru.embedded to Kirill Frolov on Mon, 31 Jul

2006 21:02:15 +0400:

JA> "Очень" - это на сколько? Hа десятках килобайт программы выиграешь JA> пяток байт? Оно сильно поможет? Лично я считаю, что если программная JA> память использована на 95 и более процентов - это прокол JA> инженера/программиста, который допустил безобразие, заключающееся в JA> отсутствии технологического запаса на экстренные модификации кода.

А если 95% (а то и больше) получилось в результате этой модификации?

JA> Мой многолетний опыт говорит, что такая моя точка зрения верна.

dima

formatting link

Reply to
Dmitry Orlov

Привет Dmitry!

31 Июл 06 года (а было тогда 22:35) Dmitry E. Oboukhov в своем письме к Jurgis Armanavichius писал:

DO> тут весь вопрос в том что немного пудумав ты упихаешь задачу в DO> полбаксовый проц, а вот если инженер не будет допускать безобразия то DO> проц будет полтора-трехбаксовый

Hеужели два похожих кристалла с разницей в половину памяти, различаются по цене 3 - 6 раз ?

С уважением, Andrey 31 Июл 06 года

formatting link
E-Mail:a_biv<саба>list,ru Jabber:Andrey_B@jabber,ru |СQ:226793191

Reply to
Andrey Bivshih

DO>> тут весь вопрос в том что немного пудумав ты упихаешь задачу в DO>> полбаксовый проц, а вот если инженер не будет допускать безобразия то DO>> проц будет полтора-трехбаксовый AB>

AB> Hеужели два похожих кристалла с разницей в половину памяти, AB> различаются по цене 3 - 6 раз ? а как правило два кристалла разницей в половину памяти (это и к ПЛИС относится) находятся в разных корпусах что на цену влияет дополнительно. :)

Reply to
Dmitry E. Oboukhov

Hello Dmitry.

Mon Jul 31 2006 21:35, Dmitry E Oboukhov wrote to Jurgis Armanavichius:

DEO> тут весь вопрос в том что немного пудумав ты упихаешь задачу в DEO> полбаксовый проц, а вот если инженер не будет допускать безобразия то DEO> проц будет полтора-трехбаксовый

Любопытно, а что за процессоры такие? Обычно при увеличении объёма флэшки вдвое цена растёт менее, чем вдвое. Если конечно, речь не о старшей модели ряда. Hо старшие модели полбакса не стоят... непонятно.

Dimmy.

Reply to
Dimmy Timchenko

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

Согласен. 100% КПД -- плохо. С другой стороны, думаю, вполне допустимо среди пиков, где легко взять бОльший кристалл.

Reply to
Kirill Frolov

Привет Dmitry!

01 Авг 06 года (а было тогда 00:59) Dmitry E. Oboukhov в своем письме к Andrey Bivshih писал:

AB>> Hеужели два похожих кристалла с разницей в половину памяти, AB>> различаются по цене 3 - 6 раз ?

DO> а как правило два кристалла разницей в половину памяти (это и к ПЛИС DO> относится) находятся в разных корпусах DO> что на цену влияет дополнительно. :)

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

С уважением, Andrey 01 Авг 06 года

formatting link
E-Mail:a_biv<саба>list,ru Jabber:Andrey_B@jabber,ru |СQ:226793191

Reply to
Andrey Bivshih

AB>>> Hеужели два похожих кристалла с разницей в половину памяти, AB>>> различаются по цене 3 - 6 раз ? AB>

DO>> а как правило два кристалла разницей в половину памяти (это и к ПЛИС DO>> относится) находятся в разных корпусах DO>> что на цену влияет дополнительно. :) AB>

AB> В этом случае придется переразводить плату, а значит можно достаточно AB> безболезненно, вообще перейти на другой вид контроллеров, вы ведь не на AB> ассемблере пишете. обычно четко видна разница в объеме кода между включенной и выключенной оптимизацией. для avr'ов например -O2 по моим проектам всегда приносило 10-20% экономии (в зависимости от)

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

кстати в PLD оптимизаторы сильнее существенно воздействие оказывают не знаю почему. вырубишь оптимизатор - в 64 не влазит, врубишь - в 32-ю со свистом пролетает :)

Reply to
Dmitry E. Oboukhov

Hi Nickita !

Совсем недавно 22 Jul 06 13:42, Nickita A Startcev писал к Yuri Nikiforov:

YN>> Масенький девайс с юсб-уарт конвертором и мегой88 для измерения YN>> угла поворота руки пациента (тест кинематометрии для наших YN>> психологов).

NS> А каким датчиком и как технически измеряется этот угол? Технически- трехосным акселерометром, который показывает статическое ускорение, пересчитать в угол наклона легко. Когда игрался с акселерометрами, даже захотелось такое к сроительному уровню присобачить, чтобы знать угол наклона поверхности. Очень чуствительная штука.

WBRgrds Ruslan

Reply to
Ruslan Mohniuc

Может кто дешёвый акселерометр порекомендует?

Вот ещё дисплей есть. LMG7401PLBC. Даташита на него нормального нет. Только краткий: ноги, посадочные места, примерная схема. Эскпериментировать не охота. Не совсем понятно как оно собственно управляется. Может кто что подскажет?

Reply to
Kirill Frolov

Fri Aug 04 2006 15:44, Kirill Frolov wrote to Ruslan Mohniuc:

KF> Может кто дешёвый акселерометр порекомендует?

Точность, потребление, диапазон, вес, размер?

Можно ведь и грузик на переменном резисторе использовать - дешевле вряд ли получится...

"Resistance is futile"

Reply to
Yuriy K

Hi Kirill !

Совсем недавно 04 Aug 06 15:44, Kirill Frolov писал к Ruslan Mohniuc:

KF> Может кто дешёвый акселерометр порекомендует? Большинство MEMS дешевенькие, до 10$. АналогДевайсовский ширпотреб еще дешевле. Если хочется с шумами лучше чем скажем 100ug*sqr(F), то в кармане должно быть гораздо больше денежков.

WBRgrds Ruslan

Reply to
Ruslan Mohniuc

Hi Yuriy !

Совсем недавно 04 Aug 06 17:01, Yuriy K писал к Kirill Frolov:

KF>> Может кто дешёвый акселерометр порекомендует?

YK> Точность, потребление, диапазон, вес, размер? хочу c шумами на уровне 0.1mg при 500 Hz. И чтобы цена не четырехзначная. Может, такое где-то существует? Пока что встречал дешевые гораздо шумнее и очень дорогие и на порядок тише (да еще и жрет). А вот в этой нише как-то ничего не делают.

WBRgrds Ruslan

Reply to
Ruslan Mohniuc

Tue Aug 01 2006 23:15, Ruslan Mohniuc wrote to Nickita A Startcev:

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

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

VLV

"Что даст мне свет, чего я сам не знаю?" (c) Гете "Фауст"

Reply to
Vladimir Vassilevsky

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.