Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: CodeVision глюит?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
AndreyVN
Всем привет!

Народ, у меня какая-то фигня при присвоении значений регистрам таймера:
Цитата
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 ... в заголовочных файлах находятся.

Куда рыть???
ARV
Цитата
WARNING. Using the commercial versions of CodeVisionAVR with pirated license files, created with Keygens, will result in incorrectly generated code, even if CodeVisionAVR seems to accept the pirated license file. The entire responsibility for any problems or losses arising from the usage of a pirated license file lies entirely on the person who tried to illegally use our program. We do not provide technical support for users of pirated license files.

Читали это на официальном сайте сайте? У вас купленная лицензия? может, ответ здесь?
AndreyVN
Цитата(ARV @ Jan 13 2009, 21:33) *
Читали это на официальном сайте сайте? У вас купленная лицензия? может, ответ здесь?

Конечно может!

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

Если кто-то сталкивался с чем-то похожим, просьба поделиться впечатлениями, приемами отладки, добрым словом...

Цитата(ARV @ Jan 13 2009, 21:33) *
Читали это на официальном сайте сайте? У вас купленная лицензия? может, ответ здесь?



Как я догадываюсь, у Вас CVAVR с купленной лицензией, может попробуету компильнуть мой проект?
Serj78
Цитата(AndreyVN @ Jan 13 2009, 21:26) *
Всем привет!

Народ, у меня какая-то фигня при присвоении значений регистрам таймера:


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

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

Куда рыть???


поменять хотя бы на 1.24.0, и то ему уже сто лет в обед. 2.38D у меня с самого начало глюкавила, я ей не верю.
по отзывам 2.53. вроде ничего, у меня на ней пара свежих проектов сделана, но, например она на 32 меге у меня некорректно с ацп работает в "тихом" режиме- значения отличаются на 1 процент примерно. почему- пока не разобрался.
ARV
Цитата(AndreyVN @ Jan 13 2009, 22:06) *
Как я догадываюсь, у Вас CVAVR с купленной лицензией, может попробуету компильнуть мой проект?
упаси вас Бог!!! biggrin.gif я пользуюсь WinAVR
VDG
было что-то аналогичное. оптимизацию уберите и проверьте.
Goodefine
Это творчество оптимизатора компилятора. С оптимизацией по размеру:
Код
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+
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
AndreyVN
Цитата
Это творчество оптимизатора компилятора. С оптимизацией по размеру:



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


Только у меня RCALL прыгал не на процедуру в которой иницилизируется регистр а черт знает куда.
AndreyVN
Хочу сообщить, что CodeVision for AVR полностью реабилитирован. RCALL прыгал 'не туда' поскольку перед ним разрешались прерывания,
а условие постоянно висело на ноге контроллера.

Оптимизация по size работает несколько бестолково, но в целом, тоже корректно.
Бестолковость в том, что часть присвоений типа LDI xx OUT xx спрятана в отдельную процедуру, а часть - нет. Уж коли есть такая процедура,
так целесообразно засунуть туда все присвоения, имеющие одинаковый вид LDI, OUT .
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.