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

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

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

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

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

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


 
Опции темы
Непрочитано 29.01.2014, 23:06  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: CodeVisionAVR 2.60


Замечательный ответ, полностью подтверждающий высказанные ранее оценки.
Реклама:
__________________
There's always more than one way to skin a cat.
tempora вне форума  
Непрочитано 29.01.2014, 23:40  
Godzilla82
Почётный гражданин KAZUS.RU
 
Регистрация: 29.10.2006
Сообщений: 1,443
Сказал спасибо: 99
Сказали Спасибо 315 раз(а) в 231 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: CodeVisionAVR 2.60

Сообщение от makser1 Посмотреть сообщение
Тестировал я компиляторы IAR MikroC CVAVR на выполнении FFT
Интересно стало. Проверил на CV и WinAVR.

как вы проверяли время выполнения? по какой методике?

Без обнуления массивов mr[],mi[] время выполнения каждый раз разное.

При предварительном обнулении массивов перед расчётом:
CV: 985 мс
GCC: 545 мс
это на частоте 8 МГц.

Не вникал в алгоритм. Соответственно вопрос: какой критерий правильности выполнения расчётов. Что должно получится в итоге.
Godzilla82 вне форума  
Непрочитано 30.01.2014, 05:59  
makser1
Прописка
 
Регистрация: 14.04.2009
Сообщений: 103
Сказал спасибо: 17
Сказали Спасибо 11 раз(а) в 10 сообщении(ях)
makser1 на пути к лучшему
По умолчанию Re: CodeVisionAVR 2.60

Там проект в proteus, в цикле выполняется целочисленное 16бит fft, значение массивов данных ни как не влияет на скорость. Осциллографом смотрим порт, он изменяется с каждый раз после исполнения fft, по исходнику видно, и мне интересна скорость gcc avr.
makser1 вне форума  
Непрочитано 30.01.2014, 08:35  
Godzilla82
Почётный гражданин KAZUS.RU
 
Регистрация: 29.10.2006
Сообщений: 1,443
Сказал спасибо: 99
Сказали Спасибо 315 раз(а) в 231 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: CodeVisionAVR 2.60

Сообщение от makser1 Посмотреть сообщение
значение массивов данных ни как не влияет на скорость.
В том-то и дело. Без зануления массивов импульсы (по крайней мере на осцилографе) с разной длительностью. Причём от импульса к импульсу она в разы отличается.

Что для микроси, что для CV, что для GCC.

После зануления указанных массивов длительность импульсов остаётся постоянной.
Godzilla82 вне форума  
Непрочитано 30.01.2014, 09:54  
vgtmaster
Прописка
 
Регистрация: 28.04.2008
Сообщений: 134
Сказал спасибо: 7
Сказали Спасибо 18 раз(а) в 9 сообщении(ях)
vgtmaster на пути к лучшему
По умолчанию Re: CodeVisionAVR 2.60

Господа подскажите, почему данную функцию delay в VC можно организовать а вот в WinAvr она не работает. Или я что то не то делаю?

#include ‹avr\io.h›
#include ‹avr\interrupt.h›
#include ‹math.h›
#define F_CPU 8000000UL
#include ‹avr/delay.h›

void delay(int);


//********************************************
// Описание функции delay обязательно
//********************************************
void delay (int m)
{int j;
for(j=0;j‹m;j++){}
}
//*********** Конец функции Delay ************


// Timer1 output compare A interrupt service routine
//interrupt ISR(TIMER1_COMPA_vect)

ISR(TIMER1_COMPA_vect)
{

PORTD^=1;

}


int main(void)
{
DDRD = 0xFF;
PORTD = 0x00;

DDRB = 0x0F;
PORTB = 0x00;

// Timer/Counter 1 Interrupt(s) initialization
TIMSK1=(0‹‹ICIE1) | (0‹‹OCIE1B) | (1‹‹OCIE1A) | (0‹‹TOIE1);

TCCR1A = 0x00;
TCCR1B = 0x0A;

// Global enable interrupts
sei(); //глобально разрешаем прерывания


while (1)
{

PORTB = 0x01;
delay(100);
PORTB = 0x00;
delay(100);

}
}
vgtmaster вне форума  
Непрочитано 30.01.2014, 10:04  
Godzilla82
Почётный гражданин KAZUS.RU
 
