小编Bul*_*kin的帖子

带有枚举的结构在C和C++中有所不同,为什么?

任务是通过I2C将数据从Arduino发送到STM32.

所以我使用C++在Arduino中定义了Struct和Enums:

enum PhaseCommands {
    PHASE_COMMAND_TIMESYNC  = 0x01,
    PHASE_COMMAND_SETPOWER  = 0x02,
    PHASE_COMMAND_CALIBRATE = 0x03
};

enum PhaseTargets {
    PHASE_CONTROLLER = 0x01,
    // RESERVED = 0x02,
    PHASE_LOAD1 = 0x03,
    PHASE_LOAD2 = 0x04
};

struct saatProtoExec {
    PhaseTargets   target;
    PhaseCommands  commandName;
    uint32_t       commandBody;
} phaseCommand;

uint8_t phaseCommandBufferSize = sizeof(phaseCommand);

phaseCommand.target = PHASE_LOAD1;
phaseCommand.commandName = PHASE_COMMAND_SETPOWER;
phaseCommand.commandBody = (uint32_t)50;
Run Code Online (Sandbox Code Playgroud)

另一方面,我使用C得到了相同的定义:

typedef enum {
    COMMAND_TIMESYNC  = 0x01,
    COMMAND_SETPOWER  = 0x02,
    COMMAND_CALIBRATE = 0x03
} MasterCommands;

typedef enum {
    CONTROLLER = 0x01,
    // RESERVED = …
Run Code Online (Sandbox Code Playgroud)

c c++ struct arduino stm32

13
推荐指数
2
解决办法
1822
查看次数

如何在Python Logging中设置源主机地址?

有一个用Python编写的脚本,它通过IPMI解析来自多个服务器的传感器数据和事件.然后它将图形数据发送到一个服务器,并将错误日志发送到另一个服 记录服务器是Syslog-ng + Mysql

因此,任务是按所有者存储日志,而不是由脚本宿主存储.

一些代码示例:

import logging
import logging.handlers

loggerCent = logging.getLogger(prodName + 'Remote')
ce = logging.handlers.SysLogHandler(address=('192.168.1.11', 514), facility='daemon')
formatter = logging.Formatter('%(name)s: %(levelname)s: %(message)s')
loggerCent.setLevel(logging.INFO)

loggerCent.addHandler(ce)

loggerCent.warning('TEST MSG')
Run Code Online (Sandbox Code Playgroud)

所以我需要扩展代码,以便我可以告诉syslog-ng,日志属于另一台主机.或者其他一些设计.

有任何想法吗?

UPD:

所以看起来有使用LogAdapter的方法.但如何使用它:

loggerCent = logging.getLogger(prodName + 'Remote')
ce = logging.handlers.SysLogHandler(address=('192.168.1.11', 514), facility='daemon')
logging.basicConfig(level=logging.DEBUG,
                        format='%(asctime)-15s %(name)-5s %(levelname)-8s host: %(host)-15s %(message)s')
loggerCent.addHandler(ce)
loggerCent2 = logging.LoggerAdapter(loggerCent,
                               {'host': '123.231.231.123'})
loggerCent2.warning('TEST MSG')
Run Code Online (Sandbox Code Playgroud)

通过TcpDump查找消息我在LoggerAdapter中看不到任何关于主机的信息我做错了什么?

UPD2:

好吧,我找不到将主机发送到syslog-ng的方法.虽然可以在链中发送第一个主机,但我真的找不到通过Python Logging发送它的方法.

无论如何,我在syslog-ng: CSV Parser中创建了解析器

parser ipmimon_log {
        csv-parser(
    columns("LEVEL", "UNIT", "MESSAGE")
    flags(escape-double-char,strip-whitespace)
        delimiters(";")
        quote-pairs('""[](){}')
    );
};

log {
    source(s_net); …
Run Code Online (Sandbox Code Playgroud)

python logging syslog-ng

6
推荐指数
1
解决办法
5447
查看次数

如何在没有循环的情况下设置字节中的位

我真的很困惑,但似乎不能做简单的任务:

我只需要设置字节数.

例如:

我需要5位设置.所以我需要0xb00011111.

没有循环可以做到这一点吗?

我也不想写很多东西#defines.

c c++ bit-manipulation

4
推荐指数
1
解决办法
615
查看次数

标签 统计

c ×2

c++ ×2

arduino ×1

bit-manipulation ×1

logging ×1

python ×1

stm32 ×1

struct ×1

syslog-ng ×1