Код: Выделить всё
#if __DEBUG__
debug_send_str("INIT:...");
#endif
//...
void debug_send_str(char * str){
if(debug_ON_OFF==ON){ // вкл/выкл по usart
USART_SendStr(str);
}
}Код: Выделить всё
#if __DEBUG__
debug_send_str("INIT:...");
#endif
//...
void debug_send_str(char * str){
if(debug_ON_OFF==ON){ // вкл/выкл по usart
USART_SendStr(str);
}
}Код: Выделить всё
extern void UartSend(const char *msg);
...
#ifdef __DEBUG
#define Trace(x) UartSend(x)
#else
#define Trace(x)
#endif
...
void main(void)
{
Trace("Hello");
Trace("World");
}
Что бы можно было писать так.чего вы добиться то хотите?
Код: Выделить всё
DEBUG("ERROR1");
DEBUG("ERROR1",var1);
DEBUG("ERROR2",var2,var3);
DEBUG("ERROR3",var4,var5,var6);
банально не знаю как сформировать байт из массива. Подскажите кто знает, заранее благодарен.Warning [360] C:\Users\Enter\Documents\pic\sender\main.c; 90.8 array index out of bounds
Warning [358] C:\Users\Enter\Documents\pic\sender\main.c; 111.17 illegal conversion of pointer to integer
GCC поддерживает макросы с переменным числом параметров:pokk писал(а):Что бы можно было писать так.А в готовом варианте что бы можно было убрать/вернуть с минимальными трудозатратами =)Код: Выделить всё
DEBUG("ERROR1"); DEBUG("ERROR1",var1); DEBUG("ERROR2",var2,var3); DEBUG("ERROR3",var4,var5,var6);
Код: Выделить всё
unsigned short int array[8];
///////////////////////////////////////////////////////////////////////////////////
void send_Usart(unsigned char e) // Отправка байта
{
while(TXIF!=1) // Устанавливается, когда регистр свободен
{}
TXREG = e;
}
unsigned char getch_Usart(void)// Получение байта
{
while(!RCIF) // Устанавливается, когда регистр не пуст.
continue;
return RCREG;
}
void interrupt send_data(void)
{
if (T0IF == 1)
{
RA2 = ~RA2;
array[0]=0;
array[1]=0;
array[2]=0;
array[3]=0;
array[4]=0;
array[5]=0;
array[6]=0;
array[7]=0;
if (com_0==1)
{
array[0]=1;
}
if (com_1==1)
{
array[1]=1;
}
if (com_2==1)
{
array[2]=1;
}
if (com_3==1)
{
array[3]=1;
}
send_Usart(*array);
TMR0 = 1;
T0IF = 0;
}
// if (TMR2IF == 1) //таймер 2 - говорим что соединение присутствует
// {
// RA2 = ~RA2;
// send_Usart(0b00000001);
// TMR2 = 1;
// T2CKPS0 = 0; T2CKPS1 = 1; //делим тактовую частоту на 4
// TOUTPS0 = 0; TOUTPS1 = 0; TOUTPS2 = 1; TOUTPS3 = 0; //выходной делитель на 5
// TMR2IF = 0; // сброс флага
// }
}Естественно! Вы передаете в функцию значение первого элемента массива! Причем массив у Вас short int (2 байта), а функция - char - 1 байт. Будет преобразование типов, в результате которого Вы потеряете старшую часть значения элемента массива. Скорее всего, компилятор и ругается из-за этого, что размерность данных не совпадает в аргументе вызываемой функции.virus33 писал(а):ЗЫ с таким кодом отправляется только 0b00000001, т.е. записывается только уровень с входа com_0, с других входов уровни не пишутся.
Код: Выделить всё
unsigned char array;
.............
array |= 1 << 0; // установить 0-й бит
array |= 1 << 5; // установить 5-й бит
array &= ~(1 << 2); // сбросить 2-й бит
array &= ~(1 << 7); // сбросить 7-й бит
array = 0xFF; // 255 // установить все биты
array = 0x00; // 0 // сбросить все биты
Код: Выделить всё
volatile uint32_t EEMEM t_og_r[SIZE_TERM];
Код: Выделить всё
uint32_t t_og_r1[15]={177,241,332,467,667,973,145,2238,3520,5670,9420,16180,28680,52700,100700};
eeprom_update_block(t_og_r1,&t_og_r,sizeof(t_og_r1));
Код: Выделить всё
uint32_t X;
uint32_t Y[SIZE_TERM];
...
X = t_og_r[0]; // 0-й элемент пошел в X
for (unsigned char i=0; i<=SIZE_TERM-1; i++) {Y [i] = t_og_r [i];} // копируете весь массив
Код: Выделить всё
#define com_0 RB4
#define com_1 RB5
#define com_2 RB6
#define com_3 RB7
unsigned short int d;
///////////////////////////////////
d = 0b00000000;
if (com_0 == 1){
d |= 0b00000001;
}
if (com_1 == 1){
d |= 0b00000010;
}
if (com_2 == 1){
d |= 0b00000100;
}
if (com_3 == 1){
d |= 0b00001000;
}
send_Usart(d); почему бы просто не использовать логическое ИЛИ. дешево и сердито:
Код: Выделить всё
1<<3 == 0b00001000считать элемент массива из eepromvirus33 писал(а): если в вашем случае необходимо обратиться к 10й ячейке необходимо записать c = t_og_r1[9]
Код: Выделить всё
int EEMEM b=123;
int main(void)
{
int b;
b = eeprom_read_byte(&b);
}