Регистрация: 29.10.2006
Сообщений: 1,443
Сказал спасибо: 99
Сказали Спасибо 315 раз(а) в 231 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: CodeVisionAVR 2.60

Сообщение от vgtmaster Посмотреть сообщение
Господа подскажите, почему данную функцию delay в VC можно организовать а вот в WinAvr она не работает. Или я что то не то делаю?

Код:
void delay (int m)
{int j;    
 for(j=0;j‹m;j++){}    
 }
Потому, что WinAVR умный. Он оптимизирует программу. Смотрит, что переменная j нигде не используется, тело цикла пустое. И, скорее всего, выбрасывает весь цикл. Для этого попробуйте описать переменную j с квалификатором volatile или так:

Код:
void delay (int m)
{
int j;
for(j=0; j‹m; j++)	{
			asm volatile ("nop");
			}
}
А зачем вам самому писать такие функции?
_delay_ms(), _delay_us() вас не устраивают (для WinAVR)?

Последний раз редактировалось Godzilla82; 30.01.2014 в 10:10.
Godzilla82 вне форума  
Непрочитано 30.01.2014, 10:51  
vgtmaster
Прописка
 
Регистрация: 28.04.2008
Сообщений: 134
Сказал спасибо: 7
Сказали Спасибо 18 раз(а) в 9 сообщении(ях)
vgtmaster на пути к лучшему
По умолчанию Re: CodeVisionAVR 2.60

Сообщение от Godzilla82 Посмотреть сообщение
Потому, что WinAVR умный. Он оптимизирует программу. Смотрит, что переменная j нигде не используется, тело цикла пустое. И, скорее всего, выбрасывает весь цикл. Для этого попробуйте описать переменную j с квалификатором volatile или так:

Код:
void delay (int m)
{
int j;
for(j=0; j‹m; j++)	{
			asm volatile ("nop");
			}
}
А зачем вам самому писать такие функции?
_delay_ms(), _delay_us() вас не устраивают (для WinAVR)?
Дело в том, что мне необходимо менять delay в динамике, например delay_ms (i); в VC работает и вопросов нет, а вот WinAvr _delay_ms(i); уже не работает, так вот, я хотел сделать свою функцию, а она оказывается не хочет работать в WinAvr почему? не знаю.
vgtmaster вне форума  
Непрочитано 30.01.2014, 11:05  
vgtmaster
Прописка
 
Регистрация: 28.04.2008
Сообщений: 134
Сказал спасибо: 7
Сказали Спасибо 18 раз(а) в 9 сообщении(ях)
vgtmaster на пути к лучшему
По умолчанию Re: CodeVisionAVR 2.60

Godzilla82 огромное вам спасибо, все получилось. Вот что значить, век живи и век учись.
vgtmaster вне форума  
Непрочитано 30.01.2014, 12:21  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: CodeVisionAVR 2.60

Сообщение от tempora Посмотреть сообщение
Если это мне, то поздновато - я так уже лет *дцать и делаю.
Нет это не Вам. Это для начинающих
SasaVitebsk вне форума  
Непрочитано 30.01.2014, 13:09  
olc0267
Почётный гражданин KAZUS.RU
 
Регистрация: 06.08.2008
Адрес: Ярославль
Сообщений: 1,505
Сказал спасибо: 115
Сказали Спасибо 1,314 раз(а) в 548 сообщении(ях)
olc0267 на пути к лучшему
По умолчанию Re: CodeVisionAVR 2.60

Тут целую "Войну и мир" про CV написали.
Если я понял правильно тему спора, то я тогда не понял, о чём спор.
Я сгенерил в CV минимальный проект для ATMega32 с таким кодом


