Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

Результаты опроса: Я пользуюсь компилятором для AVR ...
WinAVR 17 27.42%
IAR 15 24.19%
CodeVision 22 35.48%
Другой компилятор С 1 1.61%
Я пишу не на С 7 11.29%
Голосовавшие: 62. Вы ещё не голосовали в этом опросе

 
Опции темы

IAR AVR

Непрочитано 15.09.2009, 00:25  
alberio
Гражданин KAZUS.RUN
 
Аватар для alberio
 
Регистрация: 08.07.2006
Сообщений: 582
Сказал спасибо: 76
Сказали Спасибо 90 раз(а) в 66 сообщении(ях)
alberio на пути к лучшему
Хорошо Re: IAR AVR

ну... хайтеч это сила! Для микрочипа компилю только на нем.
Реклама:
__________________
Sex, Druggs, Rock&Roll
alberio вне форума  
Непрочитано 15.09.2009, 10:48  
kison
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: IAR AVR

Да, странно. Походу ИАР не совсем С компилятор - поддерживает стандарт не полностью. Удивительно в этом то, что ЭТО продается за деньги. В общем приношу свои извинения alberio, смеялся я зря. Итог - форматтеры %u, %i не поддерживаются ( их правда можно включить в настройках установив Library Options-›Printf formatter-›Large) , а вот с %d работает. Причем я попробовал разные варианты причин неработоспособности, в т.ч. увеличивал стеки ( данных аж до 512 байт), но не помогало. А потом попробовал другой ключик формата и заработало. Я сочувствую тем, кто пользуется ИАР - грабли вылезают на неожиданных местах.
kison вне форума  
Непрочитано 15.09.2009, 11:58  
kison
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: IAR AVR

Ну и вдогонку. Раз уж поставил ИАР, надо и потестировать. Миф о его высокой эффективности рассеялся в пух и прах. Судите сами:
Код:
#include ‹stdio.h›

char	buf[6];
unsigned int	var = 1234;
volatile unsigned char i = 0;

int		main(void)
{
sprintf(&buf[0],"%d",var);

while(1)
	{
	i++;
	}
}
Оптимизация по размеру FULL.
sprintf урезанный по максимуму - 7951 такт! 990 байт вся программа
sprintf medium - 1804 байта, 5574 такта.
sprintf полный - 5880 тактов, 3783 байт программа (странный результат, выполняется быстрее урезанного)
GCC урезанный sprintf ( все же куда больше соответствует стандарту, %i,%u работают) 1230 байт, 1550 тактов
Средний вариант - 1632 байта, 1320 тактов.
GCC - полный sprintf - 1376 тактов, 3162 байта, оптимизация также по размеру Os
Тоже странности есть со временем полного и урезанного. Хотя и не такие большие.
В принципе оптимизация не сильно и важна для библиотечный функций, они не оптимизируются в принципе ибо написаны на ассемблере. Все равно удивительно 1550 тактов против 7951...
Или для сравнения с равным функционалом - средняя функциональность
1320 тактов ГЦЦ, 5574 такта ИАР. Что то неладно в датском королевстве....
Работающие с ИАР - прокоментируйте плз, чего так медленно то? И это оптимизированные библиотечные функции???
Для желающих проверить самостоятельно использовались следующие версии:
ИАР 5.30.00
GCC 4.2.2

Последний раз редактировалось kison; 15.09.2009 в 12:09.
kison вне форума  
Непрочитано 15.09.2009, 12:10  
shulgaserj
Частый гость
 
Регистрация: 16.08.2007
Сообщений: 13
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
shulgaserj на пути к лучшему
По умолчанию Re: IAR AVR

Добрый день или вечер!

Посмотри в include`х головной файл типа stdlib.
Там по идее должно быть следующее:

void itoa(int n,char *str);
void ltoa(long int n,char *str);
void ftoa(float n,unsigned char decimals,char *str);
void ftoe(float n,unsigned char decimals,char *str);

Ну с форматами понятно.
shulgaserj вне форума  
Непрочитано 15.09.2009, 12:17  
kison
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: IAR AVR

Сообщение от shulgaserj Посмотреть сообщение
Посмотри в include`х головной файл типа stdlib.
Нет их там:
Код:
/*                      - STDLIB.H -

   The ANSI-defined 'standard' functions.

   $Revision: 38615 $

   Copyright 1986 - 1999 IAR Systems. All rights reserved.
*/

