[elektro] Nuvoton Cortex-M0 - endian

Info info at kiralyelektronika.hu
Sun Nov 20 19:23:07 CET 2011


> Van rá gyári makro. Ha ezt használod írhatsz gépfüggetlen kódot.
> <http://www.gnu.org/s/hello/manual/libc/Byte-Order.html>

Máshol meg azt írják, hogy óvatosan, nem minden compiler eszi.

> Azért belenéztem a proci utasításkészletébe, hát nem tartana semmiből a
> fordítónak beszúrni egy REV, vagy REV16 -ot a kódba, ha odabiggyesztem a

Ha a __REV16-odat úgy definiálod, hogy mindíg inline legyen akkor
lehet így is fog kinézni a kódban. Persze forrásban télleg ronda :)

Nekem azért nem ugrott be ez a problémád, mert bár túl kellett lépnem
anno ezen nekem is, de már az elején megoldottam:
void _revTCP(t_TCP_hdr * tcp)
{ 
    asm(" push  {r1-r2}       ");
    asm(" ldrh  r1, [r0]      ");       // srcPort
    asm(" rev16 r1,  r1       ");
    asm(" strh  r1, [r0]      ");
    asm(" ldrh  r1, [r0, #2]  ");       // destPort
    asm(" rev16 r1,  r1       ");
    asm(" strh  r1, [r0, #2]  ");
    asm(" ldrh  r1, [r0, #4]  ");       // seqnoL
    asm(" ldrh  r2, [r0, #6]  ");       // seqnoH
    asm(" rev16 r1,  r1       ");
    asm(" rev16 r2,  r2       ");
    asm(" strh  r2, [r0, #4]  ");
    asm(" strh  r1, [r0, #6]  ");
    asm(" ldrh  r1, [r0, #8]  ");       // acknoL
    asm(" ldrh  r2, [r0, #10] ");       // acknoH
    asm(" rev16 r1,  r1       ");
    asm(" rev16 r2,  r2       ");
    asm(" strh  r2, [r0, #8]  ");
    asm(" strh  r1, [r0, #10] ");
    asm(" ldrh  r1, [r0, #14] ");       // wndSize
    asm(" rev16 r1,  r1       ");
    asm(" strh  r1, [r0, #14] ");
    asm(" ldrh  r1, [r0, #16] ");       // tcpChksum
    asm(" rev16 r1,  r1       ");
    asm(" strh  r1, [r0, #16] ");
    asm(" ldrh  r1, [r0, #18] ");       // urgPtr
    asm(" rev16 r1,  r1       ");
    asm(" strh  r1, [r0, #18] ");
    asm(" pop   {r1-r2}       ");
}

Aztán ahogy beesik csere, így az egész progban nem kellett foglalkozni
vele, ki is ment a fejemből. Most, hogy belenéztem a kódba, a
visszafele cserlélést a checksum számítással egyberaktam, az is így
volt egyszerűbb.



More information about the Elektro mailing list