mikep wrote:I'm off to Google on "microcontroller redundant systems"
lol..
Yes in future iterations of the hardware such functionality will be built in. Unfortunately, new iterations and runs are very expensive so we have to work with what we've got until the next official version (at which point we can explicitly bill out the greater hardware redundancy).
Another concern is size [and battery consumption, though this can be mitigated in various solutions]:
abarnes wrote:We've built alot of redundancy into our hardware for this reason, though size is a very relevant concern also, so we must balance these requirements.
As I noted before, the hardware design is inherited, otherwise we might have just gone with the SetBoot() function and a simple second EEPROM for this release. With the additional size and complexity of a second processor, we could have an onboard hardware implementation of a VM updater. Apparently it didn't meet the size spec for the last iteration.
Either way, we now have a method which gives us software-only, fine-grained control at the expense of some redundancy. Additionally, the method may be scaled up to more redundant systems. We can literally hot-swap code remotely (think remote Lisp terminal or Erlang node) if we so desired. Not that we'll be doing that for this system, but that gets the geek in me going.
Kudos!
Also, I must say that the rapid prototyping provided by ZBasic is really wonderful considering the design time that would be required in other AVR alternatives. The built-in multitasking, queuing and semaphore support are particularly robust for such a small form factor. I liked the "error handling goto" feature provided as well. It also allows for a more stable final product with features like runtime stack-overflow checking and integrated watchdog support. But you guys already knew that.
- Austin
p.s.
Now for a crazier question that I was holding off on until we covered some of the bases:
1) Is it possible to instruct the VM to read program instructions directly from another device such as an nvram flash or even from the chip's own persistent memory locations? Perhaps through use of the SetBoot() function? This could present an interesting on-chip bootloader solution if we could fit one in that small on-chip space (and of course eliminates the issue of collision during bootloader-update).
This functionality is not required but if possible it'd be nice to know.