Hirdetés

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

  • Karma
    félisten

    Sziasztok!

    A múltkori struktúrás kérdésemre kapott válaszokat köszönöm. Sajnos valamiért nem akart összejönni a dolog, így kicsit módosítottam a dolgokon.

    Adott egy .c fájl amiben megvalósítom a meghívható get_Signal függvényt
    ennek a paramétere egy struktúrára mutató pointer, amiben át kell adnom egy lokálisan tárolt struktúrát, aminek az értékeit csak egyszer adom meg és onnantól ne lehessen módosítani

    signal.h:
    typedef struct{
    Signal_Types name;
    uint16_t id;
    uint8_t pos;
    uint8_t length;
    uint8_t order;
    float factor;
    float offset;
    }Signal_TypeDef;

    signal.c
    static Signal_TypeDef SIGNALS[9];
    uint8_t CAN_Signal_Init()
    {
    SIGNALS[NEW_SIGNAL_12].name = NEW_SIGNAL_12__NAME;
    SIGNALS[NEW_SIGNAL_12].id = NEW_SIGNAL_12__ID;
    SIGNALS[NEW_SIGNAL_12].pos = NEW_SIGNAL_12__POS;
    SIGNALS[NEW_SIGNAL_12].length = NEW_SIGNAL_12__LENGTH;
    SIGNALS[NEW_SIGNAL_12].order = NEW_SIGNAL_12__ORDER;
    SIGNALS[NEW_SIGNAL_12].factor = NEW_SIGNAL_12__FACTOR;
    SIGNALS[NEW_SIGNAL_12].offset = NEW_SIGNAL_12__OFFSET;
    ...
    }

    uint8_t get_Signal(SignalName name, Signal_struct** signal)
    {
    *signal = &SIGNALS[name];
    }




    main.c:

    Signal_Struct* signal;

    get_Signal(NWE_SIGNAL_12, &signal);

    signal->id = 0x200; //ez ne tudjon lefutni vagy jelezzen a fordító hibát

    Az utolsó sort kellene valahogy megoldanom, hogy ne tudjak a struktúrába módosítani.

    A válasz meg még mindig az, hogy írj egy
    uint16_t signal_get_id(const signal_struct const* signal)
    {
    return signal->id;
    }

    függényt a signal.c-be, és a struktúra tagdefinícióját is átrakod oda. A headerben meg csak a forward deklarációk maradnak, így ha a headert használja valaki, nem tudja még a tagok offszetjét ye, ergo nem tudja változtatni.

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