CAN message container. Defines "<<" and ">>" operators to simplify adding/getting data to/from a CAN message.

Dependents:   CAN_Hello EinlesenSensorabstand_digital_2 CAN_STABLE_EINSTEIN CAN_ex_STM32F103C8T6 ... more

CAN message container

In order to simplify adding/getting data to/from a CAN message the CANMsg class extends mbed's built-in CANMessage class by defining "<<" (append) and ">>" (extract) operators. Since it inherits everything from CANMessage, after importing the library into your project, you can use it instead of CANMessage without any additional modification or limitations. The usage of "<<" and ">>" operators is similar to the C++ io-streams operators.

  • Before adding data to a CANMsg object it is recommended to clear it by calling its clear() member function.
  • Then set up all the other properties (ID, type, format) as needed.
  • Finally append data one by one or combine them into a stream. The actual data length of a CAN message is automatically updated when using "<<" or ">>" operators. However, you have to make sure that the total length of data does not exceed eight bytes.

For an example of use have a look at this wiki page.

Import programCAN_Hello

Using CAN bus with (not just NUCLEO) mbed boards

Revision:
3:4e42fdc0459f
Parent:
2:2b8425b12d05
Child:
4:5017a65ff423
--- a/CANMsg.h	Thu Mar 29 18:56:19 2018 +0000
+++ b/CANMsg.h	Wed Apr 25 11:47:00 2018 +0000
@@ -45,7 +45,8 @@
     template<class T>
     CANMsg &operator<<(const T val) {
         MBED_ASSERT(len + sizeof(T) <= 8);
-        *reinterpret_cast<T*>(&data[len]) = val;
+        //*reinterpret_cast<T*>(&data[len]) = val; // This used to work but now it hangs at run time.
+        memcpy(&data[len], &val, sizeof(T));
         len += sizeof(T);
         return *this;
     }