utilisation des pointeurs

Bonjour,
pouvez vous m'expliquez pourquoi le programme ci-dessous fonctionne et permet de visualiser l'incrémentation de la variable
main:

bptr = 4
for b0 = 1 to 20
write @bptr,b0
pause 500
read @bptr,b1
serout 1,N2400,(#b1,13,10)
pause 500
bptr = bptr +1
pause 1000
next b0
goto main

alors que celui ci ne fonctionne pas
bptr = 4
for b0 = 1 to 20
write @bptr,b0
pause 500

serout 1,N2400,(#@bptr,13,10)
pause 500
bptr = bptr +1
pause 1000
next b0
goto main

??????
 

DocZaf

Member
Bonjour,

On pourrait supposer que le paragraphe en bas de code doesnot travail, car il est tentant de lire les données INDIRECTEMENT dont il a besoin d'écrire par l'intermédiaire de la déclaration SEROUT.

Le manuel:

Les données sont des variables et constantes (0-255) qui fournissent les données en sortie.

Option # 's sont pour la sortie des nombres décimaux ASCII, plutôt que des caractères premières.

Le texte peut être enfermé dans les guillemets ("Bonjour")


Et votre code ...

Code:
 SEROUT 1, N2400, (# @ bptr, 13,10)
 [/ CODE]

 n'est ni une variable ou une constante ...
 mais il s'agit plutôt d'un pointeur comme vous dites dans votre TITRE poste.


 DocZaf

[Google Translated]
 
thank you for the answer
merci pour la réponse

But when i'm reading the picaxe manual, i find : @bptr is a variable name that can be used in any command (ie as
where a ‘b1’ variable would be used).
that's why i was thinking that :
@bptr is the value located at the adress which is pointed by bptr
A la lecture du manuel picaxe : @bptr est le nom d'une variable qui peut être utilisée dans n'importe quelle commande (à la manière de b1).
C'est pourquoi je pensais que :
@bptr est la valeur stockée à l'adresse pointée par bptr

sincerely
cordialement
 

BESQUEUT

Senior Member
A la lecture du manuel picaxe : @bptr est le nom d'une variable qui peut être utilisée dans n'importe quelle commande (à la manière de b1).
C'est pourquoi je pensais que :
Je pensais la même chose, mais il faut croire que ça peut être utilisé n'importe où SAUF... en particulier dans SEROUT...
Ce n'est pas la seule subtilé de ces PICAXEs bien pratiques mais qu'il ne faut pas pousser dans leurs derniers retranchements...
En tout cas, le contournement est tout trouvé, même si ça coûte quelques octests de plus, et sans doute une vitesse un peu moins optimisée.
 

westaust55

Moderator
Le "WRITE" commande est utilisée comme moyen de sauver une valeur dans EEPROM.
L'indicateur de bptr est employé pour adresser indirectement la mémoire de RAM.

Utilisant WRITE @bptr , b0 est une situation contradictoire essayant d'écrire à EEPROM avec un indicateur de RAM.


également vous pouvez employer avec l'incrément de poteau :
Code:
Main:
	bptr = 4 
	for b0 = 1 to 20 
		@bptr = b0
		pause 500

		serout 1,N2400,(#@bptr[COLOR="#FF0000"]inc[/COLOR],13,10)
		pause 500 
	[B][COLOR="#FF0000"];[[/COLOR]/B]	bptr = bptr +1 - [COLOR="#FF0000"]cette ligne n'a plus employé[/COLOR]
		pause 1000
	next b0
	goto main
 

PieM

Senior Member
Bonjour,

Le fait d'écrire : write @bptr,b0 n'a effectivement pas beaucoup de sens, car c'est demander en fait d'écrire à une adresses qui est le contenu de l'adresse bptr, en RAM.

utiliser @bptr, c'est dire ; b0 = @bptr ou bien @bptr = b1
 
Top