/*
* Function: fillDataToPayload
* ----------------------------
* 该函数用于填充数据到指定的数据载荷中。
*
* payload: 指向数据载荷的指针,数据将填充到该载荷中。
* start_bit: 数据填充的起始位索引。
* size: 要填充的数据的位大小。
* modsts: 要填充的新值。
*
* 返回值: 无
*/
void fillDataToPayload(uint64_t* payload, uint8_t start_bit, uint8_t size, uint8_t modsts) {
// 创建掩码,用于清除指定位置数据并设置新值
uint64_t mask = ((1ULL << size) - 1) << start_bit;
// 清除指定位置数据
*payload &= ~mask;
// 设置新值
*payload |= ((uint64_t)modsts << start_bit) & mask;
}
/*
* Function: readCanMsg
* ----------------------------
* 该函数用于从指定的数据载荷中读取特定位置和长度的数据。
*
* payload: 数据载荷,从中读取数据。
* start_bit: 数据的起始位索引。
* size: 要读取的数据的位大小。
*
* 返回值: 从指定位置和长度读取的数据。
*/
uint8_t readCanMsg(uint64_t payload, uint8_t start_bit, uint8_t size) {
// 创建掩码,用于提取指定位置和长度的数据
uint64_t mask = ((1ULL << size) - 1) << start_bit;
// 取出指定位置数据并右移至最低位
uint64_t data = (payload & mask) >> start_bit;
return (uint8_t)data;
}
/*
* Function: print_binary
* ----------------------------
* 该函数用于以二进制形式打印一个 uint64_t 类型的数据。
*
* num: 要打印的 uint64_t 类型的数据。
*
* 返回值: 无
*/
void print_binary(uint64_t num) {
// 定义一个掩码,用于逐位提取 num 的每一位
uint64_t mask = 1ULL << 63; // 64位系统中,最高位是第63位
// 从最高位开始逐位打印 num 的每一位
for (int i = 0; i < 64; ++i) {
// 使用位运算检查当前位是否为1
printf("%d", (num & mask) != 0);
// 将掩码右移一位,准备检查下一位
mask >>= 1;
// 每输出8位添加一个空格,方便阅读
if ((i + 1) % 8 == 0)
printf(" ");
}
printf("\n");
}
用到过的函数
于 2024-04-08 19:12:46 首次发布