历史上的今天
今天是:2025年03月30日(星期日)
2020年03月30日 | C指针+ STM32 理解
2020-03-30 来源:eefocus
环境:IAR + Cortex-M3的处理器
关注:指针在寄存器层次上的存储、调用等。。。
推荐:让你不再害怕指针
存储:
示例代码如下:
int yyy=16;
int *ptr1 = &yyy;
int **ptr2 = &ptr1;
int (*ptr3)[3];
int *(*ptr4)[4];
int main()
{
................
//使用这几个变量
.................
return 0;
}
IAR--View--Statics显示的全局区(静态区)情况:

以ptr2来说,定义:int **ptr2 = &ptr1;
从上图可知,指针变量ptr2的类型,即指针的类型:int ** ;指针ptr2所指向的类型:int*;相应的 (*ptr) 所指向的类型:int*.......
变量ptr2 存放在 地址:0x2000 0008位置,内容:0x2000 0004; 变量*ptr2 存放在 地址:0x2000 0004位置,内容:0x2000 0000; 变量**ptr2 存放在 地址:0x2000 0000位置,内容:16(0x10);
查看内存(Memory):

操作:
首先理解 函数的 参数传递方式:值传递、地址传递、引用传递。
资料:http://pan.baidu.com/s/1bnvZTTl
一个预备的常识:
为了说明这个问题,先给出一个代码:
int a=4;
int x;
x=a;
x=x+3;
看好了没,现在我问你:最终a值是多少,x值是多少?
(怎么搞的,给我这个小儿科的问题。还不简单,不就是a==4 x==7嘛!)
在这个代码中,你要明白一个东西:虽然a值赋给了x,但是a变量并不是x变量哦。我们对x任何的修改,都不会改变a变量。呵呵!虽然简单,并且一看就理所当然,不过可是一个很重要的认识喔。
其他的,看上边的资料链接。
实例:两个变量的数值交换。C代码如下:
#include "stdio.h"
void Exchg1(int x, int y)
{
int tmp;
tmp=x;
x=y;
y=tmp;
//printf("x=%d,y=%dn",x,y);
}
void Exchg2(int *px, int *py)
{
int tmp=*px;
*px=*py;
*py=tmp;
//printf("*px=%d,*py=%dn",*px,*py);
}
void main()
{
int a=4,b=6;
Exchg1 (a,b) ;
//printf("a=%d,b=%d n",a,b);
Exchg2(&a,&b);
//printf("a=%d,b=%d n",a,b);
}
IAR的 反汇编代码:

图3:由下图能够看出 Exchg1 ()函数 为值传递 的参数调用

图4:函数执行后,值没有变化。

-------------------------------------
图5:由下图能够看出 Exchg2 ()函数 为地址传递 的参数调用

图6:函数调用后,变量的值已发生交换....

其他:
关于 堆、栈的作用、理解,可以参考我转载过来的文章: stm32 堆和栈(stm32 Heap & Stack)。
另外注意:引用的概念在嵌入式C语言中不存在。
*************************************************************
以上......................................
史海拾趣
|
DSP的C语言心得记录8-利用CCS分析DSP的时钟运行周期 分别用C语言和汇编语言进行程序设计,计算正弦函数值,并比较代码效率。 1)C语言编程 #include #define NX 180 //最大正弦角度 #define pi 3.14159 short i; double x[NX] //定义输入正弦角度数组(弧度值) double r[NX] //定义输出 ...… 查看全部问答> |
|
我想在一个MP3或MP4等便携设备上面加一个功能,用户播放该文件时检查他是否有权限,如果没有授权,则不能播放,需要授权。 我想问的是能否通过修改Firmware来实现该功能,即播放时触发事件检查该文件是否有权限,不知道需不需要修改硬件,请教高手 ...… 查看全部问答> |
|
我家电脑,联想家悦2018在断电后需等待15分钟左右才能启动,有时候主机能够启动但是显示器不能点亮,由于显示器是从机箱电源直接取用12v的直流所以怀疑是电源问题,希望大家给予鼓励… 查看全部问答> |
|
各位大侠,帮忙看一下,这个运放的作用呀,想了很久没有想出来,还是拿出来大家一起看: 我以为这个电路是一个积分,二阶滤波电路。不知道正确否。 我考虑两种情况:当UI>0和UI… 查看全部问答> |




