Как добавить uint8_t параметр в uint8_t массив?
Всем доброго времени суток. Уверен это простая проблема, однако я раньше избегал использования char строки. Так, что не могу понять причину.
ЗАДАЧА:
- Как правильно добавлять по одному uint8_t uart_buff в uint8_t uart_str[600] (с i=0)?
Все что мог я проверил, проблема именно в этом. Отдельно uint8_t uart_buff получает значение, а вот uint8_t uart_str[600] только первое. Остальное остается пустым.
Идея была в следующем:
Считать байт типа uint8_t с циклического буфера. С каждым проходом через считывание, добавлять его в конец uart_str[..]. Для того, чтоб в последующем switch->case просто вывести uart_str[..] на консоль. Переменная str задействована в дальнейшем декодировании так, что я решил сохранять входящие команды в отдельном массиве uart_str[..].
ПС: циклический буфер и FuncThatDecodeUART() работают нормально, это видно по результатам декодирования.
ПСС: код для STM32, но уверен причина проблемы не в этом.
void FuncThatDecodeUART(){
ProtocolStruct msg;
ProtocolStatus status;
uint8_t uart_str[600]; ///< Save income command via Uart
uint8_t uart_buf; ///< Buffer for each iteration
while(uart_available()){ ///< return: circular buffer has something!
uint8_t str = uart_read(); ///< 1 uint8_t per call
memcpy( uart_buf, str, sizeof(str)); ///< FIXME: copy for STR security
strcat( uart_str, uart_buf); ///< FIXME: append to UART_STR
if(FuncThatCollectUint8ForDecode(str, &msg, &status)){ ///< return: 1 when MSG is assembled
switch(msg.msgid){
case REQUIRED_COMMAND:{ ///< Required command found
debugPrintlnU8Arr(&huart1, uart_str); ///< Print
}
break;
case OTHER_COMMAND:{
// Ignore
}
break;
}
}
}
memset(uart_str, 0, 256); ///< Clear for next FuncThatDecodeUART() call
}
//------------------------------- debugPrintlnU8Arr(..) -------------------------------
// Custom Print
void debugPrintlnU8Arr(UART_HandleTypeDef *huart, uint8_t uval[]){
HAL_UART_Transmit(huart, uval, strlen(uval), 100);
char newline[2] = "\r\n";
HAL_UART_Transmit(huart, (uint8_t *) newline, 2, 100);
}