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

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

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

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

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

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


Ответ
Опции темы
Непрочитано 31.01.2014, 08:19   #201
winner_07
Прохожий
 
Регистрация: 03.05.2007
Сообщений: 1
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
winner_07 на пути к лучшему
По умолчанию Re: CodeVisionAVR 2.60

Ребята, есть у кого CV 2.05.6 c таблеткой?
Скиньте приззз на мыло winner_udm@mail.ru
Реклама:
winner_07 вне форума   Ответить с цитированием
Непрочитано 31.01.2014, 09:52   #202
Romsb
Частый гость
 
Регистрация: 14.02.2010
Адрес: Казахстан, Алмата.
Сообщений: 32
Сказал спасибо: 67
Сказали Спасибо 18 раз(а) в 10 сообщении(ях)
Romsb на пути к лучшему
По умолчанию Re: CodeVisionAVR 2.60

Сообщение от winner_07 Посмотреть сообщение
Ребята, есть у кого CV 2.05.6 c таблеткой?
Скиньте приззз на мыло winner_udm@mail.ru
И мне тоже пожалуйста, если можно Roman63g@gmail.com
Romsb вне форума   Ответить с цитированием
Непрочитано 31.01.2014, 11:46   #203
olc0267
Почётный гражданин KAZUS.RU
 
Регистрация: 06.08.2008
Адрес: Ярославль
Сообщений: 1,505
Сказал спасибо: 115
Сказали Спасибо 1,314 раз(а) в 548 сообщении(ях)
olc0267 на пути к лучшему
По умолчанию Re: CodeVisionAVR 2.60

Сообщение от Godzilla82 Посмотреть сообщение
В CV 2.6 (да и в 2.0.3) приведённый вами код работает корректно.

Так что фигню пишите вы.
Дело не в printf. tempora намекал, что sizeof() в CV работает некорректно.
Судя по тому что sizeof(xlattable)/sizeof(*xlattable) получилось равным единице, в обоих случаях функция вернула какую-то одинаковую фигню. Фигня поделилась на себя же и получилась 1.
Но, судя по тому, что у Вас всё заработало нормально в версии 2.0.3, то баг этот уже несколько лет как пофиксен.
tempora ведь не говорит, какая у него версия CV. Или говорил где-то?
Интересно, какой объём памяти занимает такая конструкция - sizeof(xlattable)/sizeof(*xlattable)? Что хорошо в ПК, не всегда хорошо в МК. Я бы не поленился конкретно в этом случае константу вбить, и фиг с ней, с универсальностью кода. Но тогда бы не обнаружил этот баг.
olc0267 вне форума   Ответить с цитированием
Непрочитано 31.01.2014, 11:51   #204
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: CodeVisionAVR 2.60

Сообщение от olc0267 Посмотреть сообщение
Тогда почему так много страниц наплодили по поводу volatile?
Я всего лишь хотел показать, что в опциях компилятора можно включить или выключить необходимость применения volatile.
Вот видите, Godzilla82 как люди уже интерпретируют... ))

2 olc0267:
1. Нельзя включать или выключать volatile. Так как это квалификатор памяти определённый стандартом языка Си. И CV не делает то, что вы ему прописываете.
2. Вы включаете/ выключаете размещение глобальных переменных в регистрах. Это не имеет ни малейшего отношения к volatile. А ввиду малости свободных регистров в процессоре, то вообще существенно не влияет на производительность в сколь-нибудь сложном проекте.
SasaVitebsk вне форума   Ответить с цитированием
Непрочитано 31.01.2014, 12:02   #205
olc0267
Почётный гражданин KAZUS.RU
 
Регистрация: 06.08.2008
Адрес: Ярославль
Сообщений: 1,505
Сказал спасибо: 115
Сказали Спасибо 1,314 раз(а) в 548 сообщении(ях)
olc0267 на пути к лучшему
По умолчанию Re: CodeVisionAVR 2.60

Сообщение от SasaVitebsk Посмотреть сообщение
Вот видите, Godzilla82 как люди уже интерпретируют... ))


2. Вы включаете/ выключаете размещение глобальных переменных в регистрах. Это не имеет ни малейшего отношения к volatile.
Это я понимаю. Но применительно к МК AVR, всё, что делает volatile при объявлении глобальной переменной - запрещает её размещение в регистрах. И не более того. Тоже самое я могу сделать щелчком мыши сразу для всех переменных, и не париться на эту тему. Два способа получения одного результата.
olc0267 вне форума   Ответить с цитированием
Непрочитано 31.01.2014, 13:00   #206
ut1wpr
Почётный гражданин KAZUS.RU
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: CodeVisionAVR 2.60

