реклама на сайте
подробности

 
 
> CodeVision глюит?, компилит билеберду
AndreyVN
сообщение Jan 13 2009, 18:26
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 754
Регистрация: 29-06-06
Из: Volgograd
Пользователь №: 18 458



Всем привет!

Народ, у меня какая-то фигня при присвоении значений регистрам таймера:
Цитата
GICR = 0x40;
TCNT0=0x00;
TCCR0=0x02;
TIMSK = 0x01;


Посмотрите, что творит компилятор!!! Вместо LDI XX OUT XX Появляются RCALL в никуда !

190: GICR = 0x40;
+000001FB: E4E0 LDI R30,0x40 Load immediate
+000001FC: BFEB OUT 0x3B,R30 Out to I/O location
194: TCNT0=0x00;
+000001FD: D3A8 RCALL PC+0x03A9 Relative call subroutine
203: TIMSK = 0x01;
+000001FE: D3AC RCALL PC+0x03AD Relative call subroutine

С этим компилятором CVAVR 1.23.8d работую не первый год, ничего подобного раньше не было.
Процессор выбран правильно, имена TCNT0, TCCR0 ... в заголовочных файлах находятся.

Куда рыть???
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Goodefine
сообщение Jan 14 2009, 07:33
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 6-08-07
Из: Приднестровье, Тирасполь
Пользователь №: 29 581



Это творчество оптимизатора компилятора. С оптимизацией по размеру:
Код
204 ;///                Здесь компилируется с ошибкой
205 ;// Счетный регистр (инкрементируется таймером)
206 ;TCNT0=0x00;
        RCALL SUBOPT_0x0
...
;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES, CODE SIZE REDUCTION:1 WORDS (!!!!!)
SUBOPT_0x0:
         LDI  R30,LOW(0)
         OUT  0x32,R30
        LDI  R30,LOW(2)
         OUT  0x33,R30
        RET
...

С оптимизацией по скорости:
Код
; ///                Здесь компилируется с ошибкой
; // Счетный регистр (инкрементируется таймером)
;  TCNT0=0x00;
    LDI  R30,LOW(0)
    OUT  0x32,R30
...

Если нужно по размеру, но без выкрутасов компилятора, лечится просто:
Код
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#pragma optsize-
///                Здесь компилируется с ошибкой
// Счетный регистр (инкрементируется таймером)
TCNT0=0x00;
// Источник тактового сигнала - старт таймера
// x  x  x  x  x  CS02  CS01  CS00
//                0     1      0      Clk/1024= 3.9 kHz  0-stop
TCCR0=0x02;
//Программируем таймер
//Настрйка прерываний от таймера Enable Timer/Counter0 Interrupt
// OCIE   TOIE2   TICIE1   OCIE1A   OCIE1B  TOIE1  -  TOIE0
//  0      0       0        0        0       0     0   1
TIMSK = 0x01;    
#pragma optsize+
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


--------------------
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Go to the top of the page
 
+Quote Post
AndreyVN
сообщение Jan 14 2009, 16:38
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 754
Регистрация: 29-06-06
Из: Volgograd
Пользователь №: 18 458



Цитата
Это творчество оптимизатора компилятора. С оптимизацией по размеру:



Goodefine - Спасибо приогромное! Respect!


Только у меня RCALL прыгал не на процедуру в которой иницилизируется регистр а черт знает куда.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 19:25
Рейтинг@Mail.ru


Страница сгенерированна за 0.01411 секунд с 7
ELECTRONIX ©2004-2016