| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- 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.
- 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.
-
- 3. FIXED: Communication is unreliable until reflashed.
- Running avrdude flash makes all frames come through. Before that
- only short ones do. Could be the port settings or AVR speed.
-
- 4. FIXED: Lacking logging.
- Log all the inputs and outputs. Was turned down due to #2.
-
- 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.
-
- 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.
-
- 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.
|