当前位置:   article > 正文

STM32HAL学习学习笔记(1)寄存器操作_stm32 hal库开发可以单独操作寄存器吗

stm32 hal库开发可以单独操作寄存器吗

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

一、volatile关键字

volatile unsigned int * pointer = (unsigned int *)0x40028000; 
  • 1

volatile 防止编译器对寄存器进行优化。

* pointer +=1;
* pointer +=2;
  • 1
  • 2

可能直接被优化为

* pointer +=3;
  • 1

二、强制类型转换以及* 和&操作

强制类型转换

volatile unsigned int * pointer = (unsigned int *)0x40028000; 
//unsigned int * 定义指针类型的变量
//(unsigned int *)0x40028000 强制类型转换,将立即数转换为指针类型
该行代码也可以通过宏定义来实现:
#define pointer (volatile unsigned int *)0x40028000
由于在定义变量会占用内存,通过宏定义来实现只是简单的文本转换节省内存。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

* 和&操作分析

参考文档https://blog.csdn.net/m0_53558236/article/details/120190243

int main()
{
	int a = 10;
	int * p = &a;
	int b = *p;
	*p = 20; //解引用操作符
	printf("a=%d\n", a);
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

& 取地址,int * p = &a 即把a变量的地址放在指针类型变量p中。
int b = p p解引用,将p地址中存放的数据给b,这个存放的数据就是a,即是10,故b=10;
前边已经说了
p其实就是a,所以
p = 20即a = 20;

总结

提示:这里对文章进行总结:
第一篇文章,用起来还是不错,记录学习笔记,脚踏实地,积跬步,至千里。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/126128?site
推荐阅读
相关标签
  

闽ICP备14008679号