Új hozzászólás Aktív témák

  • don_peter
    senior tag

    Bocsánat, nem tudtam, hogy ilyen PIC-et használsz. Valamiért egy PIC16 rémlett. 32 kB flash, 2 kB RAM már jobban mutat.

    Pár észrevétel:
    - SSPCON1 regisztert illetve a társait valahogy el lehet érni bájtként, és akkor nem bitekkel kell majmolni. Nem mellesleg ha jó a fordító, akkor ezeket nem optimalizálja ki és mindenegyes sor egy 2 bájtos parancs.
    - *pbuf++=spi_io(0x00); -> ez így elég meredek. Inkább így
    for (i=0; i < PMEMBLOCK; i++) {
    *(pbuf+i)=spi_io(0x00);
    }

    és már mehet is a const az argumentumba és biztonságosabb is így, mert a memória címe nem változik.
    - while(!SSPSTATbits.BF); -> lehet ilyeneket használni, de akkor tegyél bele watchdogot (ez önmagában ajánlott), vagy timeout-t, mert ezek nélkül a jövőben okozhat problémát.

    Az a probléma hogy a for cikluson belül olvas ki több lapot, vagy a while cikluson belül?

    Igen PIC18F4550-et használok amelynek azért tágasabb a felhasználható memóriája..
    A régebben felmerülő tömb problémát megoldottam már szóval az oké...

    "SSPCON1"
    Azért írtam meg bitenként a beállítást, hogy megtanuljam és mindig, ha vissza keressem értsem mit miért állítottam be.
    Nekem így átláthatóbb mint ha egy sorba a 8bit-et állítom.
    Ezek a beállítások egy init() függvényen belül vannak így nem zavarnak programozás közben, csak ide az átláthatóság miatt másoltam be...
    De, ha már nem lesz rá szükség akkor 1bájtos parancsként fogom én is megírni a beállításokat.

    "Az a probléma hogy a for cikluson belül olvas ki több lapot, vagy a while cikluson belül?"
    Ezt a kérdést nem értem.
    A kiolvasással nincs gond..még :D
    A beírás nem oké.
    A kiolvasásnál én állítom be mennyi sor olvasson ki az szerintem jól működik, de a beírás...

    A következőket vettem észre még tegnap esete:
    Kíváncsiságból vissza olvastattam 100x32 byte-nyi területet és a következőket tapasztalom: (hátha rávilágít a hibára)
    Minden 256-odik byte címzésénél 1 byte-tal kevesebbet írt be a memóriába és (32*8)*32 == (8192)byte után válik teljesen üres a memória.
    Fura....

    Kipróbálom ez a "*(pbuf+i)=spi_io(0x00);" verziót.
    Az a baj, hogy még a mutatókat nem látom át teljesen.

Új hozzászólás Aktív témák