Сообщение от olc0267 Посмотреть сообщение
Но применительно к МК AVR, всё, что делает volatile при объявлении глобальной переменной - запрещает её размещение в регистрах.
Этот квалификатор - всего лишь "инструкция" компилятору НИЧЕГО НЕ ВЫТВОРЯТЬ с переменной. Где бы она ни находилась. volatile и размещение переменных - разные вещи. Побольше доверяйте компилятору и поменьше заглядывайте, куда чего он размещает. Компиляторы умнее нас, правда им иногда трудно объяснить, что же мы хотим от них. Особенно, если сами этого не знаем.
__________________
С уважением,
Vic / ut1wpr
ut1wpr вне форума   Ответить с цитированием
Непрочитано 31.01.2014, 14:13   #207
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: CodeVisionAVR 2.60

Сообщение от olc0267 Посмотреть сообщение
Это я понимаю.
В том то и дело, что непонимаете.
Переменная расположенная в регистрах, как раз не требует применения volatile. )) Причина в том, что не требуется пересылка.

Godzilla82 давайте попробуем чуть чуть изменить ваш тестовый проект.
Разместим ваши переменные в памяти, а в голове изобразим это.
Код:
	for(;;)
	{
		if(a == 100)    PINA |= 1;
		b = 2000;
		b += PINA;
		for(char i=0; i‹200; i++)
		{
			if(b › TCNT1)
			{
			  PINA |= 2;
			  break;
			}
		}
		if(c == 75)     PINA |= 4; 
		if(d == 1)      PINA |= 8; 
	}
Дайте мне пожалуйста листинг откомпиленной проги только для головы если b объявлена без volatile и с ним.
SasaVitebsk вне форума   Ответить с цитированием
Непрочитано 31.01.2014, 14:49   #208
olc0267
Почётный гражданин KAZUS.RU
 
Регистрация: 06.08.2008
Адрес: Ярославль
Сообщений: 1,505
Сказал спасибо: 115
Сказали Спасибо 1,314 раз(а) в 548 сообщении(ях)
olc0267 на пути к лучшему
По умолчанию Re: CodeVisionAVR 2.60

Сообщение от ut1wpr Посмотреть сообщение
Компиляторы умнее нас, правда им иногда трудно объяснить, что же мы хотим от них. Особенно, если сами этого не знаем.
Признак искусственного интеллекта - умение угадать, чего хочет человек.
Маленький тест. Берём последнюю версию Atmel Studio - 6.1. Только сегодня с оф. сайта скачал.
Пишем два варианта кода.

Код:
#include ‹avr/io.h›

void del ( int volatile a)
{
	while (a) --a;
}

int main(void)
{
    while(1)
		del(100);
}
и

Код:
#include ‹avr/io.h›

void del ( int a)
{
	while (a) --a;
}

int main(void)
{
    while(1)
		del(100);
}
Вроде бы всем понятно, что я хочу сделать, никому объяснять, наверное, не надо.
Смотрим, как откомпилил Atmel Studio.
1-й вариант.

Код:
#include ‹avr/io.h›

void del ( int volatile a)
{
  6c:	cf 93       	push	r28
  6e:	df 93       	push	r29
  70:	00 d0       	rcall	.+0      	; 0x72 ‹del+0x6›
  72:	cd b7       	in	r28, 0x3d	; 61
  74:	de b7       	in	r29, 0x3e	; 62
  76:	9a 83       	std	Y+2, r25	; 0x02
  78:	89 83       	std	Y+1, r24	; 0x01
	while (a) --a;
  7a:	89 81       	ldd	r24, Y+1	; 0x01
  7c:	9a 81       	ldd	r25, Y+2	; 0x02
  7e:	89 2b       	or	r24, r25
  80:	49 f0       	breq	.+18     	; 0x94 ‹del+0x28›
  82:	89 81       	ldd	r24, Y+1	; 0x01
  84:	9a 81       	ldd	r25, Y+2	; 0x02
  86:	01 97       	sbiw	r24, 0x01	; 1
  88:	9a 83       	std	Y+2, r25	; 0x02
  8a:	89 83       	std	Y+1, r24	; 0x01
  8c:	89 81       	ldd	r24, Y+1	; 0x01
  8e:	9a 81       	ldd	r25, Y+2	; 0x02
  90:	89 2b       	or	r24, r25
  92:	b9 f7       	brne	.-18     	; 0x82 ‹del+0x16›
}
  94:	0f 90       	pop	r0
  96:	0f 90       	pop	r0
  98:	df 91       	pop	r29
  9a:	cf 91       	pop	r28
  9c:	08 95       	ret

0000009e ‹main›:

