реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> WinAVR обновился до 20081118rc2, Похоже, скоро релиз появится!
Alex_NEMO
сообщение Nov 20 2008, 12:22
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 106
Регистрация: 13-05-05
Пользователь №: 4 977



Release Candidate 20081118rc2

File Release Notes and Changelog

Release Name: 20081118rc2

Notes:
Below is just a sample of what's new.

- New version of GNU Binutils: 2.19

- New version of GCC: 4.3.2

- New version of AVR-LibC: 1.6.4

- New version of Programmers Notepad: 2.0.8.718

- New devices supported:
* ATxmega64A3
* ATxmega128A3
* ATxmega256A3
* ATxmega256A3B
* ATmega32U6

- Various bugs fixed.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Nov 21 2008, 09:02
Сообщение #2


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Что то потянуло попробовать этот компилятор.
Хочу посмотреть, не будет ли он лучше ИАРа. А то последний запарил уже глупой работой с указателями. А вчера вообще в куске кода вида:
unsigned char a, b;
if (a > (b +10)) ...
заметил, что байтные переменные обрабатывались как слова... :-(
Спрашивается - какого чёрта? Мне вот эта самодеятельность совершенно не нравится.

Установил WinAVR, в AVRStudio создал проект, добавил файлы. Но как заствить компилятор понимать СИ++? Он упорно ругается на bool и другие фишки плюса...
Пробую этот компилятор впервые...
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Nov 21 2008, 09:12
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Цитата(sonycman @ Nov 21 2008, 12:02) *
А вчера вообще в куске кода вида:
unsigned char a, b;
if (a > (b +10)) ...
заметил, что байтные переменные обрабатывались как слова... :-(


Все по стандарту - в арифметических выражениях unsigned char продвигается до unsigned int ...
GCC по-идее. так же будет работать.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Nov 21 2008, 09:45
Сообщение #4


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(sonycman @ Nov 21 2008, 13:02) *
unsigned char a, b;
if (a > (b +10)) ...

А Вы хотели, чтобы если b=250, а=16, то (b+10) чтоб резко стало меньше а lol.gif
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 21 2008, 10:47
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(sonycman @ Nov 21 2008, 11:02) *
Установил WinAVR, в AVRStudio создал проект, добавил файлы. Но как заствить компилятор понимать СИ++? Он упорно ругается на bool и другие фишки плюса...
он определяет по расширению исходного файла. .cpp компилируется в режиме С++. Будьте готовы в ближайшее время изучать make и язык его makefile, ибо то, что генерит студия вас скоро перестанет устраивать.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Nov 21 2008, 11:02
Сообщение #6


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(sonycman @ Nov 21 2008, 12:02) *
Установил WinAVR, в AVRStudio создал проект, добавил файлы. Но как заствить компилятор понимать СИ++? Он упорно ругается на bool и другие фишки плюса...
Забудьте про IDE:) FAR+colorer+makefile и в путь!


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
sonycman
сообщение Nov 21 2008, 13:52
Сообщение #7


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(Непомнящий Евгений @ Nov 21 2008, 13:12) *
Все по стандарту - в арифметических выражениях unsigned char продвигается до unsigned int ...
GCC по-идее. так же будет работать.

Так и думал, что типа так положено. Кто только не придумывает эти стандарты... cranky.gif

Однако, при максимальной оптимизации по скорости и по размеру кода, это выражение выглядит просто дико - тогда, когда оно могло было быть в два раза быстрее и в два раза меньше 07.gif
Не менее глупо выглядит такое:
unsigned char a, b;
if (a > (byte)(b +10)) ...
но код становится правильным laughing.gif

Цитата(_Pasha @ Nov 21 2008, 13:45) *
А Вы хотели, чтобы если b=250, а=16, то (b+10) чтоб резко стало меньше а lol.gif

Да нет, слава богу, пока такое не задумывал rolleyes.gif

Цитата(Сергей Борщ @ Nov 21 2008, 14:47) *
он определяет по расширению исходного файла. .cpp компилируется в режиме С++. Будьте готовы в ближайшее время изучать make и язык его makefile, ибо то, что генерит студия вас скоро перестанет устраивать.

Хм, да, пошарился тут по сети, и кое-какие заявления о том, что для поддержки С++ нужно что-то там пересобрать (перекомпилировать???) ставят в тупик... б-рр-р, ох уже этот линукс wacko.gif

Цитата(demiurg_spb @ Nov 21 2008, 15:02) *
Забудьте про IDE:) FAR+colorer+makefile и в путь!

