关于”__IO uint32_t” 中的__IO 表达的意思

关于”__IO uint32_t” 中的__IO 表达的意思这个_IO是指静态volatileuint32_t是指32位的无符号整形变量

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

    这个_IO 是指静态 这个 _IO 是指静态 volatile uint32_t 是指32位的无符号整形变量uint32_t 是指32位的无符号整形变量;

    搞stm32这么久了,经常看到stm32里面库文件里面有用“_IO”定义的变量,查过一下当时记住了,过段时间又给忘记了。所以才特意的写一个博文来记住。

volatile

volatile 类型是这样的,其数据确实可能在未知的情况下发生变化。比如,硬件设备的终端更改了它,现在硬件设备往往也有自己的私有内存地址,比如显存,他们一般是通过映象的方式,反映到一段特定的内存地址当中,这样,在某些条件下,程序就可以直接访问这些私有内存了。另外,比如共享的内存地址,多个程序都对它操作的时候。你的程序并不知道,这个内存何时被改变了。如果不加这个voliatile修饰,程序是利用catch当中的数据,那个可能是过时的了,加了 voliatile,就在需要用的时候,程序重新去那个地址去提取,保证是最新的。归纳起来如下:

1. volatile变量可变允许除了程序之外的比如硬件来修改他的内容 
2. 
访问该数据任何时候都会直接访问该地址处内容,即通过cache提高访问速度的优化被取消 

对于((volatile unsigned long *) 0xE0028000)为随硬件需要定义的一种地址,前面加上“*”指针,为直接指向该地址,整个定义约定符号IOPIN代替,调用的时候直接对指向的地址寄存器写内容既可。这实际上就是内存映射机制的方便性了。其中volatile关键字是嵌入式系统开发的一个重要特点。上述表达式拆开来分析,首先(volatile unsigned long *) 0xE0028000的意思是把0xE0028000强制转换成volatile unsigned long类型的指针,暂记为p,那么就是#define *p,即A为P指针指向位置的内容了。这里就是通过内存寻址访问到寄存器A,可以读/写操作。

对于(volatile 

unsigned 

char 

*)0x20我们再分析一下,它是由两部分组成:
1)(unsigned 


char 

*)0x20,0x20只是个值,前面加(unsigned 

char 

*)表示0x20是个地址,而且这个地址类型是unsigned 

char 

,意思是说读写这个地址时,要写进unsigned 

char 

的值,读出也是unsigned 

char 


2)volatile,关键字volatile 


确保本条指令不会因C 

编译器的优化而被省略,且要求每次直接读值。例如用while((unsigned 

char 

*)0x20)时,有时系统可能不真正去读0x20的值,而是用第一次读出的值,如果这样,那这个循环可能是个死循环。用了volatile 

则要求每次都去读0x20的实际值。

那么(volatile 

unsigned 

char 

*)0x20是一个固定的指针,是不可变的,不是变量。而char 

*u则是个指针变量。
再在前面加”*”:*(volatile 


unsigned 

char 

*)0x20则变成了变量(普通的unsigned 

char变量,不是指针变量),如果#define 



(*(volatile 

unsigned 

char 

*)0x20),那么与unsigned 

char 

i是一样了,只不过前面的i的地址是固定的。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/197376.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 语义分割看这一篇就够了!「建议收藏」

    语义分割看这一篇就够了!「建议收藏」语义分割技术综述本文就ImageSegmentationUsingDeepLearning:ASurvey第三章的模型进行了分析和介绍,第一第二章的基础指示可以看原文进行学习,相关知识有很多这里就不班门弄斧了。最好是一边读原文一边看本文效果更佳原文连接能力有限,水平一般,抱着学习的态度分享此文,有不准确的地方还请各位大佬斧正!3.1全连接网络关于FCN的资料有很多这里就不…

    2022年8月21日
    6
  • java转大数据的学习路线

    java转大数据的学习路线首先这个文章是转载的,留着后面基础再扎实一点之后开始学习,感谢原文的作者,写出了如此清晰的学习路线。原文作者文章链接:https://blog.csdn.net/gitchat/article/details/78341484【不要错过文末彩蛋】申明:本文旨在为普通程序员(Java程序员最佳)提供一个入门级别的大数据技术学习路径,不适用于大数据工程师的进阶学习,也不适用于零编程基础的同…

    2022年6月10日
    31
  • Linux解压zip格式压缩包

    Linux解压zip格式压缩包Linux中zip格式的压缩与解压一、安装yuminstall-yunzip二、使用(一)、压缩常见用法有zip-q-r1.zip1.txt将当前目录下的1.txt压缩为1.zip。选项-q表示忽略执行过程,-r表示递归处理,将指定目录下的所有文件和子目录一并处理zip-q-r1.zip../1.txt将上级目录中的1.txt压缩为1.zip(二)、解压假设当前目录有一个压缩包为1.zip常见的用法有unzip1.zip直接解压到当前目录下

    2022年5月10日
    46
  • 后台管理系统界面_用户界面管理系统

    后台管理系统界面_用户界面管理系统后台界面也可以很酷!31个高大上的后台管理系统模版1.inspiniaDemo2.ThinAdminTemplateDemo&Download3.FreshUI–PremiumWebAppandAdminTemplateDemo&Download4.Clip-One–Bootstrap3Respo…

    2025年10月29日
    1
  • 局域网 广域网 网际网络[通俗易懂]

    局域网 广域网 网际网络[通俗易懂]网络的分类

    2022年10月19日
    8
  • Pytest(1)安装与入门「建议收藏」

    Pytest(1)安装与入门「建议收藏」pytest介绍pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高。根据pytest的官方网站介绍,它

    2022年7月31日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号