проблема с #define
- слушатель
- Первый раз сказал Мяу!
- Сообщения: 26
- Зарегистрирован: Пт ноя 05, 2010 11:12:51
- Контактная информация:
проблема с #define
Доброго времени суток!
Пользую CVAVR 1.25.9
симулирую в студии
есть код
#define Key1 3 //
#define Key2 4
#define Key3 5 //
#define Key4 6
#define Key5 7
#define KeyLeds 2
#define KeyPort PORTA
#define KeyPin PINA
#define KeyDdr DDRA
#define KeyMask ((1<<Key5)|(1<<Key4)|(1<<Key3)|(1<<Key2)|(1<<Key1))
void KeyInit(void) {
KeyDdr|=KeyMask; //
KeyPort|=KeyMask;
}
все прекрасно...
а вот так уже не работает
void KeyInit(void) {
KeyDdr|=KeyMask&(1<<KeyLeds); //
KeyPort|=KeyMask&(1<<KeyLeds);
KeyPort&=(~(1<<KeyLeds));
}
то есть вроде как работает, но в порты не записывает.
при чем даже варнинги не выскакивают...
Может я не правильно понимаю этот дефайн
хотельсь сделать независимую функцию для клавиатуры...
Пользую CVAVR 1.25.9
симулирую в студии
есть код
#define Key1 3 //
#define Key2 4
#define Key3 5 //
#define Key4 6
#define Key5 7
#define KeyLeds 2
#define KeyPort PORTA
#define KeyPin PINA
#define KeyDdr DDRA
#define KeyMask ((1<<Key5)|(1<<Key4)|(1<<Key3)|(1<<Key2)|(1<<Key1))
void KeyInit(void) {
KeyDdr|=KeyMask; //
KeyPort|=KeyMask;
}
все прекрасно...
а вот так уже не работает
void KeyInit(void) {
KeyDdr|=KeyMask&(1<<KeyLeds); //
KeyPort|=KeyMask&(1<<KeyLeds);
KeyPort&=(~(1<<KeyLeds));
}
то есть вроде как работает, но в порты не записывает.
при чем даже варнинги не выскакивают...
Может я не правильно понимаю этот дефайн
хотельсь сделать независимую функцию для клавиатуры...
- Реклама
- Goodefine
- Держит паяльник хвостом
- Сообщения: 906
- Зарегистрирован: Ср апр 16, 2008 13:22:54
- Откуда: Приднестровье, Тирасполь
Re: проблема с #define
С какой радости там "&" ? Для единицы нужно "|":слушатель писал(а): то есть вроде как работает, но в порты не записывает.
при чем даже варнинги не выскакивают...
Код: Выделить всё
void KeyInit(void) {
KeyDdr|=KeyMask|(1<<KeyLeds);
KeyPort|=KeyMask|(1<<KeyLeds);
KeyPort&=~(1<<KeyLeds);
}
Код: Выделить всё
#define Key3 5 //Код: Выделить всё
#define Key3 5 /* */ Любой, заслуживающий внимания, опыт приобретается себе в убыток...
- слушатель
- Первый раз сказал Мяу!
- Сообщения: 26
- Зарегистрирован: Пт ноя 05, 2010 11:12:51
- Контактная информация:
Re: проблема с #define
Что делает ф-я неважно. Там еще куча разных ф-й естькоторые используют макроопределения. У меня клавиатура на 5 кнопок , в каждой из которой стоит св.диод. В прерывании меняется направление порта и считывается значение кнопок в переменную соотвктственно макросу.
Проблема в том, что программа не инициализирует порт соответственно макроопределениям. В итоге не работает ни одна ф-я.
вроде так...
Проблема в том, что программа не инициализирует порт соответственно макроопределениям. В итоге не работает ни одна ф-я.
вроде так...
- Goodefine
- Держит паяльник хвостом
- Сообщения: 906
- Зарегистрирован: Ср апр 16, 2008 13:22:54
- Откуда: Приднестровье, Тирасполь
Re: проблема с #define
Еще раз, вы разницу между своим первоначальным кодом:
и исправленным:
видите?...
Код: Выделить всё
void KeyInit(void) {
KeyDdr|=KeyMask&(1<<KeyLeds); //
KeyPort|=KeyMask&(1<<KeyLeds);
KeyPort&=(~(1<<KeyLeds));
}
Код: Выделить всё
void KeyInit(void) {
KeyDdr|=KeyMask|(1<<KeyLeds);
KeyPort|=KeyMask|(1<<KeyLeds);
KeyPort&=~(1<<KeyLeds);
}Любой, заслуживающий внимания, опыт приобретается себе в убыток...
- слушатель
- Первый раз сказал Мяу!
- Сообщения: 26
- Зарегистрирован: Пт ноя 05, 2010 11:12:51
- Контактная информация:
Re: проблема с #define
пордон...
не видел...
уже мозги квадратные у этого компа...
вопрос снят.
уже мозги квадратные у этого компа...
вопрос снят.
- Реклама
Re: проблема с #define
а почему именно /*так*/ ?
//может я вот так хочу
что это изменит?
//может я вот так хочу
что это изменит?
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18647
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: проблема с #define
в некоторых компиляторах препроцессор сначала делает подстановки макросов, и только затем удаляет комментарии, в некоторых - наоборот. честно говоря, я не знаю, какой вариант ПРАВИЛЬНЫЙ, а может, стандарт вообще об этом умалчивает... но комментарии в макросах /* такого вида */ и в том и в другом случае не исказят код программы, в то время как комментарии // такого вида могут привести к катастрофе для компиляторов, действующих по первому варианту. вот пример:vovik15 писал(а):а почему именно /*так*/ ?
//может я вот так хочу
что это изменит?
Код: Выделить всё
#define foo(x) (1<<x) // простой сдвиг
a = b + foo(c) / 12; Код: Выделить всё
a = b + (1<<c) // простой сдвиг / 12;Код: Выделить всё
a = b + (1<<c)в случае с /* таким комментарием */ проблема отсутствует
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: проблема с #define
все понял,спасибо вам


