Пока я могу отправлять строки, числа и т. Д. Через uart. Приведенный ниже код выполняется на встроенном устройстве (atmega328p) и отправляет данные на мой ноутбук, на котором работает шпаклевка:
void main(void)
{
/* Works fine */
int16_t a = 132;
char data[100] = {0};
sprintf(data, "%"PRId16, a);
libuart_send("a: ", strlen("a: "));
libuart_send(data, strlen(data)); //works fine
/* Below doesn't work */
double l_data = 132.34;
char data[100] = {0};
sprintf(data, "%f", l_data);
libuart_send("f: ", strlen("f: "));
libuart_send(data, strlen(data)); //doesnt work
}
void libuart_send(void *p_data, int p_data_size)
{
assert(p_data != NULL);
assert(p_data_size > 0);
for(int i = 0; i < p_data_size; i++)
{
/* Wait for empty transmit buffer. */
while ( !( UCSR0A & (1<<UDRE0)) );
/* Put data into buffer, sends the data. */
UDR0 = *(((signed char*)(p_data)) + i);
}
}
При отправке float на мой терминал замазки вместо фактического значения float отображается знак вопроса. Почему?
Спасибо
РЕДАКТИРОВАТЬ: Это PDF-версия таблицы данных, которая объясняет, что помимо прочего делает UDR0 (см. Стр. 195/452): https://www.sparkfun.com/datasheets/Components/SMD/ATMega328.pdf