Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Къде греша
http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=15583
Страница 1 от 1

Автор:  koko76bj [ Пет Ное 03, 2017 7:13 pm ]
Заглавие:  Къде греша

Здравейте
започнах да си играя да пиша програма за MCU Atmega16, но ударих на камък при компилирането.Ако някой може да ми каже къде греша.

if(NEW_KEY == NO_KEY)
{
key = NO_KEY;
key_count = 0;
flag = 0;
return;
};

if(OLD_KEY == NEW_KEY)
{
key_count++;
}
else
{
OLD_KEY = NEW_KEY;
key_count = 0;
};

if ((key_count>2)&&(flag==0))
{
key = NEW_KEY;
flag = 1;
}
else
{
if (key_count>59)
{
if (!(key_count%10)) key=NEW_KEY;
else key = NO_KEY;

}
else
{
key = NO_KEY;
}
};

return;
}


'key' undeclared (first use in this function)
тази грешка ми дава

Автор:  radolin [ Пет Ное 03, 2017 7:15 pm ]
Заглавие:  Re: Къде греша

Като начало, прати целия сорс код, а не само извадка. Ако това ти е целият сорс код, насочи се към някоя книжка C за начинаещи.

Автор:  koko76bj [ Пет Ное 03, 2017 7:34 pm ]
Заглавие:  Re: Къде греша

това ми е файла keydrive.c


#include "keydriver.h"


void scan_key(unsigned int adc_data)
{
static unsigned int key_count;
static unsigned char NEW_KEY, OLD_KEY, flag=0;

if (adc_data>768 && adc_data<938) NEW_KEY = OK;
else if (adc_data>597 && adc_data<768) NEW_KEY = RIGHT;
else if (adc_data>426 && adc_data<597) NEW_KEY = UP;
else if (adc_data>256 && adc_data<426) NEW_KEY = DOWN;
else if (adc_data>85 && adc_data<256) NEW_KEY = LEFT;
else if (adc_data<85) NEW_KEY = MENU;
else NEW_KEY = NO_KEY;


if(NEW_KEY == NO_KEY)
{
key = NO_KEY;
key_count = 0;
flag = 0;
return;
};

if(OLD_KEY == NEW_KEY)
{
key_count++;
}
else
{
OLD_KEY = NEW_KEY;
key_count = 0;
};

if ((key_count>2)&&(flag==0))
{
key = NEW_KEY;
flag = 1;
}
else
{
if (key_count>59)
{
if (!(key_count%10)) key=NEW_KEY;
else key = NO_KEY;

}
else
{
key = NO_KEY;
}
};

return;
}


това е файла kaydrive.h

#define OK 1
#define DOWN 2
#define LEFT 3
#define RIGHT 4
#define UP 5
#define MENU 6
//#define POWER 7

#define NO_KEY 0x00

има още 9 файла но там всичко си е правилно и нямам проблеми.Само тук е проблема,може би допускам синтактична грешка.

Автор:  radolin [ Пет Ное 03, 2017 7:58 pm ]
Заглавие:  Re: Къде греша

Е добре де, той компилатора ти казва, никъде не е декларирана променливата key.

Имаш примерно декларация на key_count - 'static unsigned int key_count;', имаш NEW_KEY, OLD_KEY, flag, но key не виждам да си я декларирал някъде (и компилатора също не вижда).

Автор:  ike [ Съб Ное 04, 2017 2:44 pm ]
Заглавие:  Re: Къде греша

koko76bj написа:
започнах да си играя да пиша програма за MCU Atmega16

Тази програма ти ли си я писал или си я приписал от някъде другаде?

Автор:  Predator_MF [ Съб Ное 04, 2017 7:34 pm ]
Заглавие:  Re: Къде греша

Най-отгоре в keydrive.c добави -
Код:
int key = 0;


Ако някъде в друг файл имаш глобално дефиниран int key и искаш да я ползваш в този C файл -
Код:
extern int key;


Моля толерирайте начинаещите, ако си погледна назад кода когато съм се регистрирал в този форум, мога да се посмея много :)

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/