Timeout Error
Renmusxd
Posts: 1
Hello, I'm trying to upload code to the Propeller Activity Board but am running into occasional issues with the "Verifying RAM" step. Certain programs seem to fail to verify.
I can successfully upload the "Follow with Ping" example, but with minor modifications it fails to Verify. This seems to me like either a driver issue of a RAM space issue (though with programs this small I don't know how it could be).
Here's the code modified from "Follow with Ping" that does upload and verify:
And here's code that doesn't.
Any help would be greatly appreciated!
I can successfully upload the "Follow with Ping" example, but with minor modifications it fails to Verify. This seems to me like either a driver issue of a RAM space issue (though with programs this small I don't know how it could be).
Here's the code modified from "Follow with Ping" that does upload and verify:
#include "simpletools.h" // Include simpletools header #include "abdrive.h" // Include abdrive header #include "ping.h" // Include ping header int distance, setPoint, errorVal, kp, speed; // Navigation variables int turn_d, last_d; double alpha; char did_turn; int main() // main function { setPoint = 32; // Desired cm distance kp = -10; // Proportional control turn_d = 200; did_turn = 0; //alpha = 0.2; last_d = ping_cm(8); drive_setRampStep(6); while(1) // main loop { distance = (int)(0.2*ping_cm(8) + 0.8*last_d); //if (distance>turn_d){ // did_turn = 1; // drive_speed(64, -64); //} //while ((distance=ping_cm(8))>turn_d); //if (did_turn) { // did_turn = 0; // distance = distance; // drive_speed(0,0); //} errorVal = setPoint - distance; // Calculate error speed = kp * errorVal; // Calculate correction speed if(speed > 128) speed = 128; // Limit top speed if(speed < -128) speed = -128; drive_rampStep(speed, speed); // Use result for following last_d = distance; } }
And here's code that doesn't.
#include "simpletools.h" // Include simpletools header #include "abdrive.h" // Include abdrive header #include "ping.h" // Include ping header int distance, setPoint, errorVal, kp, speed; // Navigation variables int turn_d, last_d; double alpha; char did_turn; int main() // main function { setPoint = 32; // Desired cm distance kp = -10; // Proportional control turn_d = 200; did_turn = 0; //alpha = 0.2; last_d = ping_cm(8); drive_setRampStep(6); while(1) // main loop { distance = (int)(0.2*ping_cm(8) + 0.8*last_d); if (distance>turn_d){ did_turn = 1; drive_speed(64, -64); } //while ((distance=ping_cm(8))>turn_d); //if (did_turn) { // did_turn = 0; // distance = distance; // drive_speed(0,0); //} errorVal = setPoint - distance; // Calculate error speed = kp * errorVal; // Calculate correction speed if(speed > 128) speed = 128; // Limit top speed if(speed < -128) speed = -128; drive_rampStep(speed, speed); // Use result for following last_d = distance; } }with the following Build Rescue:
Project Directory: /Users/USER/Documents/SimpleIDE/ SimpleIDE Version 1.0.2 /Users/USER/Documents/SimpleIDE/Learn/Simple Libraries/ /Users/USER/Documents/SimpleIDE/ Updated on: 2016-01-03 propeller-elf-gcc -v GCC 4.6.1 (propellergcc_v1_0_0_2435) propeller-elf-gcc -I . -L . -I /Users/USER/Documents/SimpleIDE/Learn/Simple Libraries/Utility/libsimpletools -L /Users/USER/Documents/SimpleIDE/Learn/Simple Libraries/Utility/libsimpletools/cmm/ -I /Users/USER/Documents/SimpleIDE/Learn/Simple Libraries/TextDevices/libsimpletext -L /Users/USER/Documents/SimpleIDE/Learn/Simple Libraries/TextDevices/libsimpletext/cmm/ -I /Users/USER/Documents/SimpleIDE/Learn/Simple Libraries/Protocol/libsimplei2c -L /Users/USER/Documents/SimpleIDE/Learn/Simple Libraries/Protocol/libsimplei2c/cmm/ -I /Users/USER/Documents/SimpleIDE/Learn/Simple Libraries/Robotics/ActivityBot/libabdrive -L /Users/USER/Documents/SimpleIDE/Learn/Simple Libraries/Robotics/ActivityBot/libabdrive/cmm/ -I /Users/USER/Documents/SimpleIDE/Learn/Simple Libraries/TextDevices/libfdserial -L /Users/USER/Documents/SimpleIDE/Learn/Simple Libraries/TextDevices/libfdserial/cmm/ -I /Users/USER/Documents/SimpleIDE/Learn/Simple Libraries/Sensor/libping -L /Users/USER/Documents/SimpleIDE/Learn/Simple Libraries/Sensor/libping/cmm/ -o cmm/Testing.elf -Os -mcmm -m32bit-doubles -fno-exceptions -std=c99 Testing.c -lm -lsimpletools -lsimpletext -lsimplei2c -labdrive -lfdserial -lping -lm -lsimpletools -lsimpletext -lsimplei2c -labdrive -lfdserial -lm -lsimpletools -lsimpletext -lsimplei2c -labdrive -lm -lsimpletools -lsimpletext -lsimplei2c -lm -lsimpletools -lsimpletext -lm -lsimpletools -lm propeller-load -s cmm/Testing.elf propeller-elf-objdump -h cmm/Testing.elf Done. Build Succeeded! propeller-load -Dreset=dtr -I /Applications/SimpleIDE.app/Contents/MacOS/../propeller-gcc/propeller-load/ -b ACTIVITYBOARD cmm/Testing.elf -e -r -p /dev/cu.usbserial-DAYUEMTYPropeller Version 1 on /dev/cu.usbserial-DAYUEMTY Loading cmm/Testing.elf to EEPROM via hub memory 9292 bytes sent Verifying RAM ... Timeout Error! error: load failed error: load failed Timeout Error! error: load failed error: load failed
Any help would be greatly appreciated!
Comments
What Mac OS are you running, and which driver did you install?
Do you have another (preferably different) computer available to try the programming the Propeller? This might give us an early indication of whether this particular behavior has a hardware or software cause.
Andy
Miguel Rodriguez
Parallax Tech Support
My own machine is as follows: MacBook Pro (Retina, 15-inch, Late 2013), running El Capitan (10.11.2) with SimpleIDE 1.0.2 (RC2). No hub and or other peripheral devices are attached to the computer. The Propeller board is connected to /dev/cu.usbserial-DAYNP9AL
I downloaded a fresh copy of the IDE from http://learn.parallax.com/propeller-c-set-simpleide/mac this morning to confirm that I am using the latest version.
The issue we were seeing seemed to be related to the size of the file upload - with files above about 9300 bytes, the probability that the memory check would fail would rise. I checked out the source code for https://github.com/dbetz/propeller-load this morning. I instrumented PLoadLib.c to see what was happening (lines 363-377):
for(n = 0; n < wv; n++) {
if(tx(buf, 1) == 0) return 1;
rc = getAck(&ack, 20);
printf("n=%d, wv=%d, rc=%d, ack=%d\n", n, wv, rc, ack);
if(ack) break;
}
/*
* Check for a Timeout or Checksum Error
*/
if(n >= wv) {
if(pload_verbose)
printf("Timeout Error n=%d, wv=%d!\n", n, wv);
return 1;
}
I tried with the "Activity Bot Display Calibrate" program (which is one program which would not work). This compiles without error, but always fails with memory validation.
Running the code gave:
====
Verifying RAM ...
n=0, wv=100, rc=1, ack=0
n=1, wv=100, rc=1, ack=0
n=2, wv=100, rc=1, ack=0
....
n=97, wv=100, rc=1, ack=0
n=98, wv=100, rc=1, ack=0
n=99, wv=100, rc=1, ack=0
Timeout Error n=100, wv=100!
====
Upping the retry count to 1000 then gave:
====
Verifying RAM ...
n=0, wv=1000, rc=0, ack=0
n=1, wv=1000, rc=0, ack=0
.....
n=133, wv=1000, rc=0, ack=0
n=134, wv=1000, rc=0, ack=0
n=135, wv=1000, rc=0, ack=0
n=136, wv=1000, rc=0, ack=1
OK
====
Further tests suggest that roughly 130-140 retries were consistently required for this example. Therefore, there appears it be an issue with the timeout, at least on OSX.
We did not experience these problems on a Windows 10 machine. A student is current building the propeller gcc toolchain and we will check to see the behaviour there.
I'm assuming this is not going through a hub, just USB plugged straight into the Mac, right? The only other piece of info to verify would just be to verify that you are using the 2.2.18 driver from this page: http://www.ftdichip.com/Drivers/VCP.htm.
Andy
I haven't heard back from the student who was working on Linux.
I recently noticed that, in Windows, SimpleIDE sometimes starts timing out with load EEPROM until I use the Run with Terminal button. Then, it starts working again.
With that in mind, I'm wondering if there's something quirky that might work as a temporary remedy while the developers work on something more permanent. That in mind, is there a possible relationship between PWR being in position 1 or 2? Does load RAM fail if used with SimpleIDE terminal open vs. closed? Does either Run with Terminal or Load EEPROM & run work consistently when Load RAM & Run fails?
I sent some additional questions in a PM. Please check your forum inbox.
Thanks, Andy
The code seems to build and load on a QuickStart board using Simple IDE 1.0.2 (RC2) and a Mac running 10.9.5. Perhaps it is something to do with the newer Mac OS?
Had the same problem with the code you posted.
However after installing FTDI driver ,as mention above by Andy (but you should use version 2.3 for mac os x 10.9 and above instead of 2.2.18. http://www.ftdichip.com/Drivers/VCP/MacOSX/FTDIUSBSerialDriver_v2_3.dmg ), restarted my mac and both ActivityBot Display Calibration.c and your code were complied, uploaded and run without any error.
I use MacBook Pro (Retina, 15-inch, Early 2013), running El Capitan (10.11.4 beta) with SimpleIDE 1.0.2 (RC2)
I upgraded to the 2.3 version of the driver and just tried it a few minutes ago. I didn't see any difference.
My mac has 2 USB ports, it was failing very consistently with timeout on right side USB (one that close to HDMI), then i switched to left side USB (one that close to audio out) and it worked just fine. Then I switched to right side again and it seems to work fine on both sides now.
Probably some kind of driver issue.