ARV писал(а):в результате программа теряет основное качество хорошо написанной программы: портируемость.
Аргумент, с которым не поспоришь... Не учла...
ARV писал(а):в результате программа теряет основное качество хорошо написанной программы: портируемость.
Код: Выделить всё
c:/winavr-20100110/lib/gcc/../../avr/include/util/delay.h:113: error: expected expression before '=' token
c:/winavr-20100110/lib/gcc/../../avr/include/util/delay.h:123: error: expected expression before '=' token
c:/winavr-20100110/lib/gcc/../../avr/include/util/delay.h:151: error: expected expression before '=' token
AI_Disable писал(а):Подскажите, что за ворны вылезают на функцию strncat(buff,temp_buff,4);
../main.c:254: warning: implicit declaration of function 'strncat'
../main.c:254: warning: incompatible implicit declaration of built-in function 'strncat'
buff и temp_buff объявлены так:
char buff[10],temp_buff[10];
PS: всё работает как надо: к строке buff присоединяются первые 4 символа temp_buff.
линкер по умолчанию подключает системные библиотеки, поэтому файлы собираются без проблем. а вот компилятору не нравится, что в проекте нет определений функций - вот и варнингAI_Disable писал(а):Мастер Ломастер, вы правы, данный инклюд отсутствовал, благодарю. Как же оно тогда работало...![]()
Код: Выделить всё
#define IR8_data 1
#define IR8_clk 0
#define IR8_PORT PORTC
#define IR8_DDR DDRC
...
void ir8wword(unsigned char byte0,unsigned char byte1)
{
ir8_byte0=byte0;
ir8_byte1=byte1;
unsigned char a,b,c;
b=byte0;
for(a=2;a>0;a--)
{
for(c=8;c>0;c--)
{
if((b & (0b10000000))==0) {IR8_PORT&=~(1<<IR8_data);}
else {IR8_PORT|=1<<IR8_data;}//копирование 0 бита b в PORTC
IR8_PORT|=1<<IR8_clk;//подача тактового импульса
asm(
"nop\n\t"
"nop\n\t"
"nop\n\t");
IR8_PORT&=~(1<<IR8_clk);
b<<=1;//сдвиг b влево на 1
}
b=byte1;
}
}
Код: Выделить всё
void sendword(unsigned int w){
sendbyte(w & 0xFF); // младший байт
sendbyte(w >> 8); // старший байт
}struct BITS
{
bool b1 :1;
bool b2 :1;
bool b3 :1;
bool b4 :1;
bool b5 :1;
bool b6 :1;
bool b7 :1;
bool b8 :1;
};
void myfunction()
{
char cByteRead;
BITS b;
cByteRead = 'a';
cout << "The full byte has a meaning of...: " << cByteRead << endl;
cout << "...which is in int:" << (int)cByteRead << endl;
b = *(BITS*)(&cByteRead);
cout << b.b1 << endl;
cout << b.b2 << endl;
cout << b.b3 << endl;
cout << b.b4 << endl;
cout << b.b5 << endl;
cout << b.b6 << endl;
cout << b.b7 << endl;
cout << b.b8 << endl;
}
Мастер Ломастер писал(а):круто... битовые поля, С++ - это вы знаете, а простейшие битовые операции операции - не знаете...
проверка 3-го бита (начиная с 0-го!) в байте if(byte & (1 << 3)){...} об этом писалось уже мульён раз
а в чем разница-то? порт или байт: это все равно для Си - просто переменные...Bismark писал(а):Просто подобная конструкция описана для проверки битов непосредственно в регистре порта, но я не подумал что таким же образом можно проверить и просто байт...
Мастер Ломастер писал(а):а в чем разница-то? порт или байт: это все равно для Си - просто переменные...
maxmihan писал(а):...
Речь ведь идет просто про byte. Надеюсь программа после этого не перестанет работать.