小编Try*_*hon的帖子

将n字节整数分成单个字节的便携方式

问题很简单:取一个32位或64位整数并将其拆分为通过(通常)1字节接口发送,如uart,spi或i2c.

要做到这一点,我可以轻松地使用位掩码和移位来获得我想要的东西.但是,我希望它是可移植的,可以在大端和小端上工作,但也可以使它适用于不丢弃位但是通过进旋转的平台(屏蔽可以摆脱多余的位?).

示例代码:

uint32_t value;
uint8_t buffer[4];
buffer[0] = (value >> 24) & 0xFF;
buffer[1] = (value >> 16) & 0xFF;
buffer[2] = (value >> 8) & 0xFF;
buffer[3] = value & 0xFF;
Run Code Online (Sandbox Code Playgroud)

我想保证这适用于任何支持32位或更多整数的平台.我不知道这是否正确.

c portability bit-manipulation

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

无法使用我认为应该是编译时常量的静态数组进行初始化

我正在尝试初始化一个静态数组,其大小基于我认为应该是编译时常量.

这很容易修复,但根本就不使用静态,但我没想到这个问题会出现.这可能会在未来引起我的其他问题.

相关部分:

typedef struct {
    GPIO_TypeDef* Port;
    uint16_t Pin;
} PortPin;

typedef struct {
    I2C_HandleTypeDef *Handle;
    uint16_t Address;
    PortPin Interrupt;
    PortPin Shutdown;
} VL53L1_Dev_t;

//This one is bigger but I've kept it short to keep it readable. It's 3 elements in my code
static VL53L1_Dev_t Sensors[] = {
    {//1
            &hi2c2,
            0x52,
            {
                    GPIOA,
                    GPIO_PIN_11
            },
            {
                    GPIOA,
                    GPIO_PIN_10
            }
    }
}
static const int sensorCount = sizeof(Sensors)/sizeof(Sensors[0]);
static uint8_t encodedData[sensorCount * 2];//Compiler doesn't like this part
Run Code Online (Sandbox Code Playgroud)

由于传感器在编译时完全定义,我期望sensorCount也是编译时常量.这显然不是因为我不能用它来声明和初始化静态数组.我不明白为什么.

c arrays static initialization constants

2
推荐指数
1
解决办法
83
查看次数