mplab C30 printf

andrej jancura hw_aj@zoznam.sk
Středa Duben 2 08:58:06 CEST 2008


Ahoj,

> andrej jancura  wrote / napísal(a):
> > Ahoj,
> >
> > takze ja to mam robene takto:
> >
> > unsigned char	  TxD_Data;		  // pomocny register
> > const unsigned char   *TxD_Pointer_Rom;	  // adresa retazca v ROM
> >
> > .....
> >
> >   
> 
> Vdaka za ochotu, ale popravde moc nerozumiem ako to suviselo s mojim 
> problemom. 

Ja som to videl tak, ze tam mas problem s tym void a char pointerom. 

Dnes rano ma este napadlo, skus si do putch() implementovat jednoduchy zapis
do RAM-ky. Potom si v dbg pozries, ci to mas v RAM alebo nie. Rozdiel je len
v tom, ze nezapisujes do vystupneho registra, ale do RAM.

> Ak uz raz pouzijes v kode sprintf, robit vypisy cez nejake 
> vlastne buffrovanie je zbytocne. Ten printf  naozaj funguje - a zistil 
> som, ze aj ten moj.

Hej mas pravdu, lenze ja pouzivam vlastne rutiny konverzie dat, pretoze
standartny printf je zbytocne velky, vola vela rutin a hlavne nastavuje vela
parametrov na stack!!! 

> Chyba bola niekde inde, nie vo funkcii write(). 
> Tato funkcia sa vola pre kazdy znak zvlast, teda nie ako som ocakaval 
> podla jej vstupnych parametrov (ze jej printf pripravi naraz cely 
> string). To ze mne sa zavolala iba raz, ma na svedomi moja implementacia 
> putch(). Vypada to, ze nieco v nej posaha stack. 

Ak mas podozrenie na pretecenie stacku, pozri si nejakou utilitkou, ktora ti
skontroluje kolko RAM ti zaberie. Nezabudni pritom na vsetky, ale uplne
vsetky, lokalne premenne, ktore su aktivne v danom okamihu vratane
predavanych parametrov.

Ja som sa kedysi trapil s podobnym problemom na 51 v small-modeli, sw mi
fungoval, ale po case spadol. Chyba bola prave pretecenie zasobnika, ked sa
objavili interrupty v spravnej kombinacii s main-om. Jedine riesenie bolo
prepisat niektore pasaze sw uplne nanovo.

A.



--- reklama -----------------------------------------------------
Nájdi už konečne tú správnu cestu!
http://mapy.zoznam.sk



Další informace o konferenci Hw-list