Код: Выделить всё
putsf("at+ckpd=\"e\" ");Код: Выделить всё
char priem[50];
char x;
//собираем символы со входа UART
while(getchar()!='\n'){x++; priem[x]=getchar();}
//если слово на входе=RING,то делаем что-то
if(priem=="RING")PORTB.0=1;Код: Выделить всё
putsf("at+ckpd=\"e\" ");Код: Выделить всё
char priem[50];
char x;
//собираем символы со входа UART
while(getchar()!='\n'){x++; priem[x]=getchar();}
//если слово на входе=RING,то делаем что-то
if(priem=="RING")PORTB.0=1;В Си нет строковых типов и операций с ними, так что, без строковых функций все же не обойтись.dm211 писал(а):Код: Выделить всё
priem=="RING"
Код: Выделить всё
if(getchar()=='R' && getchar()=='I' && getchar()=='N' && getchar()=='G')Да что там разбираться-тоdm211 писал(а):Пока не разобрался с этими строковыми функциями, ...
Нет, не лучше - при таком решении будет исключена возможность ветвления по пришедшей команде, что-то типа такого (это псевдокод):dm211 писал(а):...работает нормально, ... Может быть это и лучше,Код: Выделить всё
if(getchar()=='R' && getchar()=='I' && getchar()=='N' && getchar()=='G')
Код: Выделить всё
s = gets(...);
switch ( *s ) {
case "RING" : SayNobodysHome();
break;
case "NOCK" : NockBack();
break;
case "SCRATCH" : SayHiHunny();
break;
otherwise:
break'em_all_twice(); // fff..ck!
}кто бы мне рассказал, зачем практически эти битовые поля нужны, кроме как компактная (условно) форма хранения булевых переменных? не вижу абсолютно никаких преимуществ перед манипуляцией с битами напрямую...1995kenny писал(а):Расскажите плиз про битовые поля - как использовать, как вводить инфу в них и выводить(выводить побитно).
В нете нашел только такое. Другого нигде нету
Ну, что Вы, ARV, не так уж они и бесполезны, эти битовые поля...ARV писал(а):кто бы мне рассказал, зачем практически эти битовые поля нужны, кроме как компактная (условно) форма хранения булевых переменных? не вижу абсолютно никаких преимуществ перед манипуляцией с битами напрямую...
Код: Выделить всё
// Device STATUS register: error flag, ready flag, FUNC selection, strobe bit
static
union {
struct {
unsigned int err: 1;
unsigned int rdy: 1;
unsigned int fse: 5;
unsigned int strb:1;
} bit;
unsigned char byte;
} status;
// Device COMMAND register: Coordinates (H/C/S)
static
union {
struct {
unsigned int head:2;
unsigned int sec: 4;
unsigned int cyl: 10;
} bit;
struct {
unsigned char lwr;
unsigned char upr;
} byt;
} DvcCmd;
void inline StrobeDvcReg(){
status.bit.strb = 1; DvcStsReg = status.byte;
status.bit.strb = 0; DvcStsReg = status.byte;
}
void ScanDvcSpace()
{
// Init device
status.bit.fse = _SCAN_DVC_;
DvcStsReg = status.byte;
// Init space
DvcCmd.byt.lwr = 0;
DvcCmd.byt.upr = 0;
// scan all controller space
do {
do {
do {
while ( status.byte = DvcStsReg, !status.bit.rdy ) ; // wait while device got READY
DvcCmdReg = DvcCmd.byt.lwr; // send lower CMD byte
StrobeDvcReg(); // latch cmd byte
DvcCmdReg = DvcCmd.byt.upr; // send upper CMD byte
StrobeDvcReg(); // latch cmd byte
} while ( DvcCmd.bit.sec++ < MAX_SEC );
} while ( DvcCmd.bit.cyl++ < MAX_CYL );
} while ( DvcCmd.bit.head++ < MAX_HEAD );
}я же не могу опросить номера первой пятерки скинуть массив в раму потом следующей пятерки и так далее - это неправильно
Нет там ничего мудреного - это всего лишь двоичные числа с разрядностью неравной/некратной байту, упакованные в байты.1995kenny писал(а):А нет других способов вытащить 1 бит из числа(например типа long)? А то с этоими полями так всё мудрено...
Код: Выделить всё
ds_temp = ds_temp + (float)((temp&1)*0.0625+((temp>>1)&1)*0.125+((temp>>2)&1)*0.25+((temp>>3)&1)*0.5+((temp>>4)&1)+((temp>>5)&1)*2+((temp>>6)&1)*4+((temp>>7)&1)*8);
Код: Выделить всё
Temperature = (*((int *) &__ds18b20_scratch_pad.temp_lsb) & bit_mask[resolution])*0.0625;