Memmory Adressing Problems
zuflucht
Posts: 2
Hi Folk,
I am new to µC- Programming and the Spin language.
I am trying to use Data over a set of subroutines / Cog's.
Main.Spin should create Some Data in an Array and send the Memory Adress to a second Cog where the address is read and stored in another Array. As seen in the Prop. Manual in Section Long (Syntax 3) p. 130
Here is My Code
and the Code for the second cog in a new *.spin -sheet
Can anyone suggest where my Mistake is?
In a next Step the data will be modified, and read at the first Cog.
Thanks for Help
Many Greetings
zuflucht
I am new to µC- Programming and the Spin language.
I am trying to use Data over a set of subroutines / Cog's.
Main.Spin should create Some Data in an Array and send the Memory Adress to a second Cog where the address is read and stored in another Array. As seen in the Prop. Manual in Section Long (Syntax 3) p. 130
Here is My Code
OBJ 'pst : "Parallax Serial Terminal" dot : "PlayWithNumbers" CON _clkmode = xtal1 + pll16x ' System clock settings _xinfreq = 5_000_000 CLS = 16 ' Parallax Serial Terminal constants CR = 13 VAR long Zahl[5] long ID long Index long read long write PUB worker 'create some Numbers to play with Zahl[0] := 1234 Zahl[1] := 5678 Zahl[2] := 9999 Zahl[3] := 9876 Zahl[4] := 5432 Zahl[5] := 1111 dot.start(@Zahl[0]) 'pst.Start(115_200) 'pst.Clear
and the Code for the second cog in a new *.spin -sheet
Obj pst : "Parallax Serial Terminal" Con Konstante = 1337 CLS = 16 CR = 13 Var long Stack[30] long cog long read long write [s][/s] PUB start(Adr) : okay stop okay := cog := cognew(main(Adr), @Stack) +1 waitcnt(200_000 + cnt) pst.Start(115_200) pst.Clear PUB stop '' Stoppt lesende Com-Routine - Setzt einen cog frei if cog cogstop(cog~ - 1) PUB main(Adresse) read := 0 read := long[@Adresse][0] 'does not Match With Zahl[0] repeat pst.Str(string("read: ")) pst.Dec(read) pst.Str(string(CR)) waitcnt (clkfreq + cnt)
Can anyone suggest where my Mistake is?
In a next Step the data will be modified, and read at the first Cog.
Thanks for Help
Many Greetings
zuflucht
Comments
Anyways, should be
@Adresse gives you the address of Adresse (which, being a method parameter, lies on the stack), i.e. a pointer to a pointer.
Please use the code tags, when you post code (the big C in the edit menu), so the indentions will be visible.
At a first look, I see two problems:
The Zahl array is declared with 5 elements, but you use 6 (0..5). The 6th element just overwrites the following ID variable, which you not use yet, so no big problem.
The bigger mistake:
You pass the address of the array, and then you access the value with long[@Adresse][0]. That means you use the address of the address, and not the passed address itself.
So try it with: long[Adresse][0].
Andy
Edit: Okay, Würfel_21 was a bit faster...
dgately
I will test your sugestions this evening