2014-01-12 16:05:35 +01:00
|
|
|
Bugs
|
|
|
|
====
|
|
|
|
1. The servo output is noisy.
|
|
|
|
Not too bad, but you can hear the servo dithering and see it on the
|
|
|
|
scope. Not surprising as it's interrupt derrived.
|
|
|
|
|
|
|
|
2. The rover side halts after ~30s.
|
|
|
|
Seems to have cleared after changing the serial port read to all
|
|
|
|
bytes instead of 1 by 1.
|
2014-02-09 20:35:45 +01:00
|
|
|
Nope, still present. Perhaps noise causing a break or other error?
|
|
|
|
Added a watchdog to see if it's the inputs
|
|
|
|
Checked against pyserial. Match fine.
|
2014-01-12 16:05:35 +01:00
|
|
|
|
2014-01-14 19:57:18 +01:00
|
|
|
3. FIXED: Communication is unreliable until reflashed.
|
2014-01-12 16:05:35 +01:00
|
|
|
Running avrdude flash makes all frames come through. Before that
|
|
|
|
only short ones do. Could be the port settings or AVR speed.
|
|
|
|
|
2014-01-14 19:57:18 +01:00
|
|
|
4. FIXED: Lacking logging.
|
2014-01-12 16:05:35 +01:00
|
|
|
Log all the inputs and outputs. Was turned down due to #2.
|
|
|
|
|
2014-01-14 19:57:18 +01:00
|
|
|
Fixes
|
|
|
|
=====
|
|
|
|
3.
|
|
|
|
|
|
|
|
Loading calibrate and putting the scope on shows 902.7 us for 9
|
|
|
|
bits. Suggests FCPU = 8.31 MHz. So the divisor should be good,
|
|
|
|
suggesting the mode is not.
|
|
|
|
|
|
|
|
After running rover, stty says:
|
|
|
|
speed 38400 baud; line = 0;
|
|
|
|
min = 1; time = 0;
|
|
|
|
-brkint -imaxbel
|
|
|
|
-opost
|
|
|
|
-isig -icanon -echo -echoe
|
|
|
|
|
|
|
|
After flashing, stty says:
|
|
|
|
speed 19200 baud; line = 0;
|
|
|
|
min = 1; time = 0;
|
|
|
|
ignbrk -brkint -icrnl -imaxbel
|
|
|
|
-opost -onlcr
|
|
|
|
-isig -icanon -iexten -echo -echoe -echok -echoctl -echoke
|
|
|
|
1:0:8bf:0:3:1c:7f:15:4:0:1:0:11:13:1a:0:12:f:17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0
|
|
|
|
|
|
|
|
And running stty with this clears the fault.
|
|
|
|
|
|
|
|
Diff:
|
|
|
|
ignbrk -icrnl
|
|
|
|
-onlcr
|
|
|
|
-iexten -echok -echoctl -echoke
|
|
|
|
|
|
|
|
Shouldn't matter: ignbrk
|
|
|
|
|
|
|
|
FIXED: goserial was pulling in the (broken) serial_posix.go. Fix the
|
|
|
|
build selectors.
|
|
|
|
|
2014-01-12 16:05:35 +01:00
|
|
|
Thoughts on Go
|
|
|
|
==============
|
|
|
|
No generics is messy:
|
|
|
|
1. Can't have a min/max/abs that work on any numeric types.
|
|
|
|
2. Can't easily pick float32 vs float64 based on the application as
|
|
|
|
you have to redo everything else.
|
|
|
|
|
|
|
|
I'd like nullable types for things like inputs that may be missing.
|
|
|
|
Having no generics makes implementing an alternative harder.
|
|
|
|
|
|
|
|
No default argument values. I'd like to do a 'CheckClose(a, b,
|
|
|
|
epsilon=0.01)' but you either need to supply epsilon everywhere or do
|
|
|
|
a CheckClose and CheckClose2.
|
|
|
|
|
|
|
|
No operator overloading.
|
|
|
|
|
|
|
|
Built in types are special. You can do len(MyOwnType) and instead
|
|
|
|
need MyOwnType.Len().
|
|
|
|
|
|
|
|
Explicit casting. This is OK, but it's weird to need to cast an int
|
|
|
|
to a float to multiply it by another float.
|
|
|
|
|
|
|
|
select across channels is nice.
|
|
|
|
|
|
|
|
The %+v struct-with-field-names formatter is nice.
|
2014-02-09 20:35:45 +01:00
|
|
|
|
|
|
|
No easy test for 'x in map'.
|
|
|
|
|
|
|
|
Strings are a funny mix of bytes and runes. Most work on bytes, but
|
|
|
|
range works on runes. Popping a rune from a string is messy.
|
|
|
|
|
|
|
|
The built-in types are good and generic and do things like return
|
|
|
|
specific polymorphisim. You can't do that on anything else.
|