#ifndef _STDLIB_INCLUDED
#define _STDLIB_INCLUDED

#ifndef _SYSTEM_BUILD
  #pragma system_include
#endif

#include "sysmac.h"

#ifndef NULL
#define NULL    ((void*) 0 )
#endif

typedef struct
{
  int   quot;
  int   rem;
} div_t;

typedef struct
{
  long int      quot;
  long int      rem;
} ldiv_t;


#define RAND_MAX        32767

#define EXIT_SUCCESS    0
#define EXIT_FAILURE    1

#define MB_CUR_MAX      1

#if __IAR_SYSTEMS_ICC__ ‹ 2
#if __TID__ & 0x8000
#pragma function=intrinsic(0)
#endif
#endif

#ifndef MEMORY_ATTRIBUTE
#define MEMORY_ATTRIBUTE
#endif

#ifndef PTR_ATTRIBUTE
#define PTR_ATTRIBUTE
#endif

__INTRINSIC MEMORY_ATTRIBUTE void *malloc(size_t);

__INTRINSIC MEMORY_ATTRIBUTE void free(void *);

__INTRINSIC MEMORY_ATTRIBUTE void exit(int);

__INTRINSIC MEMORY_ATTRIBUTE void *calloc(size_t, size_t);

__INTRINSIC MEMORY_ATTRIBUTE void *realloc(void *, size_t);

__INTRINSIC MEMORY_ATTRIBUTE int  atoi(const char *);

__INTRINSIC MEMORY_ATTRIBUTE long atol(const char *);

__INTRINSIC MEMORY_ATTRIBUTE double atof(const char *);

__INTRINSIC MEMORY_ATTRIBUTE double strtod(const char *, char **);

__INTRINSIC MEMORY_ATTRIBUTE long int strtol(const char *, char **, int);

__INTRINSIC MEMORY_ATTRIBUTE unsigned long int strtoul(const char *, char **,
                                                       int);

__INTRINSIC MEMORY_ATTRIBUTE int rand(void);

__INTRINSIC MEMORY_ATTRIBUTE void srand(unsigned int);

__INTRINSIC MEMORY_ATTRIBUTE void abort(void);

__INTRINSIC MEMORY_ATTRIBUTE int abs(int);

__INTRINSIC MEMORY_ATTRIBUTE div_t div(int, int);

__INTRINSIC MEMORY_ATTRIBUTE long int labs(long int);

__INTRINSIC MEMORY_ATTRIBUTE ldiv_t ldiv(long int, long int);

__INTRINSIC MEMORY_ATTRIBUTE void *bsearch(const void *, const void *,
                                           size_t, size_t,
                                           int (*)(const void *,const void *));

__INTRINSIC MEMORY_ATTRIBUTE void qsort(void *, size_t, size_t,
                                        int (*)(const void *, const void *));

#if __IAR_SYSTEMS_ICC__ ‹ 2
#if __TID__ & 0x8000
#pragma function=default
#endif
#endif

#endif /* _STDLIB_INCLUDED */
kison вне форума  
Непрочитано 15.09.2009, 12:19  
shulgaserj
Частый гость
 
Регистрация: 16.08.2007
Сообщений: 13
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
shulgaserj на пути к лучшему
По умолчанию Re: IAR AVR

Сообщение от kison Посмотреть сообщение
Ну и вдогонку. Раз уж поставил ИАР, надо и потестировать. Миф о его высокой эффективности рассеялся в пух и прах. Судите сами:
Код:
#include ‹stdio.h›

char	buf[6];
unsigned int	var = 1234;
volatile unsigned char i = 0;

