Всем привет!
Пробую разобраться как ПРАВИЛЬНО написать на Си передачу для 2262. Худо-бедно я сам написал, но понимаю, что мой код очень далёк не то что до идеального, а и до правильно написанного, хоть в реальной жизни этот код у меня и работает (Тини2313 посылает через радиоканал код на 2272 и 2272 их удачно принимает).
Итак, пробую скомпилировать код (Пример подпрограммы для отправки данных на чистом Си (Передатчик)) с этой станицы:
homes-smart.ru/index.php/oborudovanie/be...da-na-radiomodulyakh
Получаю ошибки компиляции:
Error: F:\Progger\AVR\2262\2313\2262_2313.c(23): must declare first in block -- unsigned short repeats = 1 << (((unsigned long)data >> 20) & 7);
Error: F:\Progger\AVR\2262\2313\2262_2313.c(27): must declare first in block -- unsigned long dataBase4 = 0; uint8_t i;
Error: F:\Progger\AVR\2262\2313\2262_2313.c(27): undefined symbol 'uint8_t' -- unsigned long dataBase4 = 0; uint8_t i;
Error: F:\Progger\AVR\2262\2313\2262_2313.c(29): undefined symbol 'i' -- for (i=0; i<12; i++) {
Error: F:\Progger\AVR\2262\2313\2262_2313.c(29): undefined symbol 'i'
Error: F:\Progger\AVR\2262\2313\2262_2313.c(29): undefined symbol 'i'
Error: F:\Progger\AVR\2262\2313\2262_2313.c(41): declaration syntax error
Error: F:\Progger\AVR\2262\2313\2262_2313.c(41): '(' expected
Error: F:\Progger\AVR\2262\2313\2262_2313.c(45): declaration syntax error
Я некоторые ошибки убрал (тут они уже не указаны), но застрял на самой первой в вышеуказанном списке.
Как её грамотно убрать?
И ещё по тексту мне не ясно откуда берётся 3L в этой строке: data |= 3L << 20;
Спасибо!
Прикрепляю оригинальный текст прграммы, что б далеко не бегать:
#define RC_BIT 3 // пин
#define periodusec 400 // mcs период
void sendRC(unsigned long data) { // , unsigned short pin 531 440 max
DDRB |= _BV(RC_BIT);
data |= 3L << 20;
unsigned short repeats = 1 << (((unsigned long)data >> 20) & 7);
data = data & 0xfffff; //truncate to 20 bit
unsigned long dataBase4 = 0; uint8_t i;
for (i=0; i<12; i++) {
dataBase4<<=2;
dataBase4|=(data%3);
data/=3;
}
unsigned short int j;
for (j=0;j<repeats;j++) {
data=dataBase4; uint8_t i;
for (i=0; i<12; i++) { switch (data & 3) {
case 0:
PORTB |= _BV(RC_BIT);
_delay_us(periodusec);
PORTB &= ~_BV(RC_BIT);
_delay_us(periodusec*3);
PORTB |= _BV(RC_BIT);
_delay_us(periodusec);
PORTB &= ~_BV(RC_BIT);
_delay_us(periodusec*3);
break; case 1: PORTB |= _BV(RC_BIT);
_delay_us(periodusec*3);
PORTB &= ~_BV(RC_BIT);
_delay_us(periodusec);
PORTB |= _BV(RC_BIT);
_delay_us(periodusec*3);
PORTB &= ~_BV(RC_BIT);
_delay_us(periodusec);
break;
case 2:
PORTB |= _BV(RC_BIT);
_delay_us(periodusec);
PORTB &= ~_BV(RC_BIT);
_delay_us(periodusec*3);
PORTB |= _BV(RC_BIT);
_delay_us(periodusec*3);
PORTB &= ~_BV(RC_BIT);
_delay_us(periodusec);
break;
}
data>>=2;
}
PORTB |= _BV(RC_BIT);
_delay_us(periodusec);
PORTB &= ~_BV(RC_BIT);
_delay_us(periodusec*31);
} }