int main(void)
{
    while(1)
		del(100);
  9e:	84 e6       	ldi	r24, 0x64	; 100
  a0:	90 e0       	ldi	r25, 0x00	; 0
  a2:	0e 94 36 00 	call	0x6c	; 0x6c ‹del›
  a6:	fb cf       	rjmp	.-10     	; 0x9e ‹main›

000000a8 ‹_exit›:
  a8:	f8 94       	cli

000000aa ‹__stop_program›:
  aa:	ff cf       	rjmp	.-2      	; 0xaa ‹__stop_program›
и 2-й вариант.

Код:
0000006c ‹main›:
{
	while (a) a--;
}

int main(void)
{
  6c:	ff cf       	rjmp	.-2      	; 0x6c ‹main›

0000006e ‹_exit›:
  6e:	f8 94       	cli

00000070 ‹__stop_program›:
  70:	ff cf       	rjmp	.-2      	; 0x70 ‹__stop_program›
Здесь он вообще всё похерил, и не стал ничего делать.

А вот что сделал CV для обоих вариантов абсолютно одинаково

Код:
                 ;void del ( int a)
                 ; 0000 0029 {
                 _del:
                 ; 0000 002A while (a) a--;
                 ;	a -› Y+0
                 _0x3:
000049 81e8      	LD   R30,Y
00004a 81f9      	LDD  R31,Y+1
00004b 9730      	SBIW R30,0
00004c f021      	BREQ _0x5
00004d 9731      	SBIW R30,1
00004e 83e8      	ST   Y,R30
00004f 83f9      	STD  Y+1,R31
000050 cff8      	RJMP _0x3
                 _0x5:
                 ; 0000 002B }
000051 9622      	ADIW R28,2
000052 9508      	RET

......

                 ; 0000 009D while(1)
                 _0x6:
                 ; 0000 009E     del(100);
000080 e6e4      	LDI  R30,LOW(100)
000081 e0f0      	LDI  R31,HIGH(100)
000082 93fa      	ST   -Y,R31
000083 93ea      	ST   -Y,R30
000084 dfc4      	RCALL _del
000085 cffa      	RJMP _0x6
                 ; 0000 009F }
                 _0x9:
000086 cfff      	RJMP _0x9
Теперь два вопроса :
1. Почему CV не только смог догадаться, чего я хочу, но и сделал это более рационально?
2. Какой из компиляторов умнее?
olc0267 вне форума   Ответить с цитированием
Непрочитано 31.01.2014, 14:53   #209
olc0267
Почётный гражданин KAZUS.RU
 
Регистрация: 06.08.2008
Адрес: Ярославль
Сообщений: 1,505
Сказал спасибо: 115
Сказали Спасибо 1,314 раз(а) в 548 сообщении(ях)
olc0267 на пути к лучшему
По умолчанию Re: CodeVisionAVR 2.60

Сообщение от SasaVitebsk Посмотреть сообщение
В том то и дело, что непонимаете.
Переменная расположенная в регистрах, как раз не требует применения volatile. )) Причина в том, что не требуется пересылка.
Не понял логики. Вроде бы причинно-следственная связь нарушена. Всё наоборот - если я применил volatile, то переменная не попадёт в регистр, если не применил - попадёт.
Ну да ладно. Как говорил один мой знакомый фотограф, "вам, большим фотохудожникам виднее".

Последний раз редактировалось olc0267; 31.01.2014 в 15:08.
olc0267 вне форума   Ответить с цитированием
Непрочитано 31.01.2014, 15:00   #210
Godzilla82
Почётный гражданин KAZUS.RU
 
Регистрация: 29.10.2006
Сообщений: 1,446
Сказал спасибо: 99
Сказали Спасибо 317 раз(а) в 233 сообщении(ях)
Godzilla82 на пути к лучшему
Сообщение Re: CodeVisionAVR 2.60

Сообщение от SasaVitebsk Посмотреть сообщение
Дайте мне пожалуйста листинг откомпиленной проги только для головы если b объявлена без volatile и с ним.
int a,b,c,d:

Код:
;for(;;)
_0x4:
;if(a == 100)    PINA |= 1;
	LDI  R30,LOW(100)
	LDI  R31,HIGH(100)
	CP   R30,R4
	CPC  R31,R5
	BRNE _0x6
	SBI  0x19,0
;b = 2000;
_0x6:
	LDI  R30,LOW(2000)
	LDI  R31,HIGH(2000)
	MOVW R6,R30
;b += PINA;
	IN   R30,0x19
	LDI  R31,0
	ADD  R6,R30
	ADC  R7,R31
