Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум


 
Опции темы

CodeVisionAVR 2.60

Непрочитано 29.01.2014, 23:06  
tempora
Почётный гражданин KAZUS.RUN
 
Регистрация: 10.01.2007
Сообщений: 3,411
Сказал спасибо: 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.RUN
 
Регистрация: 29.10.2006
Сообщений: 1,449
Сказал спасибо: 99
Сказали Спасибо 318 раз(а) в 234 сообщении(ях)
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.RUN
 
Регистрация: 29.10.2006
Сообщений: 1,449
Сказал спасибо: 99
Сказали Спасибо 318 раз(а) в 234 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: CodeVisionAVR 2.60

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

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

После зануления указанных массивов длительность импульсов остаётся постоянной.
Godzilla82 вне форума  
Непрочитано 30.01.2014, 09:54  
vgtmaster
Прописка
 
Регистрация: 28.04.2008
Сообщений: 141
Сказал спасибо: 11
Сказали Спасибо 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.RUN
 
Регистрация: 29.10.2006
Сообщений: 1,449
Сказал спасибо: 99
Сказали Спасибо 318 раз(а) в 234 сообщении(ях)
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
Сообщений: 141
Сказал спасибо: 11
Сказали Спасибо 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
Сообщений: 141
Сказал спасибо: 11
Сказали Спасибо 18 раз(а) в 9 сообщении(ях)
vgtmaster на пути к лучшему
По умолчанию Re: CodeVisionAVR 2.60

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

Сообщение от tempora Посмотреть сообщение
Если это мне, то поздновато - я так уже лет *дцать и делаю.
Нет это не Вам. Это для начинающих
SasaVitebsk вне форума  
Непрочитано 30.01.2014, 13:09  
olc0267
Почётный гражданин KAZUS.RUN
 
Регистрация: 06.08.2008
Адрес: Ярославль
Сообщений: 1,504
Сказал спасибо: 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, время: 02:37.


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