int		main(void)
{
sprintf(&buf[0],"%d",var);

while(1)
	{
	i++;
	}
}
Оптимизация по размеру FULL.
sprintf урезанный по максимуму - 7951 такт! 990 байт вся программа
sprintf medium - 1804 байта, 5574 такта.
sprintf полный - 5880 тактов, 3783 байт программа (странный результат, выполняется быстрее урезанного)
GCC урезанный sprintf ( все же куда больше соответствует стандарту, %i,%u работают) 1230 байт, 1550 тактов
Средний вариант - 1632 байта, 1320 тактов.
GCC - полный sprintf - 1376 тактов, 3162 байта, оптимизация также по размеру Os
Тоже странности есть со временем полного и урезанного. Хотя и не такие большие.
В принципе оптимизация не сильно и важна для библиотечный функций, они не оптимизируются в принципе ибо написаны на ассемблере. Все равно удивительно 1550 тактов против 7951...
Или для сравнения с равным функционалом - средняя функциональность
1320 тактов ГЦЦ, 5574 такта ИАР. Что то неладно в датском королевстве....
Работающие с ИАР - прокоментируйте плз, чего так медленно то? И это оптимизированные библиотечные функции???
Для желающих проверить самостоятельно использовались следующие версии:
ИАР 5.30.00
GCC 4.2.2
Добрый день или вечер!
Попробуйте следующее более простое написание вместо:
sprintf(&buf[0],"%d",var);

использовать -- sprintf(&buf,"%d",var);
По умолчанию &buf - это и есть начало массива по адресу, с нулевой ячейки.

По возможности ответьте так же как ранее
"sprintf урезанный по максимуму - 7951 такт! 990 байт вся программа"
Сколько тактов и байтов прога.
shulgaserj вне форума  
Непрочитано 15.09.2009, 12:21  
alberio
Гражданин KAZUS.RUN
 
Аватар для alberio
 
Регистрация: 08.07.2006
Сообщений: 582
Сказал спасибо: 76
Сказали Спасибо 90 раз(а) в 66 сообщении(ях)
alberio на пути к лучшему
Восклицание Re: IAR AVR

Ну пока компетентно комментировать не смогу - я еще новичок в иаре...

Но спринтф не работает, может потому он такой толстозадый?
Вы сравните ансишно написаный код...

И, действительно, хотелось бы услышать мнение опытных пользователь IAR, не обязательно AVR, "сердце" все равно практически тоже самое...
__________________
Sex, Druggs, Rock&Roll
alberio вне форума  
Непрочитано 15.09.2009, 12:24  
shulgaserj
Частый гость
 
Регистрация: 16.08.2007
Сообщений: 13
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
shulgaserj на пути к лучшему
По умолчанию Re: IAR AVR

Сообщение от kison Посмотреть сообщение
Нет их там:
Код:
/*                      - STDLIB.H -

   The ANSI-defined 'standard' functions.

   $Revision: 38615 $

   Copyright 1986 - 1999 IAR Systems. All rights reserved.
*/

#ifndef _STDLIB_INCLUDED
#define _STDLIB_INCLUDED

#ifndef _SYSTEM_BUILD
  #pragma system_include
#endif

#include "sysmac.h"

#ifndef NULL
#define NULL    ((void*) 0 )
#endif

typedef struct
{
  int   quot;
  int   rem;
} div_t;

typedef struct
{
  long int      quot;
  long int      rem;
} ldiv_t;


#define RAND_MAX        32767

#define EXIT_SUCCESS    0
#define EXIT_FAILURE    1

#define MB_CUR_MAX      1

#if __IAR_SYSTEMS_ICC__ ‹ 2
#if __TID__ & 0x8000
#pragma function=intrinsic(0)
#endif
#endif

#ifndef MEMORY_ATTRIBUTE
#define MEMORY_ATTRIBUTE
#endif

#ifndef PTR_ATTRIBUTE
#define PTR_ATTRIBUTE
#endif

__INTRINSIC MEMORY_ATTRIBUTE void *malloc(size_t);

__INTRINSIC MEMORY_ATTRIBUTE void free(void *);

__INTRINSIC MEMORY_ATTRIBUTE void exit(int);

__INTRINSIC MEMORY_ATTRIBUTE void *calloc(size_t, size_t);

__INTRINSIC MEMORY_ATTRIBUTE void *realloc(void *, size_t);

