dji-sdk / Onboard-SDK

DJI Onboard SDK Official Repository
https://github.com/dji-sdk/Onboard-SDK
Other
909 stars 634 forks source link

replace dangerous dereference of reinterpret_cast with memcpy #934

Open ccaven opened 6 months ago

ccaven commented 6 months ago

On Raspberry Pi Zero 2W, compiling in Release mode introduced an issue where trying to call vehicle->subscribe->getValue crashed the program on TOPIC_ALTITUDE_BAROMETER and TOPIC_ALTITUDE_FUSIONED.

These issues appeared to be caused by the dereference of a reinterpret_cast call, specifically when the destination type was float32_t. A safer approach would be to use memcpy to simply grab the bytes from the buffer and copy them into a new stack variable. The Telemetry messages are so small that a single copy will not produce any significant performance penalty.

If, for some reason, reinterpret_cast is necessary, I'd love to know why that is and how I can get around the program crash when compiling with optimization.