Keresés

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

  • buherton

    őstag

    válasz G.A. #5851 üzenetére

    Nekem eddig egyszer sikerült két csillagos pointert leírnom a saját kódban, mert azzal volt a leghatékonyabb. Különben mindig kerülöm a használatát, mert az ember gyorsan bele tud zavarodni. Ezt javaslom neked is. A Linux függvényei közül is eddig csak eggyel találkoztam, amit két csillagot várt: scandir

    u8b data[] -> ez nagyon csúnya.
    Mitől csúnya? Inkább u8b* data legyen? Még előnybe részesítem a tömböket a pointerekkel szemben, mivel azokat könnyebben kezelem. 8bites uC-n is könnyebben nyomon tudom követni, hogy mennyi RAM-ot is használok...

    u8b data[] -> ezzel fölöslegesen foglalsz 512 bájtot a stacken, ami ugye még processzor idő is. Használj pointert. (Egy ilyen miatt én simán buktatnék egyetemen.)

    A fordítótól függ, hogy hogyan align-olja a structúra változóit. Bár ez 8 bites, így nem valószínű, hogy máshogy align-olna, de a hordozhatóságot javítja.

    , majd ha másolom/küldöm az adatcsomagot akkor a b[]-t használom.

    Másolás ->memcpy, küldés bájtonként pedig char*-al tudsz küldeni. Ergo nem kell a union. Nem is értettem az elején, hogy miért is kellett.

    dns_answer*& dns_response :C

    Szerintem így sokkal olvashatóbb és nem utolsó sorban sokkal helytakarékosabb és gyorsabb.

    void get_data_from_dns_reply(u8b* data, dns_header* dns_resp_header, dns_answer*& dns_response)
    {
    memcpy(dns_resp_header, data, 12);

    dns_response = (dns_answer*)malloc(htons(dns_resp_header->answer_rrs.i) * sizeof(dns_answer));

    for(; data[i] != 0; i++)
    {
    i += data[i];
    }
    i += 5;

    for(u16b j = 0; j < htons(dns_resp_header->answer_rrs.i); j++)
    {
    i += 12;
    memcpy(dns_response[j].data, &data[i], 4);
    i++;
    }
    }

    MOD: ezen a kódon még bőven lehetne optimalizálni, csak nem látom a többi részt.

    MOD2: jah és igen. Malloc + 8 bites MCU? Remélem fut valamilyen OS ezen program alatt, ami a fizikai memóriát rendezi, mert az ilyen malloc-olás magában hordozza azt, hogy a kész programod egyszer beáll, mint a szög. A beágyazott rendszerben alapvetően tiltott a malloc használata.

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