问题很简单:取一个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位或更多整数的平台.我不知道这是否正确.
我正在尝试初始化一个静态数组,其大小基于我认为应该是编译时常量.
这很容易修复,但根本就不使用静态,但我没想到这个问题会出现.这可能会在未来引起我的其他问题.
相关部分:
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也是编译时常量.这显然不是因为我不能用它来声明和初始化静态数组.我不明白为什么.