__INTRINSIC MEMORY_ATTRIBUTE int  atoi(const char *);

__INTRINSIC MEMORY_ATTRIBUTE long atol(const char *);

__INTRINSIC MEMORY_ATTRIBUTE double atof(const char *);

__INTRINSIC MEMORY_ATTRIBUTE double strtod(const char *, char **);

__INTRINSIC MEMORY_ATTRIBUTE long int strtol(const char *, char **, int);

__INTRINSIC MEMORY_ATTRIBUTE unsigned long int strtoul(const char *, char **,
                                                       int);

__INTRINSIC MEMORY_ATTRIBUTE int rand(void);

__INTRINSIC MEMORY_ATTRIBUTE void srand(unsigned int);

__INTRINSIC MEMORY_ATTRIBUTE void abort(void);

__INTRINSIC MEMORY_ATTRIBUTE int abs(int);

__INTRINSIC MEMORY_ATTRIBUTE div_t div(int, int);

__INTRINSIC MEMORY_ATTRIBUTE long int labs(long int);

__INTRINSIC MEMORY_ATTRIBUTE ldiv_t ldiv(long int, long int);

__INTRINSIC MEMORY_ATTRIBUTE void *bsearch(const void *, const void *,
                                           size_t, size_t,
                                           int (*)(const void *,const void *));

__INTRINSIC MEMORY_ATTRIBUTE void qsort(void *, size_t, size_t,
                                        int (*)(const void *, const void *));

#if __IAR_SYSTEMS_ICC__ ‹ 2
#if __TID__ & 0x8000
#pragma function=default
#endif
#endif

#endif /* _STDLIB_INCLUDED */
Тогда по поиску в include "ltoa" или "itoa" (перевернутая atoi)
и не понятно что у вас там включается "#include "sysmac.h"
макросы какие то?
shulgaserj вне форума  
Непрочитано 15.09.2009, 12:24  
kison
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: IAR AVR

Сообщение от shulgaserj Посмотреть сообщение
Попробуйте следующее более простое написание вместо:
sprintf(&buf[0],"%d",var);
использовать -- sprintf(&buf,"%d",var);
Это поменять шило на мыло. Никакой разницы нет вообще.
Сообщение от shulgaserj Посмотреть сообщение
Сколько тактов и байтов прога.
Я вроде для всех вариантов привел. Для минимума функциональности ИАР 990 байт 7951 такт. Найти схожий урезанный вариант у GCC не удалось - там в минимуме куда больше возможностей включая беззнаковый вывод. Но минимум 1230 байт 1550 тактов.
kison вне форума  
Непрочитано 15.09.2009, 12:31  
shulgaserj
Частый гость
 
Регистрация: 16.08.2007
Сообщений: 13
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
shulgaserj на пути к лучшему
По умолчанию Re: IAR AVR

Сообщение от kison Посмотреть сообщение
Это поменять шило на мыло. Никакой разницы нет вообще.

Я вроде для всех вариантов привел. Для минимума функциональности ИАР 990 байт 7951 такт. Найти схожий урезанный вариант у GCC не удалось - там в минимуме куда больше возможностей включая беззнаковый вывод. Но минимум 1230 байт 1550 тактов.
sprintf(&buf[0],"%d(u),"1234")" - Принудительно писать в buf начиная с нулевой ячейкой.
Хотя &buf - это и есть указатель адреса с нуловой ячейкой.
Ну если вам не тяжело!
shulgaserj вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
IAR for AVR kassiopay Микроконтроллеры, АЦП, память и т.д 5 27.03.2009 17:20
Глюк IAR C/EC++ Compiler for AVR 3.20 paha1956 Коллекция глюков 0 01.11.2006 17:31
IAR for AVR vasilij-kursikov Микроконтроллеры, АЦП, память и т.д 29 28.09.2006 18:14
IAR EW for Atmel AVR 4.12A Nikolajx Микроконтроллеры, АЦП, память и т.д 6 09.01.2006 15:18
[Решено] Ошибка в IAR C for AVR Lean Коллекция глюков 0 15.05.2003 11:34


Часовой пояс GMT +4, время: 06:33.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.