Pokrewne
menu      od a.php do b.php / zmienne
menu      wyświetlanie zmiennych z php w polu rozwijalnym list/menu
menu      PSpice problem z prądem zmiennym. Analiza czasowa Transient.
menu      [PHP]Przekazywanie zmiennych przy użyciu sesji
menu      [avr-gcc] zmienne "ciurkiem" w ramie?
menu      Założenia wstępne analizy zmiennoprądowej tranzystorów.
menu      Zmiana zmiennych globalnych na lokalne
menu      Problem z przesłaniem zmiennej w formularzu
menu      problem, przekazywanie zmiennych w linku
menu      problem z wyswietlaniem zmiennych php :(
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • cannonade.htw.pl
  • MSP430 - staly adres zmiennej - inicjalizacja





    ymko - 15-08-2006 19:30
    MSP430 - staly adres zmiennej - inicjalizacja
      Chcialbym uzywajac kompilatora IAR zadeklarowac 'segment' ( w C nie
    ma scisle takiego pojecia ) danych w pamieci flash - rodzaj
    DataFlash. Mialby to byc zbiór zmiennych przylegajacych do siebie w
    pamieci, z których mozna by np. wyznaczyc CRC. Konkretna
    lokalizacja zapewniana dyrektywa @ w IAR, pozwala latwiej oblugiwac
    taki segment danych i zmniejsza prawdopodobienstwo przypadkowego
    uszkodzenia fragmentu programu podczas zapisu. Jednak nie jest mozliwa
    inicjalizacja z poziomu deklaracji w C. Jakies pomysly na
    realizacje? Moze inne kompilatory pozwalaja w wygodny sposób
    rozwiazac taki problem?





    Jacek M. - 15-08-2006 19:30

      Chcialbym uzywajac kompilatora IAR zadeklarowac 'segment' ( w C nie
    ma scisle takiego pojecia ) danych w pamieci flash - rodzaj
    DataFlash. Mialby to byc zbiór zmiennych przylegajacych do siebie w
    pamieci, z których mozna by np. wyznaczyc CRC.
    To moze uzyj struktury albo wskaznikow do fizycznych wskaznikow
    Konkretna
    lokalizacja zapewniana dyrektywa @ w IAR, pozwala latwiej oblugiwac
    taki segment danych i zmniejsza prawdopodobienstwo przypadkowego
    uszkodzenia fragmentu programu podczas zapisu. Jednak nie jest mozliwa
    inicjalizacja z poziomu deklaracji w C. Jakies pomysly na
    realizacje? Moze inne kompilatory pozwalaja w wygodny sposób
    rozwiazac taki problem?




    Jacek M. - 15-08-2006 19:30

      > Chcialbym uzywajac kompilatora IAR zadeklarowac 'segment' ( w C nie
    > ma scisle takiego pojecia ) danych w pamieci flash - rodzaj
    > DataFlash. Mialby to byc zbiór zmiennych przylegajacych do siebie w
    > pamieci, z których mozna by np. wyznaczyc CRC.
    > To moze uzyj struktury albo wskaznikow do fizycznych wskaznikow
    > Konkretna
    > lokalizacja zapewniana dyrektywa @ w IAR, pozwala latwiej oblugiwac
    > taki segment danych i zmniejsza prawdopodobienstwo przypadkowego
    > uszkodzenia fragmentu programu podczas zapisu. Jednak nie jest mozliwa
    > inicjalizacja z poziomu deklaracji w C. Jakies pomysly na
    > realizacje? Moze inne kompilatory pozwalaja w wygodny sposób
    > rozwiazac taki problem?
    >
    Przepraszam, wyslane omylkowo.

    Jacek M.




    Jacek M. - 15-08-2006 19:30

      > Chcialbym uzywajac kompilatora IAR zadeklarowac 'segment' ( w C nie
    > ma scisle takiego pojecia ) danych w pamieci flash - rodzaj
    > DataFlash. Mialby to byc zbiór zmiennych przylegajacych do siebie w
    > pamieci, z których mozna by np. wyznaczyc CRC. Konkretna
    > lokalizacja zapewniana dyrektywa @ w IAR, pozwala latwiej oblugiwac
    > taki segment danych i zmniejsza prawdopodobienstwo przypadkowego
    > uszkodzenia fragmentu programu podczas zapisu. Jednak nie jest mozliwa
    > inicjalizacja z poziomu deklaracji w C.

    Przepraszam za wczesniejsze, omylkowe posty. Ja zadeklarowalbym wskaznik na
    char i wpisalbym do niego adres pierwszej komorki pamieci A tak:
    char *ptr =*ptrs= &A;
    Wskaznik ten po kazdym zapisie inkrementowalbym go za pomoca sizeof(). W
    przypadku wielokrotnego zapisu do tej samej komorki i znanych zmiennych
    zdefiniowalbym typ struktury zawierajacy wszystkie te zmienne. W ten sposob
    nie grozi ci nadpisanie zmiennej a po odjeciu powyzszych wskaznikow masz od
    razu ilosc bajtow do liczenia CRC.
    To pomysl, ktory przychodzi mi do glowy "na goraco".

    Jacek M.





    ymko - 15-08-2006 19:30

     
    Jacek M. napisał(a):
    > ... Ja zadeklarowalbym wskaznik na
    > char i wpisalbym do niego adres pierwszej komorki pamieci A tak:
    > char *ptr =*ptrs= &A;

    Tę definicję niebardzo rozumiem, choć ideę owszem. Z tym nie ma
    problemu, tylko
    kwestia 'posadzenia' tych zmiennych w konkretnym miejscu pamieci i
    inicjalizacji ich

    > zdefiniowalbym typ struktury zawierajacy wszystkie te zmienne.

    Mi też przychodziło do głowy to rozwiązanie i narazie jest
    najbardziej eleganckie, choć
    dalej kwestia inicjalizacji. Kompilator nie pozwala inicjalizować
    zmiennych o sztywno ustalonym adresie.




    Adam Górski - 15-08-2006 19:30

      Użytkownik ymko napisał:
    > Chcialbym uzywajac kompilatora IAR zadeklarowac 'segment' ( w C nie
    > ma scisle takiego pojecia ) danych w pamieci flash - rodzaj
    > DataFlash. Mialby to byc zbiór zmiennych przylegajacych do siebie w
    > pamieci, z których mozna by np. wyznaczyc CRC. Konkretna
    > lokalizacja zapewniana dyrektywa @ w IAR, pozwala latwiej oblugiwac
    > taki segment danych i zmniejsza prawdopodobienstwo przypadkowego
    > uszkodzenia fragmentu programu podczas zapisu. Jednak nie jest mozliwa
    > inicjalizacja z poziomu deklaracji w C. Jakies pomysly na
    > realizacje? Moze inne kompilatory pozwalaja w wygodny sposób
    > rozwiazac taki problem?
    >

    OCzywiście że w IAR C można zadeklarować w C zmienne pod stałym adresem
    Ale o co chodzi konkretnie?

    Adam




    Jacek M. - 15-08-2006 19:30

      >> char i wpisalbym do niego adres pierwszej komorki pamieci A tak:
    >> char *ptr =*ptrs= &A;
    >
    > Tę definicję niebardzo rozumiem, choć ideę owszem. Z tym nie ma
    > problemu, tylko

    'A' to jest zmienna zdefiniowana w pamieci (na poczatek obszaru) z ktorej
    chcesz liczyc CRC np za pomoca dyrektywy @ (sam o tym wspominales) a
    powyzsza definicja wskaznikow oznacza wpisanie adresu 'A' do nich obu. Nie
    wszystkie kompilatory pozwalaja na taka konstrukcje, ale jesli IAR nie
    mozesz to zrobic tak:

    char *ptr = &A, *ptrs= &A;

    > kwestia 'posadzenia' tych zmiennych w konkretnym miejscu pamieci i
    > inicjalizacji ich
    >
    >> zdefiniowalbym typ struktury zawierajacy wszystkie te zmienne.
    >
    > Mi też przychodziło do głowy to rozwiązanie i narazie jest
    > najbardziej eleganckie, choć
    > dalej kwestia inicjalizacji. Kompilator nie pozwala inicjalizować
    > zmiennych o sztywno ustalonym adresie.

    TE ZMIENNE SA WSKAZNIKAMI, NIE ZAPOMINAJ O TYM.
    Czy to oznacza, ze kompilator nie pozwala na wpisywania do wskaznika
    wartosci konkretnych adresow? Jakos nie chce mi sie w to wierzyc. To jest
    podstawowa konstrukcja wedlug normy ANSI. Jesli jednak nie mozesz
    inicjalizowac wskaznika to mozesz wpisac do niego konkretny adres zmiennej
    pozniej:

    ptr = &A;

    Po wpisaniu wartosci adresu startowego do tych obu wskaznikow uzywasz ptr
    poprzez rzutowanie wskaznika.
    'ptrs' sluzy do obliczenia ilosci zmiennych do liczenia CRC
    Pozdrawiam

    Jacek M.




    ymko - 15-08-2006 19:30

     
    Mam wrażenie że nie do końca sie rozumiemy. Potrafię się
    posługiwać wskaźnikami, wiem że można sobie wyłuskiwać różne
    adresy zmiennych i bawić sie nimi.
    Chodzi o następujący mechanizm :
    1.zmienne mają znajdować sie w obszarze flash. Mają znajdować się
    w jednym, ciągłym bloku.
    2.Zmienna musi być zainicjalizowana. Nie chce mi sie na piechotę -
    używając specjalnego api - wpisywać do każdej zmiennej gdzieś
    zadeklarowanej wartości
    3.Najlepiej by zmienne znajdowały się w sztywno określonym obszarze
    (dyrektywa @). Takich zmiennych nie wolno inicjalizować. (zmiennych!
    wskaźniki na ten obszar jak najbardziej).

    Jak zatem zmusić kompilator do zainicjalizowania zmiennych w obszarze
    flash?
    Oto jest problem :)
    Sprawa oczywista że zmienna z kwalifikatorem const ląduje we flash
    (ładnie zainicjalizowana). Tylko po to przenoszę zmienne w pewien
    ustalony adres, by wiedzieć gdzie one dokładnie są, a nie martwić
    sie gdzie wrzucił je kompilator.




    abert zielonka - 15-08-2006 19:30

      ymko schrieb:

    >
    > Jak zatem zmusić kompilator do zainicjalizowania zmiennych w obszarze
    > flash?
    > Oto jest problem :)
    > Sprawa oczywista że zmienna z kwalifikatorem const ląduje we flash
    > (ładnie zainicjalizowana). Tylko po to przenoszę zmienne w pewien
    > ustalony adres, by wiedzieć gdzie one dokładnie są, a nie martwić
    > sie gdzie wrzucił je kompilator.

    Nie znam kompilatora do AVR - ale kompilatory C maja zwykle "link
    command file" - mozna tam zdefiniowac pod jakie adresy maja byc
    ladowane poszczegolne typy danych i definowac bloki pamieci - w pliku
    *.c przed daklaracja zmiennej wskazuje sie w jakim bloku ma sie
    znalezc. Jak dokladnie sie to robi - musisz przeczytac w dekumentacji
    twojego kompilatora. Szybkie zapytanie googla o "AVR link command file"
    wyrzucilo http://www.atmel.com/dyn/resources/p...ts/DOC1079.PDF
    GRG




    ymko - 15-08-2006 19:30

     
    abert zielonka napisał(a):
    >...kompilatory C maja zwykle "link
    > command file" - mozna tam zdefiniowac pod jakie adresy maja byc
    > ladowane poszczegolne typy danych i definowac bloki pamieci...

    To jakiś konkretny pomysł, muszę gruntownie się przyjżeć. Dzięki!
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • konstruktor.keep.pl
  • Design by flankerds.com