|
WinAVR обновился до 20081118rc2, Похоже, скоро релиз появится! |
|
|
|
Nov 20 2008, 12:22
|
Частый гость
 
Группа: Свой
Сообщений: 106
Регистрация: 13-05-05
Пользователь №: 4 977

|
Release Candidate 20081118rc2File 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.
|
|
|
|
|
Nov 21 2008, 09:12
|
Знающий
   
Группа: Свой
Сообщений: 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 по-идее. так же будет работать.
|
|
|
|
|
Nov 21 2008, 13:52
|

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

|
Цитата(Непомнящий Евгений @ Nov 21 2008, 13:12)  Все по стандарту - в арифметических выражениях unsigned char продвигается до unsigned int ... GCC по-идее. так же будет работать. Так и думал, что типа так положено. Кто только не придумывает эти стандарты... Однако, при максимальной оптимизации по скорости и по размеру кода, это выражение выглядит просто дико - тогда, когда оно могло было быть в два раза быстрее и в два раза меньше Не менее глупо выглядит такое: unsigned char a, b; if (a > (byte)(b +10)) ... но код становится правильным Цитата(_Pasha @ Nov 21 2008, 13:45)  А Вы хотели, чтобы если b=250, а=16, то (b+10) чтоб резко стало меньше а  Да нет, слава богу, пока такое не задумывал Цитата(Сергей Борщ @ Nov 21 2008, 14:47)  он определяет по расширению исходного файла. .cpp компилируется в режиме С++. Будьте готовы в ближайшее время изучать make и язык его makefile, ибо то, что генерит студия вас скоро перестанет устраивать. Хм, да, пошарился тут по сети, и кое-какие заявления о том, что для поддержки С++ нужно что-то там пересобрать (перекомпилировать???) ставят в тупик... б-рр-р, ох уже этот линукс Цитата(demiurg_spb @ Nov 21 2008, 15:02)  Забудьте про IDE:) FAR+colorer+makefile и в путь! Ну, я пока неплохо себя чувствую со SlickEdit и IAR. Хочу просто сравнить компиляторы. Вдруг понравится? Спасибо всем за помощь!
|
|
|
|
|
Nov 21 2008, 15:50
|

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

|
Цитата(Rst7 @ Nov 21 2008, 18:29)  Например? А вот эту тему посмотрите: тута. Вы же тогда сами мне подсказывали ЗЫ: видимо AVR Studio с интегрированным WinAVR никак не заставить компилировать C++. Среда отказывается компилировать файлы с расширением, отличным от .с... Через внешний makefile это возможно, но что-то не особо прельщает искать ошибки по номерам строчек в файлах, так как клик по сообщению не работает... Млин, каменный век какой-то... Может, когда времени больше будет
|
|
|
|
|
Nov 21 2008, 20:02
|

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

|
Цитата(Сергей Борщ @ Nov 21 2008, 22:11)  Очень странно. У меня работало. Просто в настройках проекта указать Custom (или External?) Makefile и все. Парсер вывода ведь никуда не денется. А еще можно отказаться от студии и работать в Эклипсе, а студию изредка использовать как симулятор, загружая в нее .elf. Эклипс? Не юзал пока. А СликЭдит не подойдёт? Скомпильнул небольшой код, и мне оптимизация ГНУ показалась интересной. Есть некоторые моменты, которые ИАР (5.10) даже не пытался затронуть, в отличие от, так сказать. Правда, очень уж любит ГНУ разворачивать подпрограммы, размерчик в итоге, думаю, получится посолидней... Тестил ГНУ на О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 Просто аццкая куча кода Раз указатель грузится каждый раз заново - зачем он здесь вообще нужен? К чему так заморачиваться - надо было авторам LDS использовать - эффект тот-же И такое встречается частенько. Вроде хороший компилер, но работа с указателями похабная. Из трёх регистровых пар практически используется только одна. А вот ГНУ такой фигнёй, похоже, не страдает
|
|
|
|
|
Nov 21 2008, 20:49
|
Профессионал
    
Группа: Участник
Сообщений: 1 264
Регистрация: 17-06-08
Из: бандустан
Пользователь №: 38 347

|
Цитата А вот ГНУ такой фигнёй, похоже, не страдает ну дык, зачем тогда платить ? новые версии выходят регулярно, комьюнити и охват ахитектур огромные.
|
|
|
|
|
Nov 21 2008, 22:29
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Nov 21 2008, 22:30
|

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

|
Цитата(Сергей Борщ @ Nov 21 2008, 21:11)  А еще можно отказаться от студии и работать в Эклипсе, а студию изредка использовать как симулятор, загружая в нее .elf. Вот вот, именно так и я делаю. Разделение труда. Пакет ГНУ для кода, а Студия для отладки. И все работает как часы...
--------------------
" Многие вещи нам непонятны не потому, что наши понятия слабы; но потому, что сии вещи не входят в круг наших понятий." (с) К.Прутков.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|