[avr-gcc] znow te wskazniki (wrr)

Nov 05, 2004 3 Replies

Witam, juz mnie szewska pasja dopadla :)



struktura z danymi o pierwszym wolnym adresie we flashu (at45db011) struct Flash_Addr{ u16 Page_Addr; u16 Byte_Addr; };



prototyp: void FlashMem_write_block (void *Buff, Address_t *Addr, size_t n);



funkcje ma zapisywac dowolna dana od bajtu do struktury. np.



struct Store{ u16 Store_Data; u16 Store_Time; u32 Store_Param; };



wywolanie: FlashMem_write_block (&Store, &Flash_Addr, sizeof(Store));



no i przy kompilacji wywala: warning: passing arg 1 of `FlashMem_read_block' discards qualifiers from pointer target type warning: passing arg 2 of `FlashMem_read_block' discards qualifiers from pointer target type



nadmienie tylko ze w funkcji sa modyfikowane zmienne Store oraz Flash_Addr. Krew mnie zalewa :(


void FlashMem_write_block (volatile void *Buff, volatile Address_t *Addr, size_t n); to wiem ze pomoze, ale czy to jest prawidlowe wyjscie?

Zdefiniowales typ strukturalny, a nie zdefiniowales zmiennej !

Teraz albo: a) zmieniasz na struct { u16 Page_Addr; u16 Byte_Addr; } Flash_Addr;

[nie bardzo polecam - zazwyczaj typ strukturalny sie przydaje]

b) zmieniasz na struct Flash_Addr { u16 Page_Addr; u16 Byte_Addr; } Flash_Buf;

- definiujesz typ "flash_addr" i zmienna "Flash_buf"

c) dodajesz

Flash_Addr Flash_Buf;

Czyli definiujemy zmienna typu Flash_addr - a wiec strukture.

Bo mniej wiecej napisales cos typu FlashMem_write_block (& float, & int , sizeof(float));

Przyznasz chyba ze dwa pierwsze argumenty sa glupota :-)

J.

w sumie chcialem to za bardzo uproscic zeby bylo czytelne i wyszla bzdura. bo wyglada to tak:

typedef struct { u16 Page_Addr; u16 Byte_Addr; }Address_t;

Address_t Flash_Addr;

prototyp: void FlashMem_write_block (void *Buff, Address_t *Addr, size_t n);

FlashMem_write_block (&Store, &Flash_Addr, sizeof(Store));

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required