DDS一

dds基本概念
以数据为中心的发布订阅模型(DCPS)
发送实体
订阅实体
配置实体(主题传输的类型信息,QoS)

发布者:负责创建和配置其实现的DataWriter的DCPS实体。
订阅者:负责接收在其订阅的主题下发布的数据的DCPS实体。
主题:绑定发布和订阅的实体。通过TopicDescription,它可以统一发布和订阅的数据类型。
领域:用于链接属于一个或多个应用程序的所有发布者和订阅者的概念,这些应用程序在不同主题下交换数据。这些参与域的单独应用程序称为DomainParticipant。DDS域由域ID标识。

采用实时发布订阅(RTPS)协议来负责传输。支持udp,tcp和共享内存shm。支持单播和多播通信。
RTPSWriter:能够发送数据的端点。
RTPSReader:能够接收数据的端点。
RTPSParticipant可以有任意数量的编写器和读取器端点。

数据类型:

idl type
char char
octet uint8_t
short int16_t
unsigned short uint16_t
long int32_t
unsigned long uint32_t
long long int64_t
unsigned long long uint64_t
float float
double double
long double long double
boolean bool
string std::string

数组

idl type
char a[5] std::array<char,5>
octet a[5] std::array<uint8_t,5> a
short a[5] std::array<int16_t,5> a
unsigned short a[5] std::array<uint16_t,5> a
long a[5] std::array<int32_t,5> a
unsData types with a keyigned long a[5] std::array<uint32_t,5> a
long long a[5] std::array<int64_t,5> a
unsigned long long a[5] std::array<uint64_t,5> a
float a[5] std::array<float,5> a
double a[5] std::array<double,5> a

序列

idl type
sequence std::vector
sequence std::vector<uint8_t>
sequence std::vector<int16_t>
sequence std::vector<uint16_t>
sequence std::vector<int32_t>
sequence std::vector<uint32_t>
sequence std::vector<int64_t>
sequence std::vector<uint64_t>
sequence std::vector
sequence std::vector

关联数组

idl type
map<char, unsigned long long> std::map<char, uint64_T>

结构体

idl type
    {
    octet octet_value;
    long long_value;
    string string_value;
    }; 
{
public:
    Structure();
    ~Structure();
    Structure(const Structure &x);
    Structure(Structure &&x);
    Structure& operator=(const Structure &x);
    Structure& operator=(Structure &&x);
     
    void octet_value(uint8_t _octet_value);
    uint8_t octet_value() const;
    uint8_t& octet_value();
    void long_value(int64_t _long_value);
    int64_t long_value() const;
    int64_t& long_value();
    void string_value(const std::string
        &_string_value);
    void string_value(std::string &&_string_value);
    const std::string& string_value() const;
    std::string& string_value();
private:
    uint8_t m_octet_value;
    int64_t m_long_value;
    std::string m_string_value;
};

unions

union Union switch(long)
{
case 1:
octet octet_value;
case 2:
long long_value;
case 3:
string string_value;
};

class Union
{
public:
    Union();
    ~Union();
    Union(const Union &x);
    Union(Union &&x);
    Union& operator=(const Union &x);
    Union& operator=(Union &&x);
 
    void d(int32_t __d);
    int32_t _d() const;
    int32_t& _d();
 
    void octet_value(uint8_t _octet_value);
    uint8_t octet_value() const;
    uint8_t& octet_value();
    void long_value(int64_t _long_value);
    int64_t long_value() const;
    int64_t& long_value();
    void string_value(const std::string
        &_string_value);
    void string_value(std:: string &&_string_value);
    const std::string& string_value() const;
    std::string& string_value();
 
private:
    int32_t m__d;
    uint8_t m_octet_value;
    int64_t m_long_value;
    std::string m_string_value;
};

bitsets
位集是一种特殊的结构,它包含一组比特。位集最多可表示64位。

     bitset MyBitset
    {
    bitfield<3> a;
    bitfield<10> b;
    bitfield<12, int> c;
    }; 
class MyBitset
{
public:
    void a(char _a);
    char a() const;
    void b(uint16_t _b);
    uint16_t b() const;
    void c(int32_t _c);
    int32_t c() const;
private:
    std::bitset<25> m_bitset;
};

枚举

     enum Enumeration
    {
    RED,
    GREEN,
    BLUE
    }; 
enum Enumeration : uint32_t
{
    RED,
    GREEN,
    BLUE
};

Bitmasks(对应std::bitset)
Bitmask是一种特殊的枚举,用于管理位掩码。

@bit_bound(8)
bitmask MyBitMask
{
@position( 0) flag0,
@position( 1) flag1,
@position( 4) flag4,
@position( 6) flag6,
flag7
};
enum MyBitMask : uint8_t
{
    flag0 = 0x01 << 0,
    flag1 = 0x01 << 1,
    flag4 = 0x01 << 4,
    flag6 = 0x01 << 6,
    flag7 = 0x01 << 7
};
posted @ 2025-05-13 22:29  老禾的账本  阅读(126)  评论(0)    收藏  举报