C:如何递归地逐位传输字节?

时间:2014-10-09 14:29:56

标签: c recursion byte

我正在尝试编写一个发送16位字并将其存储在另一个变量中的函数。我想要做的是接受这个词,并一次一位地将数据传输(写入)到新变量。

如果可以递归地完成这项工作也会很棒。因此,例如,我有函数SendCommand(uint32_t addr,uint16_t数据),并且在传输了一位之后,可以移位字节,并且可以使用新数据再次调用该函数。

我的问题是:

  • 如何一次一位地提取和写入新变量?
  • 有什么方法可以确定单词的结尾,并停止调用该函数?

注意:MSB优先

编辑:

我这样做的原因是因为我正在为接受这些数据的设备编写伪代码。现在在我的代码中,我正在模拟一个时钟,并且为该器件指定的格式会在每个时钟下降沿向寄存器写入一个位。

1 个答案:

答案 0 :(得分:2)

在一次通话中写入MSB优先:

void SendCommand(uint32_t addr, uint16_t data) {    
    volatile unsigned char *dest = (unsigned char *)addr
    for(int i=15; i>=0; --i) {
        *dest = (data & 0x8000) >> 15;
               //     ^^^^^^^^ get MSB
               //               ^^^^^ move the MSB down to the LSB, assuming the
               //                     peripheral wants the bit in the LSB.
        data <<=1;
    }
} //SendCommand

在多个调用中执行此操作需要以某种方式保持位数。如果没有在某个地方进行计数,您无法判断是否已将每一位都移出左侧,或者您还没有剩下任何1位。旋转和测试相等性也不起作用,例如0x5555或其他具有重复位模式的值。