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

 
 
> AVR GCC не считает a = (b * pwm_ch2);, a и b uint, pwm_ch2 uchar; что не так?
smk
сообщение May 14 2012, 10:40
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



не могу посчитать a = (b * pwm_ch2) на АВРке. Что я делаю не так и как правильно?



--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
hd44780
сообщение May 14 2012, 13:44
Сообщение #2


Профессионал
*****

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



Раз в железе работает, значит, студийные глюки.
Но типы данных желательно проконтролировать...


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
smk
сообщение May 14 2012, 16:43
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата(hd44780 @ May 14 2012, 16:44) *
Раз в железе работает, значит, студийные глюки.
Но типы данных желательно проконтролировать...

Это первое, что сделал. Результата не дало. Вот может библиотеку какую подключить?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 14 2012, 18:04
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
smk
сообщение May 15 2012, 11:37
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 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;
}




--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
hd44780
сообщение May 15 2012, 13:06
Сообщение #6


Профессионал
*****

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



Цитата(smk @ May 15 2012, 14:37) *
if(!(PINA & (1<<0)))


wacko.gif blink.gif у Шуры шары
Зачем сдвиг? Чтобы у компилятора шарики за ролики заехали и чтобы он ещё и в этом if-е Вам Бог знает что нагенерил? Или Вы его специально на прочность проверяете? А потом будете спрашивать, а чего оно не работает?

Проще и понятнее
if(!(PINA & 1))

По теме - пусть уважаемый Сергей Борщ даст свой makefile, на котором всё работает. Может ключики где-то отличаются..

Сообщение отредактировал hd44780 - May 15 2012, 13:20


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


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

 


RSS Текстовая версия Сейчас: 28th June 2025 - 13:18
Рейтинг@Mail.ru


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