logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[avr][c] wskaźnik do rejestru (OCR1A, OCR1B)

jereq 04 Mar 2010 20:11 2007 4
  • #1 7784011
    jereq
    Poziom 10  
    Witam,

    Mam następujący problem. Programuje w WinAVR, Atmega8, C.
    Chcę stworzyć wskaźnik do rejestru OCR1A lub OCR1B

    Tworzę wskaźnik
    uint16_t *reg;
    


    a następnie wiąże go z rejestrem OCR1A

    reg = &OCR1A;
    


    Choć program działa, kompilator wywala warning:
    warning: assignment discards qualifiers from pointer target type

    Domylam się, że chodzi o to, że typ uint16_t nie do końca pasuje, do typu rejestru OCR1A. Jakiego typu powinien być wskaźnik, żeby wszystko było jak należy?
  • #2 7784318
    rpal
    Poziom 27  
    no to niech kolega pomyśli co się za tym OCR1 kryje ? Może coś takiego _SFR_IO8 (..)?
    a znak &zmienna to nic innego jak pobranie adresu zmiennej znajdującej się gdzieś w pamięci więc się nie ma czemu dziwić.
    mało tego twoja zmienna reg w swojej deklaracji unsigned int *reg może pobierać adresy innych zmiennych tego samego typu czyli przykładowo reg=&zmienna może być tylko słuszne kiedy "zmienna" będzie typu unsigned int.
  • Pomocny post
    #3 7784356
    zumek
    Poziom 39  
    jereq napisał:
    ...Jakiego typu powinien być wskaźnik, żeby wszystko było jak należy?

    volatile uint16_t
  • #4 7789586
    piwcci
    Poziom 12  
    Bardzo ciekawe. Nigdy wcześniej nie wpadłem na to, żeby pod wskaźnik podstawić adres rejestru. Czyli z tego wynika, że wskaźnik musi być typu volatile i bedzie smigało???
  • #5 7795453
    jereq
    Poziom 10  
    Zgadza się, z volatile działa!
REKLAMA