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

Keil - problem z zglaszaniem zmiennej pod konkretny adres

pawel_5 27 Mar 2008 21:34 1906 6
REKLAMA
  • #1 4962741
    pawel_5
    Poziom 13  
    Posty: 131
    Ocena: 1
    Witam,

    Borykam się z zamieszczeniem pewnych wartości pod konkretny wskazany adres i to bez znaczenia czy ma to być xdata, data czy code.
    Dla środowisk RC-51 istnieje swobodne umieszczanie zmiennych lub stałych w pamieci, oto przykład:

    at 0x20 data char zmienna1;   //umieszcza w pamięci RAM pod adresem 0x20 zmienną


    Niestety ta dyrektywa nie jest rozpoznawalna przez środowisko KEIL, czy ktoś z Panstwa wie jak umieści pod ścisle określonym adresem zmienne?

    Potrzebne jest to gdyż musze się podeprzeć assemblerem by mieć pewność że to zostanie wykonane na danej ilości rozkazów, dodam że podprogram napisany w assemblerze będzie własnie operował na zmiennych wpisanych w podprogramie C i będzie również pozostawiał zmienne dla dalszej części programu w C.

    Jeszcze jedno pytanie, jak umieścić wstawki assemblera w C?
  • REKLAMA
  • REKLAMA
  • #3 4962964
    michh
    Poziom 12  
    Posty: 70
    Pomógł: 3
    Ocena: 22
    Wstawki asm, wstawiasz w ten sposób:
    #pragma asm

    //kod w asm

    #pragma endasm

    Deklaracja zmiennej w konkretnej komórce pamięci ram zewnętrznej:
    char xdata text[256] _at_ 0xE000;

    Trzeba podać typ zmiennej (char,int itd.), w jakiej pamięci(idata,bdata itd.) później deklaracja _at_ i miejsce w pamięci(początek miejsca w pamięci) to znaczy adres.

    wszystko jest w manualu od str. 96. Manual można znaleźć wpisując w wyszukiwarce c51.pdf.
  • REKLAMA
  • REKLAMA
  • #5 4963155
    pawel_5
    Poziom 13  
    Posty: 131
    Ocena: 1
    Super, dzięki wielkie - działa adresowanie pamięci !! :)
    Natomiast jeśli chodzi o wstawki assemblera, czy mogę zapisać to np. w ten sposób?:

    void podprogram()
    {
    
    #pragma asm 
    
    //kod w asm 
    
    #pragma endasm 
    }


    Bardzo lubię czytać i sam rozwiązywac problemy natomiast pytanie jest gdzie?- tzn. przeglądałem HELP w Keil, może zbyt powierzchownie, niestety nie znalazłem wielu informacji. Moze można znależć user manual konkretnie dla `51 w powiązaniu z Keil?
  • #6 4963245
    markosik20
    Poziom 33  
    Posty: 2261
    Pomógł: 208
    Ocena: 147
    pawel_5 napisał:

    Bardzo lubię czytać i sam rozwiązywac problemy natomiast pytanie jest gdzie?- tzn. przeglądałem HELP w Keil, może zbyt powierzchownie, niestety nie znalazłem wielu informacji. Moze można znależć user manual konkretnie dla `51 w powiązaniu z Keil?


    Żeby robić wstawki ASM poczytaj o SRC.

    Manual jest "wbudowany" :wink:.
    Keil - problem z zglaszaniem zmiennej pod konkretny adres
  • #7 4966058
    pawel_5
    Poziom 13  
    Posty: 131
    Ocena: 1
    dzieki wielkie szanowni Koledzy:D :lol:

Podsumowanie tematu

✨ Problem dotyczył deklaracji zmiennych pod konkretnym adresem w pamięci w środowisku Keil dla mikrokontrolerów 8051, gdzie standardowa dyrektywa "at" znana z RC-51 nie działała. Rozwiązaniem jest użycie składni Keil: typ zmiennej, przestrzeń pamięci (np. data, xdata) oraz deklaracja z użyciem "_at_" i adresu, np. "unsigned char data dana2 _at_ 0x20;". Wstawki assemblera w kodzie C można umieszczać za pomocą dyrektyw #pragma asm i #pragma endasm. Dokumentacja Keil (manual C51) zawiera szczegółowe informacje na ten temat, a także warto zapoznać się z mechanizmem SRC dla wstawek ASM. Przykłady i wskazówki potwierdziły poprawność takiego podejścia, umożliwiając współpracę kodu assemblera z kodem C oraz precyzyjne adresowanie zmiennych w pamięci.
Wygenerowane przez model językowy.
REKLAMA