OOPic III+ Ver C.1.1+ Compiler 6.1.1
I am trying to access RAM memory in SCP and I must be doing something
stupid. If anyone can look over my shoulder and point it out, I would
be very grateful.
The following is the code in my OOPic:
Dim firstByte As Byte
Dim secondByte As Byte
Dim thirdByte As Byte
Dim firstWord As Word
Dim secondWord As Word
Sub Main()
firstByte = 15 '0F hex
secondByte = 171 'AB hex
thirdByte = 205 'CD hex
firstWord = 4660 '1234 hex
secondWord = 43981 'ABCD hex
End Sub
The following is an excerpt from my C# code:
private void button2_Click(object sender, EventArgs e)
{
serialPort1.Open();
textBox1.Text = "";
response = null;
serialPort1.Write(Cons.node0);
serialPort1.Write(Cons.verifyConnection);
while (response == null || response.Length == 0) { }
SetText(response);
serialPort1.Write(Cons.ackOff);
currentObjName = null;
getMemoryValue("firstByte", 1);
getMemoryValue("secondByte", 1);
getMemoryValue("thirdByte", 1);
getMemoryValue("firstWord", 2);
getMemoryValue("secondWord", 2);
response = null;
serialPort1.Write(Cons.disconnect);
serialPort1.Close();
}
...
private string getMemoryValue(string name, int numBytes)
{
string content;
string retVal = "";
DateTime startTime = DateTime.Now;
int memType = 16; //read/write object's default property
response = null;
errorRet = null;
currentObjName = name;
if (numBytes < 1 || numBytes > 8)
{
throw new Exception("numBytes must be 0<X<9, found: " +
numBytes.ToString());
}
memType += numBytes - 1; // add the number of bytes to read
content = memType.ToString() + Cons.setMemType;
content += getAddr(name) + Cons.setMemAddr;
content += "64" + Cons.setMemSubAddr;
content += Cons.readMemory;
serialPort1.Write(content);
while ((response == null && errorRet == null) || (response != null
&& !response.EndsWith("m") && !response.Contains("*")))
{
if (startTime.AddMilliseconds(1000) < DateTime.Now)
{
throw new Exception("timed out waiting for a response");
}
}
if (response != null)
{
SetText(name + " - sent: " + content + " received: " +
response);
retVal = response;
}
if (errorRet != null)
{
SetText("Error: " + errorRet);
retVal = errorRet;
}
currentObjName = null;
response = null;
errorRet = null;
return retVal;
}
...
private void SetText(string text)
{
// InvokeRequired required compares the thread ID of the
// calling thread to the thread ID of the creating thread.
// If these threads are different, it returns true.
if (this.textBox1.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.textBox1.Invoke(d, new object[] { text });
}
else
{
if (textBox1.Text.Length > 0)
{
textBox1.Text += Environment.NewLine;
}
if (text.EndsWith("m"))
{
text = text.Remove(text.Length - 1);
}
textBox1.Text += text;
}
}
Don't be overly concerned with the infrastructure; it works fine
with a similar algorithm for reading default properties of objects. Pay
more attention to the bolded code.
I would expect the output to be the hex values of the initialized values
in the OOPic code. Instead I get garbage. This is the output:
firstByte - sent: 16H105J64LM received: 77
secondByte - sent: 16H106J64LM received: BB
thirdByte - sent: 16H107J64LM received: 40
firstWord - sent: 17H108J64LM received: 116C
secondWord - sent: 17H110J64LM received: 0000
Any help will be appreciated.
Thanks,
Dogulas
[Non-text portions of this message have been removed]
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/oopic/
<*> Your email settings:
Individual Email | Traditional
<*> To change settings online go to:
http://groups.yahoo.com/group/oopic/join
(Yahoo! ID required)
<*> To change settings via email:
mailto:oopic-digest@yahoogroups.com
mailto:oopic-fullfeatured@yahoogroups.com
<*> To unsubscribe from this group, send an email to:
oopic-unsubscribe@yahoogroups.com
<*> Your use of Yahoo! Groups is subject to:
No comments:
Post a Comment