Код:
#include ‹mega32.h›
char a;
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
a++;
}

void main(void)
{
            ....................

while (1)
      {
      if (a==100)  a=0;
      }
}
Компилю, получаю

Код:
                 _timer0_ovf_isr:
000048 93ea      	ST   -Y,R30
000049 b7ef      	IN   R30,SREG
                 ; 0000 001D a++;
00004a 9453      	INC  R5
                 ; 0000 001E }
00004b bfef      	OUT  SREG,R30
00004c 91e9      	LD   R30,Y+
00004d 9518      	RETI
 
..................................................  ...

                 ;void main(void)
                 ; 0000 0023 {
                 _main:
..................................................  ......

                 ; 0000 008B 
                 ; 0000 008C while (1)
                 _0x3:
                 ; 0000 008D       {
                 ; 0000 008E       if (a==100) a=0;
000078 e6e4      	LDI  R30,LOW(100)
000079 15e5      	CP   R30,R5
00007a f409      	BRNE _0x6
00007b 2455      	CLR  R5
                 ; 0000 008F       }
                 _0x6:
00007c cffb      	RJMP _0x3
                 ; 0000 0090 }
                 _0x7:
00007d cfff      	RJMP _0x7
Меняю "char a;" на "volatile char a;"

Получаю

Код:
                 _timer0_ovf_isr:
000048 93ea      	ST   -Y,R30
000049 b7ef      	IN   R30,SREG
00004a 93ea      	ST   -Y,R30
                 ; 0000 001D a++;
00004b 91e0 0260 	LDS  R30,_a
00004d 5fef      	SUBI R30,-LOW(1)
00004e 93e0 0260 	STS  _a,R30
                 ; 0000 001E }
000050 91e9      	LD   R30,Y+
000051 bfef      	OUT  SREG,R30
000052 91e9      	LD   R30,Y+
000053 9518      	RETI
..................................................  .............................
                 ;void main(void)
                 ; 0000 0023 {
                 _main:
..................................................  ..............................

                 ; 0000 008C while (1)
                 _0x3:
                 ; 0000 008D       {
                 ; 0000 008E       if (a==100) a=0;
00007e 91a0 0260 	LDS  R26,_a
000080 36a4      	CPI  R26,LOW(0x64)
000081 f419      	BRNE _0x6
000082 e0e0      	LDI  R30,LOW(0)
000083 93e0 0260 	STS  _a,R30
                 ; 0000 008F       }
                 _0x6:
000085 cff8      	RJMP _0x3
                 ; 0000 0090 }
                 _0x7:
000086 cfff      	RJMP _0x7
Опять убираю volataile, иду на вкладку
Project-›Configure-›C Compiler. Снимаю галочку "Automatic Global Register Allocation". Опять компилю, и получаю код asm точ-в-точ такой же, как и с "volatile".
Говорите по CV что хотите, а мне он нравится. Могучая штука, позволяет сэкономить огромное количество времени, освобождая от необходимости писать стандартные куски кода.
У меня - V2.05 .
Миниатюры:
Нажмите на изображение для увеличения
Название: CV.GIF
Просмотров: 41
Размер:	34.1 Кб
ID:	58232  
olc0267 вне форума  
 

Закладки
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
CodeVisionAVR selevo Embedd С 11 26.02.2016 22:16
SD и CodeVisionAvr 2.04.4a sersne Микроконтроллеры, АЦП, память и т.д 29 24.03.2010 18:39
CodeVisionAVR V2.03.2 dimonbest Микроконтроллеры, АЦП, память и т.д 253 29.09.2009 22:37
New CodeVisionAVR 1.25.8 dimonbest Микроконтроллеры, АЦП, память и т.д 15 07.02.2008 12:56
Help CodeVisionAVR Serg79 Микроконтроллеры, АЦП, память и т.д 3 15.12.2005 23:32


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot