|
AVR GCC не считает a = (b * pwm_ch2);, a и b uint, pwm_ch2 uchar; что не так? |
|
|
|
 |
Ответов
|
May 14 2012, 18:04
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
QUOTE (smk @ May 14 2012, 19:43)  Вот может библиотеку какую подключить? Вот может быть пора посмотреть в листинг? Даю 99%, что переменная лежит в регистре, если вообще не заоптимизирована в следующее выражение, в котором она используется. Поэтому симулятор и не может ее показать. Ну не научили пока GCC сопровождать отладочной информацией переменную в регистре и ее блуждание по регистрам. И студии, соответственно, неоткуда брать эту информацию и показать вам она ничего не может. Откройте окно дизассемблера, осмыслите код и поймёте, в каких регистрах искать вашу переменную. Хотите надавать по рукам оптимизатору и увидеть переменную явно в памяти - объявите как volatile.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
May 15 2012, 11:37
|
Гуру
     
Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446

|
Цитата(Сергей Борщ @ May 14 2012, 21:04)  Хотите надавать по рукам оптимизатору и увидеть переменную явно в памяти - объявите как volatile. Делал ранее и еще раз проверил. Не помогает. Привожу для интереса код (ламерского качества, сам понимаю, т.к. не писался а копи-пастился). Может кто поймет в чем там дело? Код #include <avr/io.h> #include <stdint.h> #include <math.h>
volatile unsigned char pwm=0, pwm_ch1=0, pwm_ch2=255, step=0, b, flag=0; volatile unsigned int count=0, tik=0; volatile unsigned int a, c;
int main (void) { PORTB = 0x00; DDRB = 0x0F; PORTA = 0x01; DDRA = 0x00; OCR1A = 0x7F; OCR1B = 0x7F; OCR1C = 0xFF; TCCR1A = 0b10100011; TCCR1B = 0x08; //start Timer
while(1) { if(step==0) { if(count==300) { step=1; count = 0; } } if(step==1) { if(count==1) { pwm_ch1++; pwm_ch2--; count=0; } if(pwm_ch2==0) { step=2; count = 0; } } if(step==2) { if(count==300) { step=3; count = 0; } } if(step==3) { if(count==1) { pwm_ch1--; pwm_ch2++; count=0; } if(pwm_ch1==0) { step=0; count = 0; } }
if(pwm==255) {count++; tik++;} pwm++;
a = (b * (unsigned int)pwm_ch1); c = (b * (unsigned int)pwm_ch2);
OCR1A = (unsigned char)(a>>8); OCR1B = (unsigned char)(c>>8);
if(tik==1) { tik=0; if(!(PINA & (1<<0))) { if(flag==0) b++; if(b==255) flag=1; if(flag==1) b--; if(b==0) flag=0; } } } return 0; }
--------------------
Живи днем так, чтобы ночью ты спал спокойно.
|
|
|
|
|
May 15 2012, 13:06
|

Профессионал
    
Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980

|
Цитата(smk @ May 15 2012, 14:37)  if(!(PINA & (1<<0)))  у Шуры шары Зачем сдвиг? Чтобы у компилятора шарики за ролики заехали и чтобы он ещё и в этом if-е Вам Бог знает что нагенерил? Или Вы его специально на прочность проверяете? А потом будете спрашивать, а чего оно не работает? Проще и понятнее if(!(PINA & 1)) По теме - пусть уважаемый Сергей Борщ даст свой makefile, на котором всё работает. Может ключики где-то отличаются..
Сообщение отредактировал hd44780 - May 15 2012, 13:20
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
Сообщений в этой теме
smk AVR GCC не считает a = (b * pwm_ch2); May 14 2012, 10:40 MrYuran а в чем проблема?
уж не volatile ли? May 14 2012, 10:46 smk Цитата(MrYuran @ May 14 2012, 13:46) а в ... May 14 2012, 10:48  _Артём_ Цитата(smk @ May 14 2012, 13:48) нет. про... May 14 2012, 11:21  demiurg_spb Цитата(smk @ May 14 2012, 13:48) считает,... May 14 2012, 11:33  sKWO Цитата(smk @ May 14 2012, 13:48) Вернее с... May 14 2012, 13:13 Navovvol хз, может к одному типу привести ? или а сделать д... May 14 2012, 11:21 smk а в железе работает. странно. May 14 2012, 12:02 demiurg_spb Что странным вам кажется? May 14 2012, 12:37    Сергей Борщ QUOTE (smk @ May 15 2012, 14:37) Делал ра... May 15 2012, 12:06     smk Цитата(Сергей Борщ @ May 15 2012, 15:06) ... May 16 2012, 09:18      Сергей Борщ QUOTE (smk @ May 16 2012, 12:18) В моем в... May 16 2012, 11:38       smk Цитата(Сергей Борщ @ May 16 2012, 14:38) ... May 16 2012, 17:45     Сергей Борщ QUOTE (hd44780 @ May 15 2012, 16:06) Заче... May 15 2012, 13:20 hd44780 Про сдвиг я для порядку сказал.
Наглядно, да, но п... May 15 2012, 14:11 demiurg_spb Цитата(hd44780 @ May 15 2012, 17:11) Нагл... May 16 2012, 11:45
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|