当前位置:网站首页>链接脚本-变量使用中遇到一个问题
链接脚本-变量使用中遇到一个问题
2022-08-09 03:15:00 【田园诗人之园】
最近在使用链接脚本变量的时候遇到一个问题,示例如下:
uint32_t *gps_ram_end = (uint32_t *)&_ereserdata;
uint32_t *gps_ram_start = (uint32_t *)&_sreserdata;
uint32_t len = gps_ram_end - gps_ram_start;
虽然gps_ram_end = 0x10800, gps_ram_start = 0x10000,
但是len的值却是512,后来尝试使用下面的示例去解决了一下,发现是len值是正确的。
uint8_t *gps_ram_end = (uint8_t *)&_ereserdata;
uint8_t *gps_ram_start = (uint8_t *)&_sreserdata;
uint32_t len = gps_ram_end - gps_ram_start;
经过思考之后突然醒悟过来,在用指针去做处理的时候,它是按照指针指向的类型的个数,而不是两个地址之间的差值。
完整的样例如下面所示:
MEMORY
{
...
testsram (rwx) : ORIGIN = 0x10000, LENGTH = 2K
...
}
ENTRY(_stext)
SECTIONS
{
...
_reserdata = LOADADDR(.reserdata);
.reserdata : {
_sreserdata = ORIGIN(testsram);
*(.reserdata .reserdata.*)
_ereserdata = ORIGIN(testsram) + LENGTH(testsram);
} > testsram
...
}
1, 使用uint32_t *去接变量, len = 512
uint32_t *gps_ram_end = (uint32_t *)&_ereserdata;
uint32_t *gps_ram_start = (uint32_t *)&_sreserdata;
uint32_t len = gps_ram_end - gps_ram_start;
2, 使用uint8_t *去接变量,len = 2048
uint8_t *gps_ram_end = (uint8_t *)&_ereserdata;
uint8_t *gps_ram_start = (uint8_t *)&_sreserdata;
uint32_t len = gps_ram_end - gps_ram_start;
2,直接用unsigned int去接变量,大家可以考虑一下,这种情况下得出来的结果是什么。可以肯定的说,这个值基本上不会是2048,
uint32_t gps_ram_end = _ereserdata;
uint32_t gps_ram_start = _sreserdata;
uint32_t len = gps_ram_end - gps_ram_start;
边栏推荐
猜你喜欢
![Embedded system driver advanced [2] - platform bus driver development _ basic framework](/img/1c/f9881e6ecdcd8175e88f044c0552e5.jpg)
Embedded system driver advanced [2] - platform bus driver development _ basic framework

phpStdudy的下载和DVWA的搭建

The condition variable condition_variable implements thread synchronization

JS ES5也可以创建常量?

多商户商城系统功能拆解23讲-平台端分销等级

交换VLAN实验

Kubernetes:(十五)PV与PVC的《恩怨情仇》

DSPE-PEG-OH,DSPE-PEG-Hydroxyl,磷脂-聚乙二醇-羟基仅供科研实验使用

【剑指offer】二进制中1的个数&&2的幂

win10上运行emwin
随机推荐
cmd路径空格问题解决方案
Redis的过期策略和淘汰策略
数学基础(三)PCA原理与推导
深度学习——以天气识别为例,探讨如何保存神经网络模型
unshift() :将一个或多个元素添加到数组的开头
dice和iou
C专家编程 第10章 再论指针 10.1 多维数组的内存布局
QQ浏览器 replaceAll方法 is not a function 问题解决方法
那些关于DOM的常见Hook封装(一)
作为常用的荧光标记试剂Cy5 亚磷酰胺(CAS号:182873-67-2)有哪些特点了?
一款免费的强大办公工具。
非关系型数据库MongoDB:(二)副本集部署说明、数据迁移、限制内存、启用mongo认证
【机器学习】21天挑战赛学习笔记(三)
win10怎么安装.net framework 3.5?
开发工程师必备————【Day05】UDP协议;进程的并发与并行
VMware不正常关机
powershell execution strategy
SwiftUI * SwiftUI 4.0 全新的导航系统
Kubernetes:(十三)secret与configmap的那些事
Embedded system driver advanced [2] - platform bus driver development _ basic framework