Alexandr_638 0 25 декабря, 2013 Опубликовано 25 декабря, 2013 (изменено) · Жалоба Добрый день! Прошу помощи, уже третий день бьюсь над прошивкой. Суть в том, что значение 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; } Спасибо. Изменено 25 декабря, 2013 пользователем Herz Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mareng 0 25 декабря, 2013 Опубликовано 25 декабря, 2013 · Жалоба но потом почему-то программа его не использует Думаю дело в том, что сам программист никак не использует эту переменную, а компилятор обижается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexandr_638 0 25 декабря, 2013 Опубликовано 25 декабря, 2013 · Жалоба Думаю дело в том, что сам программист никак не использует эту переменную, а компилятор обижается. ну там даже в том куске кода она используется и далее также используется. Если прописать просто число, то все работает отлично. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 25 декабря, 2013 Опубликовано 25 декабря, 2013 · Жалоба ну там даже в том куске кода она используется и далее также используется. Если прописать просто число, то все работает отлично. а вот radiys_x откуда берется? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexandr_638 0 25 декабря, 2013 Опубликовано 25 декабря, 2013 (изменено) · Жалоба а вот 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; } } и я пробовал прописать сразу в мейн, не помогло. Изменено 25 декабря, 2013 пользователем Herz Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 25 декабря, 2013 Опубликовано 25 декабря, 2013 · Жалоба Вот от сюда. Еще раз, где продекларирована переменная radiys_x ? Указано, что это глобальная переменная? Ведь функция void Radiys_kolesa_vkl () - ее не возвращает. Хотя по смыслу она это должна делать. Но тогда она не должна быть void... А должно быть: radiys_x = Radiys_kolesa_vkl (); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexandr_638 0 25 декабря, 2013 Опубликовано 25 декабря, 2013 (изменено) · Жалоба Еще раз, где продекларирована переменная 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; // переменная количества моргания св. диода радиуса но даже если присвоить ей одно значение непосредственно перед формулой, то ничего не изменяется Изменено 25 декабря, 2013 пользователем Herz Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 14 25 декабря, 2013 Опубликовано 25 декабря, 2013 · Жалоба Я один вещ скажу, только ты не обижайся :) Эпический грабля с запятой в плавающей константе :) roadf = (1500/((((radiys_x + 144)/2)*6,28)*0,001)); Вот почему суффикс f категорически рекомендуется. 6.28f 0.001f итд. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость TSerg 25 декабря, 2013 Опубликовано 25 декабря, 2013 · Жалоба И еще - компилятор не любит, когда пишут на латинице:) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexandr_638 0 25 декабря, 2013 Опубликовано 25 декабря, 2013 (изменено) · Жалоба Я один вещ скажу, только ты не обижайся :) Эпический грабля с запятой в плавающей константе :) roadf = (1500/((((radiys_x + 144)/2)*6,28)*0,001)); Вот почему суффикс f категорически рекомендуется. 6.28f 0.001f итд. та какие обиды, я ж чайник еще :) . Все заработало, но теперь другая проблема - флеш переполнен. Как же не хватает смайла рукалицо. Спасибо за помощь, теперь буду оптимизировать :) А заодно оптимизируйте написание постов. Я Ваш первый пост поправил, оформив код тэгами - думал, будет понятно. Ан - нет. Постарайтесь дальше всё же сами. Изменено 25 декабря, 2013 пользователем Herz Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться