Hello all.
I built ros from source on an ARM armv5tejl platform.
Compilation, linking and running nodes all work, but messages have
problems:
[ERROR] [1353939756.715474051]: Exception thrown when deserializing message of length [164] from [/add_two_ints_server]: Buffer Overrun
Now having checked
message_deserializer.cpp I know where
this error originates, but I don't have any means to debug this.
The problem happens when any node is run on the arm platform:
meaning that if I run the core on my laptop together with a
listener, and the talker on the arm, the /rosout reports this
error, and the same if any of these three nodes is run on the arm.
If all nodes are run on x86 computers on the same network,
everything is fine.
So I continued searching for a byte-buffer as the buffer mentioned
in the serialization protocol is a message buffer and overrunning
that would mean dropping messages, not the inability to
deserialize.
So in topic_manager.cpp line 638 finally a buffer appears whose
size is parametrized on header_bytes.size.
Header_bytes is assigned as proto[n]
if (proto.size() != 5 ||
proto[1].getType() != XmlRpcValue::TypeBase64 ||
proto[2].getType() != XmlRpcValue::TypeString ||
proto[3].getType() != XmlRpcValue::TypeInt ||
proto[4].getType() != XmlRpcValue::TypeInt)
in topic_manager.cpp
and
if (proto.size() != 6 ||
proto[1].getType() != XmlRpcValue::TypeString ||
proto[2].getType() != XmlRpcValue::TypeInt ||
proto[3].getType() != XmlRpcValue::TypeInt ||
proto[4].getType() != XmlRpcValue::TypeInt ||
proto[5].getType() != XmlRpcValue::TypeBase64)
in subscription.cpp
Following these I find XmlRpcValue.cpp and XmlRpcValue.h but I
can't find any numeric values anywhere.
So I'm guessing these values are system-dependent and fetched
externally.
But from where? How can I manually set the buffer length?
Thanks and regards
--
Eng. Claudio
Carbone
Embedded Systems Design
P.IVA:
11688471009
tel: +393809017424
email: Send email
My
Portfolio