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

[89s52] Jak umieścić duże ilości danych w pamięci programu w Keil dla 89s52?

Defectus 10 Lip 2008 10:04 1719 2
REKLAMA
  • #1 5329599
    Defectus
    Poziom 11  
    Posty: 5
    Ocena: 1
    Witam,

    Pisze program w C w srodowisku Keil uVision2. ( procek atmel 89s52 )
    Program prosty, jednak korzysta z duzej ilosci danych wiec potrzebowalbym je umieścic w pamieci programu ( dane tylko do odczytu). Nie moge przeskoczyc problemu, a może robie cos zle,
    jedyne co znalazlem to to ze 8051 nadaje sie tylko doprogramowania w asemblerze ( zacząłem pisac w asemblerze ale przesiadlem sie na C - wiadomo pewne rzeczy duzo latwiej zrobic) a teraz mam problem i szczerze mówiąc nie wiem już jak mam szukac rozwiazania


    mam zdefiniowana strukture, i wszystko dzialalao, popisalem odpowiednie procedury i zacząłem dopisywac reszte rekordów do struktury i dostaję komunikat:

    
    *** ERROR L107: ADDRESS SPACE OVERFLOW
        SPACE:   DATA    
        SEGMENT: _DATA_GROUP_
        LENGTH:  0012H
    Program Size: data=135.0 xdata=0 code=1652
    Target not created
    


    nie wiem jak tego sie pozbyc, a danych musze jeszcze wiecej wprowadzic.

    w asemblerze po prostu bym zapodał ( przyklad) :
    
    	org 0x1000
    	
    tekst_2:	   db '11111111111111111111',0
    tekst_1:	   db '22222222222222222222',0
    tekst_3:	   db '33333333333333333333',0
    
    


    i byłoby po problemie. Wiem gdzie dane są i moge z nich korzystać). Juz nawet mi nie zalezy abym mógł odwolywac sie do tych danych poprzez konkretne zmienne, moge uzywac CBYTE,
    ale jak w C zadeklarowac/zdefiniowac dane aby byly w pamieci programu?

    Juz sie zastanawiam czy nei wrócic do asemblera, tam jest chyba wieksza kontrola, ale za to dluzej pewne algorytmy sie adoptuje.. echh...

    prosze pomóżcie lub podpowiedzcie jakis punkt zaczepienia

    Defectus

    Poprawiłem tytuł:
    https://www.elektroda.pl/rtvforum/topic1015361.html
    [c_p]
  • REKLAMA
  • #2 5331440
    markosik20
    Poziom 33  
    Posty: 2261
    Pomógł: 208
    Ocena: 147
    Pakiet Keila posiada rozbudowaną dokumentację, wystarczyło ją przeczytać.
    Aby stałe umieścić w pamięci programu wystarczy użyć znacznika code

    code unsigned char literka=*"A";
    code char tab[6] = {"STALA"};


    Podczas inicjalizacji stałej należy od razu określić jej wartość czyli

    code unsigned char stala=0x12;
    
    code struct {
                  char 1 = *"S";
                  char 2 = *"T";
                  char 3 = *"A";
                  char 4 = *"L";
              } nazwa;
    
    
  • #3 5333279
    Defectus
    Poziom 11  
    Posty: 5
    Ocena: 1
    dzieki!!!

    dawno nie bawilem sie w procesorki, w keilu perwszy raz, duzo rzeczy poznajdowalem sobie a tego (prostego rozwiazania) nie umiałem zlokalizowac.

    jeszcze raz wielkie dzieki

    defectus
REKLAMA