Суть такая, есть массив определенной размерности и если в строке, которая в него отправляется символов больше чем в массиве то происходит что-то странное. Например некоторые переменные сами по себе меняют свое значение, неправильно работает логика и т. д.
Проблему то я решил, сделав массив больше, но я не совсем понимаю почему так могло происходить.
И хотелось бы добавить какую-то проверку чтобы в будущем этого избежать.
Код: Выделить всё
unsigned char usartTxBuf[15]; //передающий буфер
buffer_tx_index = 0;
void USART_PutChar(unsigned char sym)
{
usartTxBuf[buffer_tx_index] = sym; //помещаем символы в буфер
buffer_tx_index++;
}
//функция отправки строки
void USART_SendStr(char * data)
{
unsigned char sym;
while(*data){
sym = *data++;
USART_PutChar(sym);
}
}
buffer_tx_index=0; //эта переменная очищается в нужный момент, перед помещением новой строки в массив
USART_SendStr("какая-то строка");кажется я понял. Получается я вылезал за размерность массива и данные писались куда-то в память, а там были значения переменных и на их место писались левые значения. Добавил вот такую проверку
Код: Выделить всё
void USART_PutChar(unsigned char sym)
{
usartTxBuf[buffer_tx_index] = sym; //помещаем символы в буфер
if(buffer_tx_index < 15-1)
{
buffer_tx_index++;
}
}



