|
CodeVision глюит?, компилит билеберду |
|
|
|
Jan 13 2009, 18:26
|
Знающий
   
Группа: Свой
Сообщений: 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 ... в заголовочных файлах находятся. Куда рыть???
|
|
|
|
|
 |
Ответов
(1 - 8)
|
Jan 13 2009, 19:06
|
Знающий
   
Группа: Свой
Сообщений: 754
Регистрация: 29-06-06
Из: Volgograd
Пользователь №: 18 458

|
Цитата(ARV @ Jan 13 2009, 21:33)  Читали это на официальном сайте сайте? У вас купленная лицензия? может, ответ здесь? Конечно может! По существу вопроса - попробовал маленький фрагмент кода где только и есть присвоение регистров таймера - все нормально. Компилятор сходит с ума где-то в тексте программы (естественно, без ошибок и предупреждений) буду искать, комментируя различные фрагменты. Если кто-то сталкивался с чем-то похожим, просьба поделиться впечатлениями, приемами отладки, добрым словом... Цитата(ARV @ Jan 13 2009, 21:33)  Читали это на официальном сайте сайте? У вас купленная лицензия? может, ответ здесь? Как я догадываюсь, у Вас CVAVR с купленной лицензией, может попробуету компильнуть мой проект?
|
|
|
|
|
Jan 13 2009, 19:42
|

Знающий
   
Группа: Свой
Сообщений: 966
Регистрация: 27-05-06
Из: СПб
Пользователь №: 17 499

|
Цитата(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 процент примерно. почему- пока не разобрался.
|
|
|
|
|
Jan 14 2009, 07:33
|

Местный
  
Группа: Свой
Сообщений: 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+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
--------------------
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
|
|
|
|
|
Jan 14 2009, 16:38
|
Знающий
   
Группа: Свой
Сообщений: 754
Регистрация: 29-06-06
Из: Volgograd
Пользователь №: 18 458

|
Цитата Это творчество оптимизатора компилятора. С оптимизацией по размеру: Goodefine - Спасибо приогромное! Respect! Только у меня RCALL прыгал не на процедуру в которой иницилизируется регистр а черт знает куда.
|
|
|
|
|
Jan 15 2009, 12:17
|
Знающий
   
Группа: Свой
Сообщений: 754
Регистрация: 29-06-06
Из: Volgograd
Пользователь №: 18 458

|
Хочу сообщить, что CodeVision for AVR полностью реабилитирован. RCALL прыгал 'не туда' поскольку перед ним разрешались прерывания, а условие постоянно висело на ноге контроллера.
Оптимизация по size работает несколько бестолково, но в целом, тоже корректно. Бестолковость в том, что часть присвоений типа LDI xx OUT xx спрятана в отдельную процедуру, а часть - нет. Уж коли есть такая процедура, так целесообразно засунуть туда все присвоения, имеющие одинаковый вид LDI, OUT .
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|