liteos连接器脚本隐藏的指针问题

一,数据拷贝引起的指针问题

大家想一下,一个指针指向的内存地址处的数据,假设拷贝到了另外一个地方,那么这个时候我们的指针还是指向原来的位置,那么就会导致问题。为什么提出这个问题呢?因为我们前面讲到了liteos的data段的拷贝,那么对于data段的访问的指针是不是也要改变呢?

前面结合小熊派stm32L431的一个例子讲解了liteos在该实例中使用到的连接器脚本,大家对于编译出来的可执行程序以及烧录的位置以及最终的内存布局应该有了解了。在讲解前奏之前我们先解释一个前面遗留下来的一个问题,data段拷贝引起的指针的问题。我们知道在c语言中指针是数据的存储起始地址,前面我们提到data’段从0x0800xxxx拷贝到0x2000xxxx的位置,那么既然数据段data已经做了拷贝,我们访问的时候访问的是拷贝后的地址,这个时候指针应该变化了!!!但是为什么似乎我们在初始化好之后,可以直接使用,而没有修改指针?可能很多人不会想到这个问题,就认为理所应当。下面我们来解释这个问题:

在这里插入图片描述
如上图的蓝色部分是我们刷机之后,liteos系统在flash中的布局,然后我们上电,text段中的代码开始跑,但是这个时候在data段拷贝之前,我们的data段在蓝色部分,还不是橙色部分。这个时候假设text段中的代码对data段可以访问,那么访问的是蓝色部分,然后很快做了data段的拷贝,这个时候进入内存。我们当然期望我们的访问在内存里面。而不是在flash里面。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值