В общем убрал кольцевой буффер и сделал вот так:
Код
#define BUFFER_SIZE 200
unsigned char buffer[BUFFER_SIZE]; // приемный буффер
unsigned char startCommunication[] = {0x81,0x10,0xf1,0x81,0x03};
volatile unsigned char counter;
// USART Receiver interrupt service routine
interrupt [USART_RXC] void usart_rx_isr(void)
{
char status,data;
status=UCSRA;
data=UDR;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
buffer[counter]=data;
counter++;
if (counter >= BUFFER_SIZE) {
counter = 0;
}
}
}
Если вдруг буффер переполнится то пишем данные в его начало. Просто не сойдется контрольная сумма. Получим данные при следующем запросе.
Теперь отправка команды.
Код
void SendCommand (unsigned char *command) {
counter = 0;
while (*command) {
while(!(UCSRA & (1<<UDRE))); // ждем окончания передачи байта
UDR = *command++;
}
}
Использование:
Код
SendCommand(startCommunication);
Работает (смотрю COM порт сниффером). Но если написать:
Код
flash unsigned char startCommunication[] = {0x81,0x10,0xf1,0x81,0x03};
То на строчке:
Код
SendCommand(startCommunication);
Выдает ошибку:
Error:
function argument #1 of type 'flash unsigned char [5]' is incompatible with required parameter of type 'unsigned char *'Я так понимаю нельзя со строкой из флеша напрямую работать. Так то конечно всё равно, но строчки статичные, пусть лучше во флеше лежат. Как то можно к ним обратиться в моём случае?
Сообщение отредактировал mr_smit - Dec 18 2011, 09:14