;for(i=0; i‹200; i++)    {
	LDI  R17,LOW(0)
_0x8:
	CPI  R17,200
	BRSH _0x9
;if(b › TCNT1)   {
	IN   R30,0x2C
	IN   R31,0x2C+1
	CP   R30,R6
	CPC  R31,R7
	BRSH _0xA
;PINA |= 2;
	SBI  0x19,1
;break;
	RJMP _0x9
;}
_0xA:
	SUBI R17,-1
	RJMP _0x8
_0x9:
;if(c == 75)     PINA |= 4;
	LDI  R30,LOW(75)
	LDI  R31,HIGH(75)
	CP   R30,R8
	CPC  R31,R9
	BRNE _0xB
	SBI  0x19,2
;if(d == 1)      PINA |= 8;
_0xB:
	LDI  R30,LOW(1)
	LDI  R31,HIGH(1)
	CP   R30,R10
	CPC  R31,R11
	BRNE _0xC
	SBI  0x19,3
;}
_0xC:
	RJMP _0x4
volatile int a,b,c,d:
Код:
;for(;;)
_0x4:
;{
;if(a == 100)    PINA |= 1;
	LDS  R26,_a
	LDS  R27,_a+1
	CPI  R26,LOW(0x64)
	LDI  R30,HIGH(0x64)
	CPC  R27,R30
	BRNE _0x6
	SBI  0x19,0
;b = 2000;
_0x6:
	LDI  R30,LOW(2000)
	LDI  R31,HIGH(2000)
	STS  _b,R30
	STS  _b+1,R31
;b += PINA;
	IN   R30,0x19
	LDS  R26,_b
	LDS  R27,_b+1
	LDI  R31,0
	ADD  R30,R26
	ADC  R31,R27
	STS  _b,R30
	STS  _b+1,R31
;for(i=0; i‹200; i++)    {
	LDI  R17,LOW(0)
_0x8:
	CPI  R17,200
	BRSH _0x9
;if(b › TCNT1)   {
	IN   R30,0x2C
	IN   R31,0x2C+1
	LDS  R26,_b
	LDS  R27,_b+1
	CP   R30,R26
	CPC  R31,R27
	BRSH _0xA
;PINA |= 2;
	SBI  0x19,1
;break;
	RJMP _0x9
;}
;}
_0xA:
	SUBI R17,-1
	RJMP _0x8
_0x9:
;if(c == 75)     PINA |= 4;
	LDS  R26,_c
	LDS  R27,_c+1
	CPI  R26,LOW(0x4B)
	LDI  R30,HIGH(0x4B)
	CPC  R27,R30
	BRNE _0xB
	SBI  0x19,2
;if(d == 1)      PINA |= 8;
_0xB:
	LDS  R26,_d
	LDS  R27,_d+1
	SBIW R26,1
	BRNE _0xC
	SBI  0x19,3
;}
_0xC:
	RJMP _0x4
int a,c,d;
volatile int b;
Код:
;for(;;)
_0x4:
;{
;if(a == 100)    PINA |= 1;
	LDI  R30,LOW(100)
	LDI  R31,HIGH(100)
	CP   R30,R4
	CPC  R31,R5
	BRNE _0x6
	SBI  0x19,0
;b = 2000;
_0x6:
	LDI  R30,LOW(2000)
	LDI  R31,HIGH(2000)
	STS  _b,R30
	STS  _b+1,R31
;b += PINA;
	IN   R30,0x19
	LDS  R26,_b
	LDS  R27,_b+1
	LDI  R31,0
	ADD  R30,R26
	ADC  R31,R27
	STS  _b,R30
	STS  _b+1,R31
;for(i=0; i‹200; i++)    {
	LDI  R17,LOW(0)
_0x8:
	CPI  R17,200
	BRSH _0x9
;if(b › TCNT1)   {
	IN   R30,0x2C
	IN   R31,0x2C+1
	LDS  R26,_b
	LDS  R27,_b+1
	CP   R30,R26
	CPC  R31,R27
	BRSH _0xA
;PINA |= 2;
	SBI  0x19,1
;break;
	RJMP _0x9
;}
;}
_0xA:
	SUBI R17,-1
	RJMP _0x8
_0x9:
;if(c == 75)     PINA |= 4;
	LDI  R30,LOW(75)
	LDI  R31,HIGH(75)
	CP   R30,R6
	CPC  R31,R7
	BRNE _0xB
	SBI  0x19,2
;if(d == 1)      PINA |= 8;
_0xB:
	LDI  R30,LOW(1)
	LDI  R31,HIGH(1)
	CP   R30,R8
	CPC  R31,R9
	BRNE _0xC
	SBI  0x19,3
;}
_0xC:
	RJMP _0x4

Последний раз редактировалось Godzilla82; 31.01.2014 в 15:05.
Godzilla82 вне форума   Ответить с цитированием
Ответ

Закладки


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

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:36.


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