нет, не то. Т.к. есть др. проект, где я использую этот же файл и эту же запись- все работает там.
в новый файл я добавил printf и запись
Код
extern int snprintf(char* buf, unsigned int size, const char* fmt, ...);
#define printf(...) \
do { char printf__buf[32]; \
snprintf(printf__buf, 32, __VA_ARGS__); \
putString(printf__buf); } \
while (0)
и вот этот Сишный кусок
Код
int snprintf(char* buf, unsigned int size, const char* fmt, ...) {
char* buf_start=buf, * buf_end=buf+size-1;
const int* va=(int*)(&fmt)+1;
char tmpbuf[32];
while (*fmt && buf<buf_end) {
char c=*fmt++;
if (c=='%') {
char* q0=tmpbuf, * q1=tmpbuf;
int w=0;
while (*fmt>='0' && *fmt<='9') { w=w*10+(*fmt++)-'0'; }
c=*fmt++;
switch (c) {
case '%': *buf++='%'; break;
case 'c': *buf++=(char)(*va++); break;
case 'd': {
int i=*va++, s=0;
q0=q1=tmpbuf+sizeof(tmpbuf);
if (!w) ++w;
if (i<0) { i=-i; s=1; }
while (i || w>0) { *--q0='0'+(i%10); i/=10; if (w) --w; }
if (s) { *--q0='-'; }
break;
}
case 'x': {
uint32_t x=*va++;
q0=q1=tmpbuf+sizeof(tmpbuf);
if (!w) ++w;
while (x || w>0) { *--q0="0123456789abcdef"[x&0x0F]; x>>=4; if (w) --w; }
break;
}
case 's': {
q0=(char*)(*va++);
q1=q0;
while (*q1) ++q1;
break;
}
}
while (q0<q1 && buf<buf_end) *buf++=*q0++;
}
else *buf++=c;
}
*buf=0;
return buf-buf_start;
}
причем этот кусок без проблем компилится и работает под STM32, а тут нет. Разница- различные выводы символа и строки тут и там.