Increased ToUSB_Buffer_Data size from 128 to 254. This seems to have resolved the issue where a read on a device with a long table (176 bytes) would cause the board to randomly lose bytes.
Note that this should ideally be made even bigger for compatibility with the new Dynamixel 2.0 control tables. See the comment in the code.
Anticipated the moment when interruptions are disabled in RingBuffer_Insert and RingBuffer_Remove.
It is unclear if this is essential: I tested the device without this fix and it also worked with just the increased buffer size. However, this seems like a potential race condition because manipulation of the buffer structures was not completely protected; interruptions were being disabled for only part of those operations.
Anticipating disabling interruptions ensures much safer access to the buffer; however it may have the potential, unlikely effect of having the processor miss some interrupt since they are disabled for a few more clock cycles (but still few). I don't think this should be an issue, so I applied this code change for the sake of protecting of protection against the horror stories of a race condition.
Increased ToUSB_Buffer_Data size from 128 to 254. This seems to have resolved the issue where a read on a device with a long table (176 bytes) would cause the board to randomly lose bytes. Note that this should ideally be made even bigger for compatibility with the new Dynamixel 2.0 control tables. See the comment in the code.
Anticipated the moment when interruptions are disabled in RingBuffer_Insert and RingBuffer_Remove. It is unclear if this is essential: I tested the device without this fix and it also worked with just the increased buffer size. However, this seems like a potential race condition because manipulation of the buffer structures was not completely protected; interruptions were being disabled for only part of those operations. Anticipating disabling interruptions ensures much safer access to the buffer; however it may have the potential, unlikely effect of having the processor miss some interrupt since they are disabled for a few more clock cycles (but still few). I don't think this should be an issue, so I applied this code change for the sake of protecting of protection against the horror stories of a race condition.