sprint,print в компиляторе XC8

Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить
EclipsV
Первый раз сказал Мяу!
Сообщения: 37
Зарегистрирован: Ср фев 27, 2013 01:30:10

sprint,print в компиляторе XC8

Сообщение EclipsV »

Доброго времени суток, подскажите как ограничить размер строки в функциях sprint,print. Вроде должно быть что то вроде snprint, но такой в компиляторе нет.И как ограничить выводную переменную.То есть buf_2=-25365, а вывести мне надо -253 или последние 65.
Код такой использую:
char mass_buf[15]; //массив
int buf_1; // переменная 1
int buf_2; // переменная 2
.......
.......
sprintf(mass_buf,"b_1=%x b_2=%d",buf_1,buf_2);
.......
.......
Если строка больше массива, то "портятся" другие регистры.
Пробовал запись b_1=%2x. Но число выводится полностью.
Аватара пользователя
Siarzhuk
Потрогал лапой паяльник
Сообщения: 353
Зарегистрирован: Вс янв 19, 2014 22:41:55

Re: sprint,print в компиляторе XC8

Сообщение Siarzhuk »

[uquote="EclipsV",url="/forum/viewtopic.php?p=3145816#p3145816"]как ограничить выводную переменную.То есть buf_2=-25365, а вывести мне надо -253 или последние 65.
[...]
Пробовал запись b_1=%2x. Но число выводится полностью.[/uquote]
Согласно спецификации 2 здесь гарантированная ширина поля вывода а не максимально доступная. Поэтому и "распирает".

A "oтбить сотые" можно делением:

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

printf("%d.%02d", buf_2 / 100, buf_2 % 100);
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: sprint,print в компиляторе XC8

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

А зачем взваливать всё это на sprintf ? Что мешает просто вывести 4 первых символа в массиве ?
EclipsV
Первый раз сказал Мяу!
Сообщения: 37
Зарегистрирован: Ср фев 27, 2013 01:30:10

Re: sprint,print в компиляторе XC8

Сообщение EclipsV »

Siarzhuk, такой вариант рассматривал.Но он требует математических операций, в принципе при достатке памяти можно и воспользоваться. Как понял что в XC8 sprint,print вводимую строку нельзя ограничить, что бы не "портить" старшие регистры при переполнении массива.
Аlex, ничего не мешает.Цель обучится работе с компилятором XC8.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: sprint,print в компиляторе XC8

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

EclipsV, компилятор тут не при чём. sprintf в любом компиляторе не умеет ограничивать строку, а не только в XC.
Аватара пользователя
Siarzhuk
Потрогал лапой паяльник
Сообщения: 353
Зарегистрирован: Вс янв 19, 2014 22:41:55

Re: sprint,print в компиляторе XC8

Сообщение Siarzhuk »

[uquote="EclipsV",url="/forum/viewtopic.php?p=3146928#p3146928"]Siarzhuk, такой вариант рассматривал.Но он требует математических операций, в принципе при достатке памяти можно и воспользоваться.[/uquote]
Перефразируя известную пословицу: Связавшись с printf-ом по байтикам не плачут. В XC8 printf конечно уоптимизированый и хитро-встраиваемый, но printf - это printf - загляните в map-файл сколько чего он за собой тащит при использовании его в проекте. :)
[uquote="EclipsV",url="/forum/viewtopic.php?p=3146928#p3146928"]Как понял что в XC8 sprint,print вводимую строку нельзя ограничить, что бы не "портить" старшие регистры при переполнении массива.[/uquote]
Практика - критерий истины. © Увы.
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)
Ответить

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