Ну, я пока неплохо себя чувствую со SlickEdit и IAR. Хочу просто сравнить компиляторы. Вдруг понравится?

Спасибо всем за помощь! a14.gif
Go to the top of the page
 
+Quote Post
Rst7
сообщение Nov 21 2008, 14:29
Сообщение #8


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
А то последний запарил уже глупой работой с указателями.


Например?


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
sonycman
сообщение Nov 21 2008, 15:50
Сообщение #9


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(Rst7 @ Nov 21 2008, 18:29) *
Например?

А вот эту тему посмотрите: тута.
Вы же тогда сами мне подсказывали smile.gif

ЗЫ: видимо AVR Studio с интегрированным WinAVR никак не заставить компилировать C++.
Среда отказывается компилировать файлы с расширением, отличным от .с...
Через внешний makefile это возможно, но что-то не особо прельщает искать ошибки по номерам строчек в файлах, так как клик по сообщению не работает...
Млин, каменный век какой-то...
Может, когда времени больше будет smile.gif
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 21 2008, 18:11
Сообщение #10


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(sonycman @ Nov 21 2008, 17:50) *
Через внешний makefile это возможно, но что-то не особо прельщает искать ошибки по номерам строчек в файлах, так как клик по сообщению не работает...
Очень странно. У меня работало. Просто в настройках проекта указать Custom (или External?) Makefile и все. Парсер вывода ведь никуда не денется. А еще можно отказаться от студии и работать в Эклипсе, а студию изредка использовать как симулятор, загружая в нее .elf.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
sonycman
сообщение Nov 21 2008, 20:02
Сообщение #11


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(Сергей Борщ @ Nov 21 2008, 22:11) *
Очень странно. У меня работало. Просто в настройках проекта указать Custom (или External?) Makefile и все. Парсер вывода ведь никуда не денется. А еще можно отказаться от студии и работать в Эклипсе, а студию изредка использовать как симулятор, загружая в нее .elf.

Эклипс? Не юзал пока. А СликЭдит не подойдёт?

Скомпильнул небольшой код, и мне оптимизация ГНУ показалась интересной. Есть некоторые моменты, которые ИАР (5.10) даже не пытался затронуть, в отличие от, так сказать. Правда, очень уж любит ГНУ разворачивать подпрограммы, размерчик в итоге, думаю, получится посолидней... biggrin.gif
Тестил ГНУ на О3 и на Оs, а ИАР на макс. по скорости...

ЗЫ: вот напоследок перл от ИАРА:
Дано:
Код
#define RPM_MIN 0
#define RPM_MED 1
#define RPM_MAX 2

typedef    unsigned char    byte;

struct    frDatatable
{
    byte    min_speed;
    byte    med_speed;
    byte    max_speed;
    byte    min_temp;
    byte    max_temp;
} data;

    byte    RPMval[3];
    byte    minTEMPval;
    byte    maxTEMPval;

void    CFanRegulator::SetData(frDatatable *data)
{
    RPMval[RPM_MIN]    =    data->min_speed;
    RPMval[RPM_MED]    =    data->med_speed;
    RPMval[RPM_MAX]    =    data->max_speed;
    minTEMPval    =    data->min_temp;
    maxTEMPval    =    data->max_temp;
}

