Перейти к содержанию
    

Программа не вычисляет значение

Добрый день! Прошу помощи, уже третий день бьюсь над прошивкой. Суть в том, что значение roadf, вроде бы, вычисляется, но потом почему-то программа его не использует, пишет предупреждение "value computed is not used". В чем дело, можете помочь?

 

 

//---------------------------------------------------------------------------------------------
// Главная функция
int main(void)
{
    init_mk();                    // Вызвать функцию инициализации МК
    schet = 0; // обнуление переменной

    GIMSK=0b01000000; //разрешаем прерывание int0 -  кнопка
    MCUCR=0x02; // срабатывание по спаданию фронта -  для кнопки

    sei(); //глобальное разрешение прерываний

    Radiys_kolesa_vkl ();
    
               roadf = (1500/((((radiys_x + 144)/2)*6,28)*0,001));
           road = (unsigned int)roadf;
    rain = road-50;
    sand = road-30;

    Rejum_rabotu_vkl ();



    while(1)                     // Бесконечный цикл
    {
        
        Vubor_rejuma ();
        Klapan ();
        Vubor_radiysa ();    
        roadf = (1500/((((radiys_x + 144)/2)*6,28)*0,001));
               road = (unsigned int)roadf;
        rain = road-50;
            sand = road-30;
    }
    return 0;
}

Спасибо.

Изменено пользователем Herz

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

но потом почему-то программа его не использует

Думаю дело в том, что сам программист никак не использует эту переменную, а компилятор обижается.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Думаю дело в том, что сам программист никак не использует эту переменную, а компилятор обижается.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

а вот radiys_x откуда берется?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а вот radiys_x откуда берется?

 

Вот от сюда.

 

#define F_CPU 8000000UL     // Наша тактовая 8 Mhz
#define CH_ON_Off    PORTA &= (~(1<<0))        // Установить в 0 CH_ON
#define CH_ON_On    PORTA |= (1<<0)          // Установить в 1 CH_ON
#define radiys_14     355 // диаметр 14 дюймов в милимметрах
#define radiys_15     381 // диаметр 15 дюймов в милимметрах
#define radiys_16     406 // диаметр 16 дюймов в милимметрах
#define radiys_17     431 // диаметр 17 дюймов в милимметрах
#define radiys_18     457 // диаметр 18 дюймов в милимметрах
#define radiys_19     482 // диаметр 19 дюймов в милимметрах
#define radiys_20     508 // диаметр 20 дюймов в милимметрах
#define radiys_21     533 // диаметр 21 дюймов в милимметрах

//Чтение радиуса колеса из EEPROM при включении
void Radiys_kolesa_vkl ()
{
     rad_butclick = eeprom_read_byte(0x03);
     switch (rad_butclick)
                           {
                           case 1: n = 4;
                                                         Radiys_LED_blinck ();
                                                         radiys_x = radiys_14; break;
                          case 2:  n = 5;
                                                  Radiys_LED_blinck ();
                                                  radiys_x = radiys_15; break;
                          case 3:  n = 6;
                                                   Radiys_LED_blinck ();
                                                   radiys_x = radiys_16; break;
                          case 4:  n = 7;
                                                   Radiys_LED_blinck ();
                                                   radiys_x = radiys_17; break;
                          case 5:  n = 8;
                                                   Radiys_LED_blinck ();
                                                   radiys_x = radiys_18; break;
                          case 6:  n = 9;
                                                   Radiys_LED_blinck ();
                                                   radiys_x = radiys_19; break;
                          case 7:  n = 10;
                                                   Radiys_LED_blinck ();
                                                   radiys_x = radiys_20; break;
                          case 8:  n = 11;
                                                   Radiys_LED_blinck ();
                                                   radiys_x = radiys_21;
                                                    rad_butclick = 0;  break;

                          default: n = 7;
                              radiys_x = radiys_17;
                           }
}

 

и я пробовал прописать сразу в мейн, не помогло.

Изменено пользователем Herz

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот от сюда.

 

Еще раз, где продекларирована переменная radiys_x ? Указано, что это глобальная переменная?

Ведь функция void Radiys_kolesa_vkl () - ее не возвращает. Хотя по смыслу она это должна делать. Но тогда она не должна быть void...

А должно быть:

 

radiys_x = Radiys_kolesa_vkl ();

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Еще раз, где продекларирована переменная radiys_x ? Указано, что это глобальная переменная?

Ведь функция void Radiys_kolesa_vkl () - ее не возвращает. Хотя по смыслу она это должна делать. Но тогда она не должна быть void...

А должно быть:

 

radiys_x = Radiys_kolesa_vkl ();

 

да, это глобальная переменная, вот кусок кода с переменными

 

 

volatile unsigned int schet; // переменная накапливает значения от геркона (счетчик)
volatile unsigned int rejum; // переменная выбора режима подачи масла
volatile unsigned int rain; //  режима подачи масла - дождь
volatile unsigned int sand; //  режима подачи масла - песок
volatile float roadf; //  режима подачи масла - дорога
volatile unsigned int road; //  режима подачи масла - дорога
volatile unsigned char butclick; //  подсчет нажатий кнопки выбора режима
volatile unsigned char rad_butclick; //  подсчет нажатий кнопки выбора радиуса
volatile unsigned int radiys_x; //  радиус колеса
volatile unsigned int k; //  переменная цыкла моргания светодиода радиуса
volatile unsigned int n; //  переменная количества моргания св. диода радиуса

 

но даже если присвоить ей одно значение непосредственно перед формулой, то ничего не изменяется

Изменено пользователем Herz

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я один вещ скажу, только ты не обижайся :)

 

Эпический грабля с запятой в плавающей константе :)

roadf = (1500/((((radiys_x + 144)/2)*6,28)*0,001));

 

Вот почему суффикс f категорически рекомендуется.

6.28f 0.001f итд.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я один вещ скажу, только ты не обижайся :)

 

Эпический грабля с запятой в плавающей константе :)

roadf = (1500/((((radiys_x + 144)/2)*6,28)*0,001));

 

Вот почему суффикс f категорически рекомендуется.

6.28f 0.001f итд.

 

 

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

Спасибо за помощь, теперь буду оптимизировать :)

 

А заодно оптимизируйте написание постов. Я Ваш первый пост поправил, оформив код тэгами - думал, будет понятно. Ан - нет. Постарайтесь дальше всё же сами.

Изменено пользователем Herz

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...