Страница 3 из 3

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

Добавлено: Вс сен 15, 2013 12:14:14
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. Кажется мы нашли в чем была экономия))
Я наверное предыдущий вариант оставлю :-)

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

Добавлено: Вс сен 15, 2013 12:18:42
А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);
и всё будет работать :)

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

Добавлено: Вс сен 15, 2013 14:03:39
andrey_ims
Аlex писал(а):и всё будет работать :)
да спасибо, уже пофиксил