Zrozumienie działania wskaźników i dynamicznej alokacji pamięci w 89s51 z użyciem C

89s51+RIDE+problem





Poprzedni Następny
Wiadomość
Spis treści
From: "Grodo" <(zamienXna2000)grodoX_at_nospam_poczta.onet.pl>
Subject: 89s51+RIDE+problem
Date: Wed, 9 Feb 2005 11:04:52 +0100


Hej
Otóż, mam 89s51 i pod port P0 podłaczony bajt diodek (oczywiście odwroteni,
więc sa aktywne zerem). Jak piszę:

#include <reg51.h>
char * tab;

void main()
{
while(1)
{
*tab=0x55;
P0=~(*tab);

}
}

to rzeczywiście lampki zapalają się na przemian. Ale jak pododaję po
gwiazdce:

#include <reg51.h>
char ** tab;

void main()
{
while(1)
{
**tab=0x55;
P0=~(**tab);

}
}

to wszystkie gasną (jak teraz zdejmę nagację w linijce P0=~(**tab); i
będzie P0=(**tab); to się wszystkie zapalają). Dlaczego? Nie powinien być
taki sam efekt jak powyżej?
I pytanie drugie, dlaczego jak dopiszę na początku #include<alloc.h> i po
oczywiście zadeklarowaniu np. char * tab; wpiszę tab =
(char*)malloc(sizeof(char)); to lampki się żarzą? Dlaczego ten dziadowski
malloc nie działa? Próbowąłem już nawet malloc.h ale się nie kompiluje...
Reasumując, dlaczego program z * i z ** nie działa tak samo i dlaczego nie
dziąła malloc? co robię nie tak?
Pozdrawiam



Poprzedni Następny
Wiadomość
Spis treści
From: "Mister" <wojpie_at_nospam_wywal_to.poczta.onet.pl>
Subject: Re: 89s51+RIDE+problem
Date: Wed, 9 Feb 2005 11:14:51 +0100


I pytanie drugie, dlaczego jak dopiszę na początku #include<alloc.h> i po
oczywiście zadeklarowaniu np. char * tab; wpiszę tab =
(char*)malloc(sizeof(char)); to lampki się żarzą? Dlaczego ten dziadowski

Apropos malloc: robisz odpowiednio inicjalizację pamieci w pliku bodajże
startup.a51?

Mister



Poprzedni Następny
Wiadomość
Spis treści
From: "Grodo" <(zamienXna2000)grodoX_at_nospam_poczta.onet.pl>
Subject: Re: 89s51+RIDE+problem
Date: Wed, 9 Feb 2005 11:26:33 +0100


Apropos malloc: robisz odpowiednio inicjalizację pamieci w pliku bodajże
startup.a51?

Mister

Zarza, zaraz, pierwsze słyszę o tym pliku. Ale z tego co widzę to
rozszerzenie pliku assemblera a ja piszę w c... Czy czegoś nie wiem? Ale
bardzo chętnie wysłucham ;)



Poprzedni Następny
Wiadomość
Spis treści
From: Sebastian Bialy <heby_at_nospam_poczta.onet.pl>
Subject: Re: 89s51+RIDE+problem
Date: Wed, 09 Feb 2005 11:31:08 +0100


Grodo wrote:
char * tab;

Na co wskazuje ten niezainijowany wskaźnik ?

> *tab=0x55;

Moim zdaniem w kosmos wciskasz te 0x55 :) Działa pewno przypadkiem.

> char ** tab;

Tu bys musiał mieć podwójne szczęscie ...

--
Sebastian Bialy - heby_at_nospam_poczta.onet.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "Grodo" <(zamienXna2000)grodoX_at_nospam_poczta.onet.pl>
Subject: Re: 89s51+RIDE+problem
Date: Wed, 9 Feb 2005 12:19:08 +0100



Użytkownik "Sebastian Bialy" <heby_at_nospam_poczta.onet.pl> napisał w wiadomości
news:cucoqg$hn$1_at_nospam_atlantis.news.tpi.pl...
Grodo wrote:
char * tab;

Na co wskazuje ten niezainijowany wskaźnik ?

*tab=0x55;

Moim zdaniem w kosmos wciskasz te 0x55 :) Działa pewno przypadkiem.

char ** tab;

Tu bys musiał mieć podwójne szczęscie ...

--
> Sebastian Bialy - heby_at_nospam_poczta.onet.pl

Nie no, ja wiem o tym, ale co mam zrobić, jeśli mi nie działa malloc i nie
wiem czemu? Pomyslałem, że może jest domyślny ten program, ale nie bardzo.
Badziewie takie.
Przerzucę sie na coś, co ma więcej nóżek... będzie większe
prawdopodobieństwo, że zadziała... ;)
pozdrawiam
P.S. Albo i mniejsze...



Poprzedni Następny
Wiadomość
Spis treści
From: J.F. <jfox_xnospamx_at_nospam_poczta.onet.pl>
Subject: Re: 89s51+RIDE+problem
Date: Wed, 09 Feb 2005 12:47:28 +0100


On Wed, 9 Feb 2005 12:19:08 +0100, "Grodo"
Użytkownik "Sebastian Bialy" <heby_at_nospam_poczta.onet.pl> napisał w wiadomości
Grodo wrote:
char * tab;
Na co wskazuje ten niezainijowany wskaźnik ?

Nie no, ja wiem o tym, ale co mam zrobić, jeśli mi nie działa malloc i nie
wiem czemu? Pomyslałem, że może jest domyślny ten program, ale nie bardzo.
Badziewie takie.
Przerzucę sie na coś, co ma więcej nóżek... będzie większe
prawdopodobieństwo, że zadziała... ;)

A moze bys jednak przeczytal podrecznik C ?

J.


Poprzedni Następny
Wiadomość
Spis treści
From: J.F. <jfox_xnospamx_at_nospam_poczta.onet.pl>
Subject: Re: 89s51+RIDE+problem
Date: Wed, 09 Feb 2005 12:33:59 +0100


On Wed, 09 Feb 2005 11:31:08 +0100, Sebastian Bialy wrote:
Grodo wrote:
char * tab;
Na co wskazuje ten niezainijowany wskaźnik ?

*tab=0x55;

Moim zdaniem w kosmos wciskasz te 0x55 :) Działa pewno przypadkiem.

Jest pewna szansa ze jako zmienna globalna jest przez C zerowany.
A zero ... to chyba wskazuje na R0 :-)


char ** tab;

Tu bys musiał mieć podwójne szczęscie ...

Generalnie zalecane przeczytanie ksiazki od C :-)

J.