void E52142_WriteRegister(e52142No_e no, e52142RegAddr_e addr, uint16_t data)
{
uint16_t txbuf[4] = {0}, rxbuf[4] = {0};
e52142WriteRegReq_t *txdat = (e52142WriteRegReq_t *)txbuf;
// e52142WriteRegRsp_t *rxdat = (e52142WriteRegRsp_t *)rxbuf;
txdat->addr = addr;
txdat->cmd = Cmd_WriteReg;
txdat->data = data;
txdat->crc = CRC_16_CCITT(txbuf, 2);
if(no == E52142No_1)
{
Dmt1If_SpiData(txbuf, rxbuf, 4);
}
else if(no == E52142No_2)
{
Dmt2If_SpiData(txbuf, rxbuf, 4);
}
else
{}
}
⚠️ 重要提示 :在C语言中,通过指针访问结构体成员(如
txdat->addr)本身就是对该指针的"调用"或"使用"。这与函数调用不同,但属于同等重要的运行时操作。
🧠 为什么会产生"未使用"的错觉?
❌ 常见误解分析
| 误解类型 | 真实情况 |
|---|---|
| "必须像函数那样调用" | 错误!指针解引用+成员访问已是标准用法 |
| "没有出现在表达式右侧" | 错误!txdat->addr 就是有效的左值表达式 |
| "没有传递给其他函数" | 不需要!此处是直接操作内存的关键步骤 |
📌 类比理解
想象你有一个快递箱(txbuf),而 txdat 是箱子上的智能标签:
- 当你说 "标签·收件人 = 张三" 时,就是在使用这个标签
- 同样,
txdat->addr = addr就是给快递箱贴标签的过程