Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить

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

Вс июл 16, 2017 03:23:54

Доброго времени суток, подскажите как ограничить размер строки в функциях 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. Но число выводится полностью.

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

Вс июл 16, 2017 07:39:56

как ограничить выводную переменную.То есть buf_2=-25365, а вывести мне надо -253 или последние 65.
[...]
Пробовал запись b_1=%2x. Но число выводится полностью.

Согласно спецификации 2 здесь гарантированная ширина поля вывода а не максимально доступная. Поэтому и "распирает".

A "oтбить сотые" можно делением:
Код:
printf("%d.%02d", buf_2 / 100, buf_2 % 100);

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

Пн июл 17, 2017 16:51:14

А зачем взваливать всё это на sprintf ? Что мешает просто вывести 4 первых символа в массиве ?

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

Вт июл 18, 2017 08:26:46

Siarzhuk, такой вариант рассматривал.Но он требует математических операций, в принципе при достатке памяти можно и воспользоваться. Как понял что в XC8 sprint,print вводимую строку нельзя ограничить, что бы не "портить" старшие регистры при переполнении массива.
Аlex, ничего не мешает.Цель обучится работе с компилятором XC8.

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

Вт июл 18, 2017 09:54:59

EclipsV, компилятор тут не при чём. sprintf в любом компиляторе не умеет ограничивать строку, а не только в XC.

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

Вт июл 18, 2017 10:05:50

Siarzhuk, такой вариант рассматривал.Но он требует математических операций, в принципе при достатке памяти можно и воспользоваться.

Перефразируя известную пословицу: Связавшись с printf-ом по байтикам не плачут. В XC8 printf конечно уоптимизированый и хитро-встраиваемый, но printf - это printf - загляните в map-файл сколько чего он за собой тащит при использовании его в проекте. :)
Как понял что в XC8 sprint,print вводимую строку нельзя ограничить, что бы не "портить" старшие регистры при переполнении массива.

Практика - критерий истины. © Увы.
Ответить