Ez egy C ben írt program és valaki el tudná magyarázni hogyan kell értelmezni a második sort: void putsUART2 (unsigned int *buffer) { char * temp_ptr = (char *) buffer; ?
csak c++t ismerem de:
nincs visszatérési értéke,
putsUART2 a methód neve
unsigned = csak potitív
buffer egy memóriaterület, így ha a blokkban ({}-belül) megváltoztatják az értékeét akkor máshol is megváltozik
és a blokkon belül:
temp változó legyen buffer változóval 1enlő (ami az input)
ptr = pointer = memória területre való hivatkozás ezt jelenti a * jel
hja intet kap inputként
a karakterek igazából egy karaktertábla indexelt karakterei, tehát minden karakternek van egy sorszáma, és ezt kapja meg és átalakítja karakterré talán de nem vagyok benne 100% biztos
Köszönöm az eddigi válaszokat, a pointer működését értem.
Itt a pointer aritmetika lenne érdekes ami a második sorban van. Ez valami típus kényszerítéses megoldás, de nekem egyenlőre zavarosnak tűnik. Újra itt bemásolva:
char * temp_ptr = (char *) buffer;
A char C-ben mindig 1 bájt. Ez annyit csinál hogy felkészíti a metódust hogy felszeletelje a buffert bájtokra és majd bájtonként dolgozza fel és küldje el az adatot (ha már UART-ról van szó). A buffer int-re, azaz 2/4/8 bájtos adategységekre mutat, de a temp_ptr megkapja ugyan azt a címet úgy, hogy megpróbálja elhitetni a fordítóval hogy ott 1 bájtos egységek vannak és nem int-ek. A memória tartalma ugyan az marad, de így már bájonkét fogja kiolvasni, és nem 4 bájtonként pl.
Annyit hozzá fűznék a kódhoz hogy mivel az int mérete nem kötött, ha egyik architektúráról elküldjük az adatot UART-on keresztük egy másik architektúrára, az adat visszaállítása nem lesz egyértelmű., továbbá a bájt sorrend is architektúra függő amit nem ilyen "hackelős" pointer konverzióval szoktak feloldani hanem shift operátorral.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!