zoukankan      html  css  js  c++  java
  • (C)理解#define write(b,addr) (void)((*(volatile unsigned int *) (addr)) = (b))

     

    理解

    #define write(b,addr) (void)((*(volatile unsigned int *) (addr)) = (b))

    嵌入式系统编程,要求程序员能够利用C语言访问固定的内存地址。

    既然是个地址,那么按照C语言的语法规则,这个表示地址的量应该是指针类型。

    所以,知道要访问的内存地址后,比如0x57000040(这儿的addr就是内存地址0x57000040)
    第一步,把它强制转换为指针类型:

    (unsigned int*)(0x57000040);//0x57000040强制转换为指向unsigned int类型

    注: volatile(可变的)这个关键字说明这变量可能会被意想不到地改变,这样编译器就不会去假设这个变量的值了。简单的说使用volatile的目的就是: 让对volatile 变量的存取不能缓存到寄存器,每次使用时需要重新存取。

    第二步,对指针变量解引用,就能操作指针所指向的地址的内容了

    *(volatile unsigned int*)(0x57000040)

    小心地把#define宏中的参数用括号括起来,这是一个很好的习惯。

    所以,write(b,addr) 的作用就是把值b写入addr所指的内存地址单元。

  • 相关阅读:
    修改表结构
    enum/set 约束
    MYSQL 数据类型
    表和数据的基础操作
    存储引擎
    mysql
    HTML 介绍
    selor模块
    select
    协程
  • 原文地址:https://www.cnblogs.com/yanghong-hnu/p/4671353.html
Copyright © 2011-2022 走看看