Вроде проще некуда. В итоге имеем:
Код
void    CFanRegulator::SetData(frDatatable *data)
   \                     ??SetData:
     15          {
     16              RPMval[RPM_MIN]    =    data->min_speed;
   \   00000000   01F9               MOVW    R31:R30, R19:R18
   \   00000002   8140               LD      R20, Z
   \   00000004   01F8               MOVW    R31:R30, R17:R16
   \   00000006   8345               STD     Z+5, R20
     17              RPMval[RPM_MED]    =    data->med_speed;
   \   00000008   01F9               MOVW    R31:R30, R19:R18
   \   0000000A   8141               LDD     R20, Z+1
   \   0000000C   01F8               MOVW    R31:R30, R17:R16
   \   0000000E   8346               STD     Z+6, R20
     18              RPMval[RPM_MAX]    =    data->max_speed;
   \   00000010   01F9               MOVW    R31:R30, R19:R18
   \   00000012   8142               LDD     R20, Z+2
   \   00000014   01F8               MOVW    R31:R30, R17:R16
   \   00000016   8347               STD     Z+7, R20
     19              minTEMPval    =    data->min_temp;
   \   00000018   01F9               MOVW    R31:R30, R19:R18
   \   0000001A   8143               LDD     R20, Z+3
   \   0000001C   01F8               MOVW    R31:R30, R17:R16
   \   0000001E   8740               STD     Z+8, R20
     20              maxTEMPval    =    data->max_temp;
   \   00000020   01F9               MOVW    R31:R30, R19:R18
   \   00000022   8124               LDD     R18, Z+4
   \   00000024   01F8               MOVW    R31:R30, R17:R16
   \   00000026   8721               STD     Z+9, R18
     21          }
   \   00000028   9508               RET

Просто аццкая куча кода biggrin.gif
Раз указатель грузится каждый раз заново - зачем он здесь вообще нужен?
К чему так заморачиваться - надо было авторам LDS использовать - эффект тот-же cranky.gif
И такое встречается частенько.
Вроде хороший компилер, но работа с указателями похабная.
Из трёх регистровых пар практически используется только одна.

А вот ГНУ такой фигнёй, похоже, не страдает wink.gif
Go to the top of the page
 
+Quote Post
ukpyr
сообщение Nov 21 2008, 20:49
Сообщение #12


Профессионал
*****

Группа: Участник
Сообщений: 1 264
Регистрация: 17-06-08
Из: бандустан
Пользователь №: 38 347



Цитата
А вот ГНУ такой фигнёй, похоже, не страдает

ну дык, зачем тогда платить ?
новые версии выходят регулярно, комьюнити и охват ахитектур огромные.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 21 2008, 22:29
Сообщение #13


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(sonycman @ Nov 21 2008, 22:02) *
Эклипс? Не юзал пока. А СликЭдит не подойдёт?
Пойдет. Лично не пользовал, но уважаемые форумчане хвалят.
Цитата(sonycman @ Nov 21 2008, 22:02) *
Тестил ГНУ на О3 и на Оз, а ИАР на макс. по скорости...
Дык... O3 - это для больших машин с кучей памяти. Инлайн и разворот циклов где только можно в погоне за скоростью. Для AVR оптимальным является Os. Кроме того там есть еще куча ключей для тонкой настройки. Ваш код действительно дал какой-то неадекватный результат. Для ИАРа оптимизация по скорости очень часто дает меньший код, чем оптимизация по размеру (парадокс!). Попробуйте включить кластеризацию переменных, и вообще все галочки, которые доступны в дополнительных параметрах оптимизации.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
manul78
сообщение Nov 21 2008, 22:30
Сообщение #14


Местный
***

Группа: Участник
Сообщений: 403
Регистрация: 14-05-07
Из: Россия, г.Пенза
Пользователь №: 27 719



Цитата(Сергей Борщ @ Nov 21 2008, 21:11) *
А еще можно отказаться от студии и работать в Эклипсе, а студию изредка использовать как симулятор, загружая в нее .elf.


Вот вот, именно так и я делаю. Разделение труда. Пакет ГНУ для кода, а Студия для отладки.

И все работает как часы... yeah.gif


--------------------
" Многие вещи нам непонятны не потому, что наши понятия слабы; но потому, что сии вещи не входят в круг наших понятий." (с) К.Прутков.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Nov 21 2008, 22:50
Сообщение #15


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(sonycman @ Nov 21 2008, 22:02) *
Просто аццкая куча кода biggrin.gif

Поставьте перед функцией __z, а ещё лучше __x (передавать указатель через регистровую пару весьма разумно) или оптимизацию установите по объёму и будет Вам счастье.
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 04:15
Рейтинг@Mail.ru


Страница сгенерированна за 0.01518 секунд с 7
ELECTRONIX ©2004-2016