Радио

Вопрос по Си для AVR

rk 22-11-2012 21:02

Лучше программить без переходов по меткам. Применять структурное программирование, которое меток не приемлет.

А так не хватает вот тут, объявления SleepTime

int main()
{
unsigned long SleepTime=100; //Хотя бь со 100мс начать.
...
...

Что _BV делает?

ps.
ммм, SleepTime объявлен локально, не сразу заметил, в блоке цикла for, за его пределами, после :

}
{label1:

эта переменная уже не определена.
Объявление в цикле for удалить, и добавить в начало программы, куда я указал.

Samael 22-11-2012 21:42

quote:
Originally posted by rk:

Что _BV делает?



BV это вроде как BitValue. вместо сдвига. чтоб не писать (1<<PB0) например. тоже самое _BV(PB0) будет
rk 22-11-2012 22:29

Наличие видимо от компилятора зависит.
Samael 22-11-2012 23:16

это из GCC повелось
Aleksey_N 23-11-2012 09:53

набацал свой вариант бегущего огня. Сделал выход на порт B (8-бит)


#define bit_set(var,bitno) ((var) | = 1 << (bitno))
#define OUT_PORT PORTB

void main(void)
{
unsigned int S=0;

INIT();

while (1)
{
OUT_PORT=0;
bit_set(OUT_PORT,S);
S++;
if (S>7) S=0;
}
}

Samael 23-11-2012 10:10

а
quote:
Originally posted by Aleksey_N:

OUT_PORT=0;



зачем ?
аааа. увидел там накладывается в bit_set.
Aleksey_N 23-11-2012 10:33

quote:
увидел там накладывается в bit_set.

верно
Aleksey_N 23-11-2012 10:39

использование условных переходов - вещь не красивая


quote:
if (PINB & _BV(PB1)) goto label1;

else PORTB | = _BV(PB0);


это вот не красиво
если уже так хочется "связываться" с IF
то тогда уж так сделайте

if (PINB & _BV(PB1))
{
PORTB &= ~_BV(PB0);
SleepTime = SleepTime*5;
}
else PORTB | = _BV(PB0);

Aleksey_N 25-11-2012 17:01

тема померла что ли?
Romantik 25-11-2012 17:25

Нет. пока некогда было поковыряться.. А вопросы еще будут...
Aleksey_N 25-11-2012 17:31

ждемс..