
Microchip C32 - printf, sprintf
Та изпаднах в ситуацията да се радвам на микрочепски творения отново. Положението е следното: имам един код за pic32, версията на компилатора мисля е 1.12, кода е пълен с printf, sprintf. По дефоут те са насочени към UART1 и UART2 мисля, като това ми е ясно как мога да го превключвам, но не ми върши работа - трябва ми към друг UART. Ок, те могат да бъдат предефинирани от потребителя - слънце, направих го с va_ ... , сега принтвам към UART4. Обаче printf не се справя с %s. За всичко друго е ок - %c, %d, %x, %f - наред са. Обаче като му дам %s и .... ами нищо? минава си през функцията като пръдня през комарник - малко забавя и това е, на терминала липсва каквото и да е. А по-тъпото е, че като предефинирам printf логично не мога да го дебъгна, т.е. не се влиза в него, просто се изпълнява ":)" . Тоя тип издънаки някой да ги е срещал и да има решение?
Трябва ми да мога да изпълня нещо от типа:
 |  |  |
 | Код: sprintf(buf, "bla-bla-bla %d, %d, %d !", i, j, k) printf("String: %s, data value: %d, code: %x", buf, data_val, code_val); // където buf е масив с нещо |  |
 |  |  |
Примера е ясно, че е безсмислен, но не ми казвайте да ползвам нещо друго лично изписано вместо (s)printf - то идеята е да го пренапиша и се замества в кодовете.
Можеш ли да имаш 6 UART-а и да поддържаш софтуерно само 2, като е ясно, че за останалите 4 просто сменяш цифри?! Мързел ли им е да довършват нещата, какво ли ...
Edit: Ама и аз както обяснявам - за опити вместо функцията printf/sprintf използвам my_printf/my_sprintf т.е. еквивалента на оригиналните (като аргументи и държание) и явно е напълно функционална и за %s. Обаче явно не успявам да предефинирам както си трябва printf/sprinf, защото продължава да ползва тях вместо моята и за това имаше заблуда, че стринга не го изкарава, а то нищо не е изкарвало - текста с параметри идва от моите функции ... мда ... Как става това безболезнено?