葡萄啵啵不要啵啵 2023-10-18 21:36 采纳率: 0%
浏览 2

对结构体里面的寄存器进行1bit1bit的写入

最近再学习单片机遇到通过结构体访问寄存器的问题如下:


```c
typedef struct {
   uint32    ch[4];
}  S5PC11X_TIMERS;


如何对ch[4]寄存器进行1bit1bit的写,再读出来
  • 写回答

2条回答 默认 最新

  • Leodong. 2023-10-18 21:39
    关注

    该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
    要对结构体中的寄存器进行1bit1bit的写入和读出,可以使用位操作符。以下是一个示例:

    #include <stdio.h>
    
    typedef struct {
       uint32    ch[4];
    }  S5PC11X_TIMERS;
    
    void write_bit(S5PC11X_TIMERS *timers, uint8_t bit_position, uint8_t value) {
        uint8_t mask = 1 << bit_position;
        if (value) {
            timers->ch[0] |= mask;
        } else {
            timers->ch[0] &= ~mask;
        }
    }
    
    uint8_t read_bit(S5PC11X_TIMERS *timers, uint8_t bit_position) {
        uint8_t mask = 1 << bit_position;
        return (timers->ch[0] & mask) ? 1 : 0;
    }
    
    int main() {
        S5PC11X_TIMERS timers;
        timers.ch[0] = 0xFFFFFFFF;
    
        write_bit(&timers, 0, 1);
        write_bit(&timers, 1, 0);
        write_bit(&timers, 2, 1);
        write_bit(&timers, 3, 0);
    
        printf("ch[0]: 0x%08X
    ", timers.ch[0]);
    
        printf("Bit 0: %d
    ", read_bit(&timers, 0));
        printf("Bit 1: %d
    ", read_bit(&timers, 1));
        printf("Bit 2: %d
    ", read_bit(&timers, 2));
        printf("Bit 3: %d
    ", read_bit(&timers, 3));
    
        return 0;
    }
    

    在这个示例中,我们定义了两个函数write_bitread_bit,分别用于对结构体中的寄存器进行1bit1bit的写入和读出。write_bit函数接受一个指向结构体的指针、一个位位置和一个值作为参数,然后使用位操作符将指定的位设置为给定的值。read_bit函数接受一个指向结构体的指针和一个位位置作为参数,然后使用位操作符读取指定的位并返回其值。


    如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

    评论

报告相同问题?

问题事件

  • 创建了问题 10月18日

悬赏问题

  • ¥30 为什么会失败呢,该如何调整
  • ¥50 如何在不能联网影子模式下的电脑解决usb锁
  • ¥20 服务器redhat5.8网络问题
  • ¥15 如何利用c++ MFC绘制复杂网络多层图
  • ¥20 要做柴油机燃烧室优化 需要保持压缩比不变 请问怎么用AVL fire ESE软件里面的 compensation volume 来使用补偿体积来保持压缩比不变
  • ¥15 python螺旋图像
  • ¥15 算能的sail库的运用
  • ¥15 'Content-Type': 'application/x-www-form-urlencoded' 请教 这种post请求参数,该如何填写??重点是下面那个冒号啊
  • ¥15 找代写python里的jango设计在线书店
  • ¥15 请教如何关于Msg文件解析