23.01.2014, 21:04
|
#71
|
Частый гость
Регистрация: 24.03.2008
Сообщений: 38
Сказал спасибо: 4,145
Сказали Спасибо 39 раз(а) в 13 сообщении(ях)
|
Re: CodeVisionAVR 2.60
Уважаемые! Так что насчет 2.60 или старше, есть у кого пролеченные?
|
|
|
|
24.01.2014, 09:41
|
#72
|
Почётный гражданин KAZUS.RU
Регистрация: 29.10.2006
Сообщений: 1,443
Сказал спасибо: 99
Сказали Спасибо 315 раз(а) в 231 сообщении(ях)
|
Re: CodeVisionAVR 2.60
Сообщение от Godzilla82
|
volatile принудительно заставляет компилятор хранить переменную в памяти.
|
Сообщение от _Артём_
|
Чушь порете...
|
Сообщение от _Артём_
|
Это вот (из мануала на CodeVision):
Цитата:
|
Variables declared as volatile will not be allocated to registers.
|
- просто особенности CV (а может и не только CV), не суть.
|
Вы уже сами себе противоречите. Или всё-таки первый раз сами чушь написали?
|
|
|
|
24.01.2014, 10:46
|
#73
|
Гражданин KAZUS.RU
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: CodeVisionAVR 2.60
Сообщение от Godzilla82
|
Вы уже сами себе противоречите.
|
В чём же я себе противоречу?
Сообщение от Godzilla82
|
Или всё-таки первый раз сами чушь написали?
|
Это вы про то где CV хранит volatile-переменные? Так это вопрос второстепенный.
|
|
|
|
24.01.2014, 12:00
|
#74
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: CodeVisionAVR 2.60
Сообщение от Godzilla82
|
Не совсем так. При наличии свободных регистров, он в них помещает глобальные переменные, сколько поместятся.
|
Докажите. Приведите пример любой сложности. Пусть будет даже 4 переменных, прерывание, две процедуры.
От вас требуется:
1. Исходник.
2. Ассемблерный файл.
3. Map файл.
|
|
|
|
24.01.2014, 14:46
|
#75
|
Почётный гражданин KAZUS.RU
Регистрация: 29.10.2006
Сообщений: 1,443
Сказал спасибо: 99
Сказали Спасибо 315 раз(а) в 231 сообщении(ях)
|
Re: CodeVisionAVR 2.60
Сообщение от SasaVitebsk
|
Докажите.
|
PHP код:
|
#include ‹mega16.h›
unsigned char a;
unsigned char b;
unsigned char c;
unsigned char d;
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
a++;
b--;
c=a+b;
d ^= 1;
}
void main(void)
{
DDRA = 0b00001111;
PORTA = 0b00000000;
DDRB = 0b00000000;
PORTB = 0b00000000;
DDRC = 0b00000000;
PORTC = 0b00000000;
DDRD = 0b00000000;
PORTD = 0b00000000;
// Timer Period: 0,016 ms
TCCR0 = (0‹‹WGM00) | (0‹‹COM01) | (0‹‹COM00) | (0‹‹WGM01) | (0‹‹CS02) | (0‹‹CS01) | (1‹‹CS00);
TCNT0 = 0x00;
OCR0 = 0x00;
TIMSK = (1‹‹TOIE0);
ACSR = (1‹‹ACD) | (0‹‹ACBG) | (0‹‹ACO) | (0‹‹ACI) | (0‹‹ACIE) | (0‹‹ACIC) | (0‹‹ACIS1) | (0‹‹ACIS0);
#asm("sei")
begin:
if(a == 100) PINA |= 1;
if(b == 200) PINA |= 2;
if(c == 75) PINA |= 4;
if(d == 1) PINA |= 8;
goto begin;
}
|
Код:
|
.DEF _a=R5
.DEF _b=R4
.DEF _c=R7
.DEF _d=R6
_timer0_ovf_isr:
ST -Y,R30
IN R30,SREG
ST -Y,R30
;a++;
INC R5
;b--;
DEC R4
;c=a+b;
MOV R30,R4
ADD R30,R5
MOV R7,R30
;d ^= 1;
LDI R30,LOW(1)
EOR R6,R30
LD R30,Y+
OUT SREG,R30
LD R30,Y+
RETI |
Код:
|
RAM Allocation [bytes]
Variable Address Size
--------------------------------------------------------------------------------
EEPROM Allocation [bytes]
Variable Address Size
--------------------------------------------------------------------------------
Register Allocation
Variable Register Size
--------------------------------------------------------------------------------
a R5 1
b R4 1
c R7 1
d R6 1
FLASH Allocation [words]
Function Address Size
--------------------------------------------------------------------------------
timer0_ovf_isr 0x00048 14 |
|
|
|
|
24.01.2014, 17:16
|
#76
|
Гражданин KAZUS.RU
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: CodeVisionAVR 2.60
Сообщение от Godzilla82
|
[PHP]
#include ‹mega16.h›
unsigned char a;
unsigned char b;
unsigned char c;
unsigned char d;
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
a++;
b--;
c=a+b;
d ^= 1;
}
[/CODE]
|
В проекте оптимизация включена? Если включена, то какой уровень?
|
|
|
|
24.01.2014, 17:33
|
#77
|
Почётный гражданин KAZUS.RU
Регистрация: 29.10.2012
Сообщений: 3,015
Сказал спасибо: 7
Сказали Спасибо 3,494 раз(а) в 1,783 сообщении(ях)
|
Re: CodeVisionAVR 2.60
Не просто оптимизация !
Цитата:
|
Собираешься размер сравнивать, так и настраивай на оптимизацию по размеру. Только у CV видел хитрые приемы оптимизации, когда три команды в подпрограмму выделяются, и вместо них один call добавляется. Ну и ret к тем трем командам. Так 2 байта экономят, а то что код в два раза медленней стал там не никто не волнуется. Ни IAR, ни GCC такой извращенной оптимизации не имеют. Да это уже и не оптимизация, а скорее метод сжатия без потерь, архив в своем роде. RLE по сути.
|
http://forum.ixbt.com/post.cgi?id=print:48:2550&page=5
|
|
|
|
24.01.2014, 17:53
|
#78
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: CodeVisionAVR 2.60
Арктур, сделайте пожалуйста переменные unsigned int. И одну переменную "a" сделайте long long int. И скиньте пожалуйста то же самое, если вас не затруднит
В данный момент получается что реальность не согласуется с их же документацией.
|
|
|
|
24.01.2014, 18:15
|
#79
|
Почётный гражданин KAZUS.RU
Регистрация: 29.10.2012
Сообщений: 3,015
Сказал спасибо: 7
Сказали Спасибо 3,494 раз(а) в 1,783 сообщении(ях)
|
Re: CodeVisionAVR 2.60
long long int версия CV не поддерживает. Сделал long int.
Код:
|
_timer0_ovf_isr:
ST -Y,R22
ST -Y,R23
ST -Y,R26
ST -Y,R27
ST -Y,R30
ST -Y,R31
IN R30,SREG
ST -Y,R30
a++;
LDI R26,LOW(_a)
LDI R27,HIGH(_a)
CALL __GETD1P_INC
__SUBD1N -1
CALL __PUTDP1_DEC
b--;
MOVW R30,R4
SBIW R30,1
MOVW R4,R30
c=a+b;
MOVW R30,R4
LDS R26,_a
LDS R27,_a+1
ADD R30,R26
ADC R31,R27
MOVW R6,R30
d ^= 1;
LDI R30,LOW(1)
EOR R8,R30
LD R30,Y+
OUT SREG,R30
LD R31,Y+
LD R30,Y+
LD R27,Y+
LD R26,Y+
LD R23,Y+
LD R22,Y+
RETI
-----------------------
.MACRO __SUBD1N
SUBI R30,LOW(@0)
SBCI R31,HIGH(@0)
SBCI R22,BYTE3(@0)
SBCI R23,BYTE4(@0)
__GETD1P_INC:
LD R30,X+
LD R31,X+
LD R22,X+
LD R23,X+
RET
__PUTDP1_DEC:
ST -X,R23
ST -X,R22
ST -X,R31
ST -X,R30
RET |
Код:
|
RAM Allocation
Variable Address Size
--------------------------------------------------------
a 0x0160 4
EEPROM Allocation
Variable Address Size
--------------------------------------------------------
Register Allocation
Variable Register Size
--------------------------------------------------------
b R4,R5 2
c R6,R7 2
d R8,R9 2 |
Последний раз редактировалось Арктур; 24.01.2014 в 18:31.
|
|
|
|
24.01.2014, 18:42
|
#80
|
Гражданин KAZUS.RU
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: CodeVisionAVR 2.60
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 13:18.
|
|