پاسخ : نویز در UART
سلام دادا.
این شیوه کدنویسی برا دریافت کاملاً اشتباهه.
توی این روش هر لحظه امکان تغییر اندیس آرایه وجود داره.
به این کد یه نگاه بنداز. احتمالاً متوجه می شی چطور باید عمل کنی. البته بهتر از اینم میشه نوشت.
توی این بخش کد میتونی با تغییر بازه اندیس دیتا رو ذخیره کنی:
ایراد برنامه شما در زمان صفر کردن اندیس آرایه تونه. بهتره ابتدا کل اطلاعات مد نظر رو از سریال دریافت کنی و بعد از رسیدن آخرین دیتا یه پرچم رو یک کنی. سپس توی حلقه اصلی برنامه به محض دیدن پرچم اطلاعات رو پردازش و در انتها "پرچم رو صفر کنی".
احتمالا توی برنامه شما اندیس آرایه overflow هم میشه که برا جلوگیری از این اتفاق بهترین کار دریافت کل اطلاعات در یه پردازش و اضافه کردن چند بایت ناقابل به آرایه اصلیه.
ضمنا بهتره برا دسترسی به آرایه ها از اشاره گرها استفاده کنی دادا.
سلام دادا.
این شیوه کدنویسی برا دریافت کاملاً اشتباهه.
توی این روش هر لحظه امکان تغییر اندیس آرایه وجود داره.
به این کد یه نگاه بنداز. احتمالاً متوجه می شی چطور باید عمل کنی. البته بهتر از اینم میشه نوشت.
کد:
[/
#define FRAMING_ERROR (1<<FE)
#define PARITY_ERROR (1<<UPE)
#define DATA_OVERRUN (1<<DOR)
#define DATA_REGISTER_EMPTY (1<<UDRE)
#define RX_COMPLETE (1<<RXC)
interrupt [USART0_RXC] void usart0_rx_isr(void)
{
char status,data;
status=UCSR0A;
data=UDR0;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
if (data=='I')
{
rx_wr_index = 1;
}
else if (rx_wr_index == 1 && data=='M')
{
rx_wr_index = 2;
}
else if (rx_wr_index > 1 && rx_wr_index < 6)
{
rx_buffer[rx_wr_index - 2]=data;
rx_wr_index++;
}
else if (rx_wr_index == 6 && data=='A')
{
rx_wr_index = 7;
}
else if (rx_wr_index == 7 && data=='N')
{
rx_wr_index = 0;
DataProcess();
}
else
rx_wr_index=0;
if (++rx_counter == RX_BUFFER_SIZE)
{
rx_counter=0;
rx_buffer_overflow=1;
};
};
}
کد:
else if (rx_wr_index > 1 && rx_wr_index < 6)
{
rx_buffer[rx_wr_index - 2]=data;
rx_wr_index++;
}
احتمالا توی برنامه شما اندیس آرایه overflow هم میشه که برا جلوگیری از این اتفاق بهترین کار دریافت کل اطلاعات در یه پردازش و اضافه کردن چند بایت ناقابل به آرایه اصلیه.
ضمنا بهتره برا دسترسی به آرایه ها از اشاره گرها استفاده کنی دادا.



index1=0; // First Received Character is: $

دیدگاه