| Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
IAR AVR
15.09.2009, 15:41
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
|
Re: IAR AVR
Сообщение от shulgaserj
|
|
Ну в прерывания я конечно бы не стал пользоваться itoa.
|
Черт с ним с прерыванием. Но и в многозадачной ОС это не пройдет. Либо оборачивать вызов в критическую секцию, но так можно всю систему уронить.
Сообщение от shulgaserj
|
|
Ну если так стоит вопрос - то всю прогу моно на ASMе написать.
|
Вот и мне так кажется.
|
|
|
|
15.09.2009, 15:42
|
|
|
Гражданин KAZUS.RUN
Регистрация: 05.04.2009
Сообщений: 973
Сказал спасибо: 35
Сказали Спасибо 154 раз(а) в 133 сообщении(ях)
|
Re: IAR AVR
так вроде работает:
#include ‹ioavr.h›
#include ‹inavr.h›
#include ‹stdio.h›
#include ‹pgmspace.h›
int d=1234;
char line[6];
int main( void )
{
sprintf(line,"%d \r\n",d);
for(;  ;
}
|
|
|
|
15.09.2009, 15:48
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
|
Re: IAR AVR
Сообщение от oleg110592
|
|
так вроде работает:
|
Ну попробуйте теперь для unsigned int d = 55678;
|
|
|
|
15.09.2009, 16:11
|
|
|
Гражданин KAZUS.RUN
Регистрация: 05.04.2009
Сообщений: 973
Сказал спасибо: 35
Сказали Спасибо 154 раз(а) в 133 сообщении(ях)
|
Re: IAR AVR
Сообщение от kison
|
Ну попробуйте теперь для unsigned int d = 55678;
|
так работает:
#include ‹ioavr.h›
#include ‹inavr.h›
#include ‹stdio.h›
#include ‹pgmspace.h›
long d = 55678;
//int d=12345;
char line[7];
int main( void )
{
sprintf(line,"%ld \r\n",d);
for(;  ;
}
|
|
|
|
15.09.2009, 16:11
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
|
Re: IAR AVR
Я до кучи и CV протестировал. 
В максимально урезанном варианте по размеру абсолютный рекордсмен - 856 байт вся программа. По тактам тоже неплохо - 1608. С беззнаковым целым работает и в минимуме. Правда как только немного повысил возможности - long,width, так сразу все и протухло - 1344 байта и 12699 тактов. Это уже ни куда не годится. Правда компилятор старый 1.25.3. Может что и улучшилось.
|
|
|
|
15.09.2009, 16:27
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
|
Re: IAR AVR
Сообщение от oleg110592
|
|
так работает:
|
Ну да. 12232 такта и ключик в кармане. Проигрыш бесплатному GCC всего в 10 раз - очень достойный результат. Кроме того, а как же тогда вывести unsigned long int a = 2415919103 ? Оно конечно не часто надо, но все же? Ответ - включить medium в свойствах printf. И получить вообще больше 15000 тактов на преобразование.
Я плавучку в ИАР вообще боюсь проверять. 
Ладно я заканчиваю играться. ИАР пойдет в корзину, где ему самое место.
|
|
|
|
15.09.2009, 16:43
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
|
Re: IAR AVR
Ну тут топикстартер хотел чистой арифметики. На прощание с ИАР-ом:
|
Код:
|
volatile unsigned char ii = 0;
unsigned char a[64] = {0,1,2,3,4,5,6,7,8,9};
unsigned char b[64] = {9,8,7,6,5,4,3,2,1,0};
unsigned char r[64];
void CalcMax(void)
{
unsigned char i;
for (i = 0; i ‹ 64; i++)
{
if(a[i] › b[i]) r[i] = a[i]; else r[i] = b[i];
// r[i] = a[i] › b[i] ? a[i]:b[i]
}
}
int main(void)
{
CalcMax();
while(1)
{
ii++;
}
} |
ИАР - 318 байт вся программа, CalcMax выполняется 1485 тактов.
GCC 4.2.2 - 288 байт вся программа, CalcMax 1487 тактов. Вот такая арифметика. Итого победа ИАР с перевесом в 0,13%. Т.е. доли процента. Реально так и есть, иногда на эти доли впереди GCC. Кстати я пользую все же версию двухлетней давности, а ИАР самый свежий.
Если размерность массива поднять до 280 и соответственно счетчик цикла i сделать unsigned int, то картина меняется - GCC 6735 тактов,ИАР 7315. А это уже не доли, и даже не проценты - почти целый десяток их.
Повторяю - каждый может оттестировать сам, для этого и примеры прикрепляю.
Последний раз редактировалось kison; 15.09.2009 в 16:59.
|
|
|
|
15.09.2009, 16:53
|
|
|
Гражданин KAZUS.RUN
Регистрация: 05.04.2009
Сообщений: 973
Сказал спасибо: 35
Сказали Спасибо 154 раз(а) в 133 сообщении(ях)
|
Re: IAR AVR
Сообщение от kison
|
Я плавучку в ИАР вообще боюсь проверять. 
Ладно я заканчиваю играться. ИАР пойдет в корзину, где ему самое место.
|
Да с sprinf у IAR плохо. В исходниках библиотек, посмотрел дата 1986 - 1999. Сделали один раз и забыли.
Но я использовал ИАР именно из-за float.
Надо было срочно в мегу48 (уже были закуплены) впихнуть терморегулятор под два типа термопар (два полинома). WinAVR, Codevision не влезли ИАР влез (исходник один и тот же). Можно было было конечно оптимизировать вручную, но не было времени.
|
|
|
|
15.09.2009, 17:11
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
|
Re: IAR AVR
Сообщение от oleg110592
|
Но я использовал ИАР именно из-за float.
Надо было срочно в мегу48 (уже были закуплены) впихнуть терморегулятор под два типа термопар (два полинома). WinAVR, Codevision не влезли ИАР влез
|
Так - заинтересовало. Плавучка значит  Их есть у меня
|
Код:
|
volatile unsigned char ii = 0;
volatile double a = 5.0;
volatile double b = 25.0;
volatile double c;
void CalcC(void)
{
c = a * b;
}
int main(void)
{
CalcC();
while(1)
{
ii++;
}
} |
Итого - ИАР - 841 байт, CalcC выполняется 243 такта.
GCC4.2.2 - 582 байта, CalcC выполняется 156 тактов. Очень странно. Хочу комментариев от пользующих этот странный компилятор. В чем же сила? Я вот думаю что в опенсорсных продуктах 
Кстати - даже CV выглядит лучше ИАР - 221 такт. Хотя он тоже не самый свежий
Последний раз редактировалось kison; 15.09.2009 в 17:16.
|
|
|
|
15.09.2009, 17:33
|
|
|
Гражданин KAZUS.RUN
Регистрация: 05.04.2009
Сообщений: 973
Сказал спасибо: 35
Сказали Спасибо 154 раз(а) в 133 сообщении(ях)
|
Re: IAR AVR
Сообщение от kison
|
Итого - ИАР - 841 байт, CalcC выполняется 243 такта.
GCC4.2.2 - 582 байта, CalcC выполняется 156 тактов. Очень странно. Хочу комментариев от пользующих этот странный компилятор. В чем же сила? Я вот думаю что в опенсорсных продуктах 
Кстати - даже CV выглядит лучше ИАР - 221 такт. Хотя он тоже не самый свежий
|
volatile может в ИАРе и не надо:
44 bytes of CODE memory (+ 136 range fill )
64 bytes of DATA memory
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 03:27.
|
|