历史上的今天
返回首页

历史上的今天

今天是: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语言中不存在。  


*************************************************************

以上......................................

推荐阅读

史海拾趣

优先(苏州)半导体公司的发展小趣事

1994年,三星电子(苏州)半导体有限公司在苏州工业园区成立,成为园区首批入驻的外资企业之一。公司初期主要生产配套、低附加值产品,但随着市场的变化和竞争的加剧,公司开始寻求转型。2003年,苏州工厂开始转型生产核心产品,标志着公司从低端生产向高端制造的转变。此后,公司不断加大在智能制造方面的投入,采用先进的半导体自动化生产管理系统和ERP管理系统,实现了“无人化”自动化生产,生产自动化率可达90%以上。同时,公司始终坚持“绿色经营”的可持续发展理念,致力于保护及改善周边环境,履行企业的环保社会责任。

AMERICASEMI [America Semiconductor, LLC]公司的发展小趣事

为了进一步扩大市场份额,AMERICASEMI积极寻求与其他企业的合作机会。公司与多家知名电子产品制造商建立了稳定的合作关系,为其提供优质的半导体产品和技术支持。同时,AMERICASEMI还积极开拓国际市场,将产品出口到全球多个国家和地区,实现了业务的快速增长。

Agilent Technologies公司的发展小趣事

AMERICASEMI公司成立于XXXX年,起初是一家专注于半导体技术研发的小型创业公司。在创立初期,公司面临着资金短缺、市场竞争激烈等诸多挑战。然而,凭借创始团队对半导体技术的深刻理解和市场需求的敏锐洞察,AMERICASEMI成功开发出一系列具有竞争力的半导体产品,并逐渐在市场中占据了一席之地。

Herrmann Kg公司的发展小趣事

近年来,Herrmann Kg积极推进数字化转型,以提升公司的竞争力和市场响应速度。公司任命了具有丰富行业经验的首席数字官(CDO),负责推动集团内部流程的数字化转型。通过数字化整合业务流程,Herrmann Kg简化了与客户之间的沟通方式,优化了工作速度和透明度,同时为全球客户提供了一致的优质体验。这一战略转型不仅提升了公司的运营效率,还为客户创造了更多的附加价值技术的。

Amprobe公司的发展小趣事

近年来,Herrmann Kg积极推进数字化转型,以提升公司的竞争力和市场响应速度。公司任命了具有丰富行业经验的首席数字官(CDO),负责推动集团内部流程的数字化转型。通过数字化整合业务流程,Herrmann Kg简化了与客户之间的沟通方式,优化了工作速度和透明度,同时为全球客户提供了一致的优质体验。这一战略转型不仅提升了公司的运营效率,还为客户创造了更多的附加价值技术的。

Fuji Teminal Industry Co Ltd公司的发展小趣事

Herrmann Kg凭借其卓越的产品质量和专业的服务,赢得了全球众多领先客户的信赖。例如,CUSTOMCELLS®作为一家全球领先的客户专用锂电池开发商,在生产过程中采用了Herrmann Kg的超声波焊接系统,有效降低了废品率,提高了生产效率。这种深度合作不仅展示了Herrmann Kg在电池制造领域的专业能力,也进一步巩固了其在全球市场中的地位。通过不断满足客户的特定需求,Herrmann Kg在电子及其他相关行业中树立了良好的口碑。

问答坊 | AI 解惑

UPS应用及其维修技术.pdf

UPS应用及其维修技术.pdf…

查看全部问答>

DSP的C语言心得记录8-利用CCS分析DSP的时钟运行周期

分别用C语言和汇编语言进行程序设计,计算正弦函数值,并比较代码效率。 1)C语言编程 #include #define NX 180 //最大正弦角度 #define pi 3.14159 short i; double x[NX] //定义输入正弦角度数组(弧度值) double r[NX] //定义输出 ...…

查看全部问答>

求助基于单片机的USB体温计资料

小弟欲求助基于单片机的USB体温计资料 谢谢啦…

查看全部问答>

在MP3上播放媒体文件时能否实现该功能?求高手来解答一下

我想在一个MP3或MP4等便携设备上面加一个功能,用户播放该文件时检查他是否有权限,如果没有授权,则不能播放,需要授权。 我想问的是能否通过修改Firmware来实现该功能,即播放时触发事件检查该文件是否有权限,不知道需不需要修改硬件,请教高手 ...…

查看全部问答>

航嘉HK328-51BP,微机用ATX电源电路详解

我家电脑,联想家悦2018在断电后需等待15分钟左右才能启动,有时候主机能够启动但是显示器不能点亮,由于显示器是从机箱电源直接取用12v的直流所以怀疑是电源问题,希望大家给予鼓励…

查看全部问答>

看看这个问题,群里朋友的提问

各位大侠,帮忙看一下,这个运放的作用呀,想了很久没有想出来,还是拿出来大家一起看: 我以为这个电路是一个积分,二阶滤波电路。不知道正确否。 我考虑两种情况:当UI>0和UI…

查看全部问答>

【备战2011国赛子分类】——仪器仪表类+资料锦集

本帖最后由 paulhyde 于 2014-9-15 03:01 编辑 …

查看全部问答>

华为“网络工程师”培训专用教程

华为“网络工程师”培训专用教程 网络工程师必备。。。。。。。。。。。…

查看全部问答>

移植到51单片机中汇编的一个小问题

移植到51单片机中汇编的一个小问题 save_stack:        INC  DPTR        INC  R0        MOV  A,@R0  &nb ...…

查看全部问答>