Код
struct StatusStruct {
volatile unsigned char RXbusy;
volatile unsigned char TXbusy;
unsigned char RXbuffer[15];
unsigned char TXbuffer[15];
unsigned char DataForSend[15];
unsigned char RXdataSize;
unsigned char TXdataSize;
unsigned char RXcurrentByte;
unsigned char TXcurrentByte;
unsigned char ADCrawData[20];
unsigned char ConversionChannel;
unsigned char ConversionType; // 1 - All; 2 - One
unsigned char DataForSendSize;
unsigned char DataCurrentSendByte;
} Status;
......
.....
ISR(USART_RXC_vect){
unsigned char Rbyte, ByteCount;
volatile unsigned char a;
Rbyte = UDR;
if (Status.RXcurrentByte < 15){
Status.RXbuffer[Status.RXcurrentByte] = Rbyte;
Status.RXcurrentByte++;
a = Status.RXbuffer[Status.RXcurrentByte-2];
if ((Rbyte == 0xBC) && (a==0xBB)){
ByteCount = Status.RXcurrentByte-1;
Status.RXcurrentByte = 0;
DecodeFrame(ByteCount);
}
} else {
Status.RXcurrentByte = 0;
}
}
Во-первых в Wach про переменную a сказано Location not valid. Пока она не была volatile при отладке он просто перескакивал через строку
a = Status.RXbuffer[Status.RXcurrentByte-1];
А сейчас не перескакивает, но толку мало. в а все равно ничего не появляется и
if ((Rbyte == 0xBC) && (a==0xBB)){
всегда дает ложь. Причем реально данные в
Status.RXbuffer[Status.RXcurrentByte] = Rbyte;
записываются. Это видно в окошке Memory (Data) данные там действительно появляются.
структура Status объявлена глобально.
Сообщение отредактировал Skaf - Nov 1 2009, 10:02