mplab C30 printf

Jozef Kajan svk421@zoznam.sk
Úterý Duben 1 17:24:57 CEST 2008


Vdaka za vsetky reakcie, skusim ich spojit do jednej odpovede:

> Lukas Grepl
> Rozhodne je divna ta inkrementace void * buffer, videl bych to spis takto:

Ano, toto naozaj nebolo korektne. Vychadzal som zo zdroja

http://support2.microchip.com/KBSearch/KB_StdProb.aspx?ID=SQ6UJ9A009MTU

write(int handle, void *buffer, unsigned int len)
{
...
*writereg++ = *(char*)buffer++;
...
}

Ale kedze nemam rad konstrukcie, kde sa v jednom riadku robi aj 
inkrement smernika, hodil som to do dalsieho riadku, nevsimnuc si ten void.
Ani po oprave to zatial nechodi.


> Petr Simek
> Debug-ujte funci ktera ten retezec vytvari, jestli se pak opravdu v pameti
> objevi. Taky kde se bere to 'len' jestli treba neni natvrdo nastavene na 1
> pri volani te funkce write...

Je problem to debugovat nizsie, lebo parametre pre write vytvara priamo 
printf, a ta nie je k dispozicii v C zdrojakoch (je to stdlib). Mozem to 
sice na urovni asm, ale to az ked zlyha vsetko ostatne.


> andrej jancura
> Ale ja osobne by som to riesil funkciou sprintf do RAM a z RAM by som si
to poslal 
> vlastnou rutinou na display alebo seriovy port. 

sprintf sice funguje (to som vyskusal hned, ked zacali problemy), ale robit
to takto je hlupost. Musi to fungovat aj priamo. Pre nizsie rady PIC to 
pouzivam uz roky bez problemov (s hitech kompilatorom)
Tam sa uzivatelsky nadefinuje len putch(), a printf ten putch sam vola.

> Osobne tipujem na chybu v tomto riadku:
> putch(*(char*)buffer);
> Preco si to nenapises normalne cez Buffer[], a neprepises to potom na
> adresy?! Ved tej funkcii putch() je jedno, co jej posielas, ci adresu prvku
> pola alebo to iste cez pomocny pointer...

Ta konstrukcia je v poriadku, ale ani iny zapis zmenu nepriniesol. Problem
zostava v tom, ze printf spravne nepripravi cely retazec, ale jeden len 
prvy znak. Ako som pisal prvykrat, ked to brejknem vo vnutri funkcie write,
retazec v ramke ma naozaj len jeden znak. Este je moznost, ze je to normalne
a printf vola write() pre kazdy znak samostatne, len z nejakeho dovodu sa 
viackrat nezavola.



--- reklama -----------------------------------------------------
500.000 slovákov si píše cez Zoznam ICQ
http://icq.zoznam.sk/



Další informace o konferenci Hw-list