ATiny2313+ds18b20 ошибка при измерении температуры

Обсуждаем контроллеры компании Atmel.
andrey_ims
Открыл глаза
Сообщения: 73
Зарегистрирован: Пн июл 01, 2013 22:38:09

Re: ATiny2313+ds18b20 ошибка при измерении температуры

Сообщение andrey_ims »

Аlex писал(а):Исправил :) Плюс добавил вывод отрицательных чисел.

Код: Выделить всё

void mLtoA(signed long val, char* buf){
unsigned char size=0, buf_tmp[10], *p_buf=buf_tmp, s_flag=0;
if(val<0){
    val*=-1;
    s_flag=1;
}
do{
    *p_buf++ = val%10 + '0';
    val/=10;
    size++;
}while(val);
if(s_flag)      *buf++ ='-';
while(size--)   *buf++ = *--p_buf;
*buf=0x00;
}


Ага, спасибо! Правда теперь она выжирает память как и ltoa. Кажется мы нашли в чем была экономия))
Я наверное предыдущий вариант оставлю :-)
Реклама
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: ATiny2313+ds18b20 ошибка при измерении температуры

Сообщение Аlex »

andrey_ims писал(а):Правда теперь она выжирает память как и ltoa.
Странно. Добавилась всего ещё одна 1-байтная переменная :dont_know:
Для вывода нуля в предыдущем варианте, замените

Код: Выделить всё

while(val){
    *p_buf++ = val%10 + '0';
    val/=10;
    size++;
}
на

Код: Выделить всё

do{
    *p_buf++ = val%10 + '0';
    val/=10;
    size++;
}while(val);
и всё будет работать :)
Реклама
andrey_ims
Открыл глаза
Сообщения: 73
Зарегистрирован: Пн июл 01, 2013 22:38:09

Re: ATiny2313+ds18b20 ошибка при измерении температуры

Сообщение andrey_ims »

Аlex писал(а):и всё будет работать :)

да спасибо, уже пофиксил
Ответить

Вернуться в «AVR»