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] [Keil][C] Ustawienie wskaźnika struktury na adres 0x8000 w xdata

Damianek85Gisz 20 Wrz 2008 13:24 1119 2
REKLAMA
  • #1 5553194
    Damianek85Gisz
    Poziom 10  
    Posty: 27
    Mam problem ze wskaźnikiem tzn.
    Jest struktura
    xdata struct _8bajt	{
    	int adres;
    	char wolna;
    	struct _8bajt *nastepna;
    }_8bajt_;


    W komórce adres będzie zapisana wartość 0x8000 i chciałbym żeby wskaźnik
    xdata struct _8bajt *wsk;


    przyjmował tą wartość tzn. gdy będe zapisywał coś do struktury to żeby strukrura zaczynała się od 0x8000

    Napisałem taki program ale nie działa prawidłowo jak by ktoś mógł spojrzeć i powiedzieć co jest nie tak bym był wdzięczny z góry dzięki.
    #include <reg52.h>
    //#include <stdio.h>
    xdata struct _8bajt	{
    	int adres;
    	char wolna;
    	struct _8bajt *nastepna;
    }_8bajt_;
    
    void init_struct(void)	{
    	_8bajt_.adres = 0x8000;
    	_8bajt_.wolna = 0x00;
    }
    
    void main(void)	{
    	xdata struct _8bajt *wsk;
    	init_struct();
    	wsk = &_8bajt_;
    	wsk = (void*)wsk->adres;
    	wsk->adres = 0x8100;//Tutaj ma być zapis do struktury która znajduje się pod adresem 0x8000
    }
  • REKLAMA
  • #2 5553367
    aster11
    Poziom 19  
    Posty: 211
    Pomógł: 36
    Ocena: 1
    Zapis do wskaźnika w żaden sposób nie wpływa na położenie zmiennej, do której się odnosi. Po prostu zacznie on pokazywać na inne miejsce, a zmienna, np. Twoja struktura _8bajt_, nie zmieni lokalizacji. Takie przypisanie:
    wsk = (void*)wsk->adres;

    nie ma tu za bardzo sensu.

    Lokalizacje zmiennych są automatycznie określane przez kompilator i do wskaźników mogą być jedynie pobierane. Jeżeli koniecznie chcesz umieścić strukturę pod określonym adresem, trzeba wykorzystać atrybut definicji absolutnej, coś na pewno będzie o tym w dokumentacji Keil.
REKLAMA