Страница 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-байтная переменная
Для вывода нуля в предыдущем варианте, замените
Код: Выделить всё
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 писал(а):и всё будет работать

да спасибо, уже пофиксил