当前位置:网站首页>链接脚本-变量使用中遇到一个问题
链接脚本-变量使用中遇到一个问题
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;
边栏推荐
猜你喜欢
随机推荐
条件变量condition_variable实现线程同步
LeetCode_43_字符串相乘
数学基础(四)极大似然估计、误差的高斯分布与最小二乘估计的等价性
DSPE-PEG-OH,DSPE-PEG-Hydroxyl,磷脂-聚乙二醇-羟基仅供科研实验使用
net core 读取sqlserver所有表转为json
The condition variable condition_variable implements thread synchronization
01| 数据类型
JSON beautification plugin for Chrome
加密公司集体裁员 以应对加密寒冬和通货膨胀?现加密总市值低于1万亿美元
数组与切片
项目中'说到做不到'的个人分析
Deep learning - in the recognition, for example, this paper discusses how to preserve the neural network model
SwiftUI * SwiftUI 4.0 全新的导航系统
Redis的过期策略和淘汰策略
当IDEA罢工时
JSP入门
如何实现canal数据同步
卷积神经网络的推导过程
SQLserver重新累计问题
win10上运行emwin