奇怪的浮点操作错误 不支持指标操作
来源:互联网 发布:端口绑定mac地址 编辑:程序博客网 时间:2024/06/06 10:39
各位看官,请看以下代码:
pdata指向一个并非字对齐的地址空间,也是本博客提醒各看官的地方,如果对非对齐的地址访问,请不要使用指针形式,代为使用数据方式访问。
float* pdataf;pdataf = (float*)pdata;for(i=0;i<16;i++){*pdataf++ = get_keepad(i+1);}
上述代码是想通过一个浮点数指针来修改当前内存中的数据,然后将指针向后加。
此代码在监控是生成数据协议用,但这段代码在通过JTAT调试时,如果单步执行不会有问题,直接运行就会出现死机【HardFault】并复位的现象,不得解,后查看原来处理的代码,发现如果按此处理却没有问题:
float* pdataf;pdataf = (float*)pdata;for(i=0;i<16;i++){pdataf[i] = get_keepad(i+1);}
通过数组方式访问却没有问题。
比较了两种写法的指令如下:
下图为指针写法,
下图为数组写法
关键点在于:
STM r7!,{r0} ;用于将数据写入内存地址
与
STR r0, [r8, r5, LSL #2] ;用于寄存器操作指令,相当于 r8[r5*4] = r0, r5为循环变量,相当于r8[i*4] = r0, 即数据访问的形式,4个字节的长度
指令说明文档:
STM<c><q> <Rn>{!}, <registers>
Operation
if ConditionPassed() then
EncodingSpecificOperations();
address = R[n];
for i = 0 to 14
if registers<i> == ‘1’ then
if i == n && wback && i != LowestSetBit(registers) then
MemA[address,4] = bits(32) UNKNOWN; // encoding T1 only
else
MemA[address,4] = R[i];
address = address + 4;
if wback then R[n] = R[n] + 4*BitCount(registers);
Exceptions
UsageFault, MemManage, BusFault.
从文档的指令对齐信息来看:
Alignment and data access
The following data accesses always generate an alignment fault:
• Non halfword-aligned LDREXH and STREXH
• Non word-aligned LDREX and STREX
• Non word-aligned LDRD, LDMIA, LDMDB, POP , LDC , VLDR, VLDM, and VPOP
• Non word-aligned STRD, STMIA, STMDB, PUSH, STC , VSTR, VSTM, and VPUSH.
STM不包括其中,但STMIA,STMDB包括在其中,难道是对齐问题?
这里数据的确不是字对齐的,我只能怀疑他了。
- 奇怪的浮点操作错误 不支持指标操作
- 关于“类不支持Automation操作”的错误
- mfc 不支持尝试执行的操作 错误
- 文件操作的奇怪?
- 奇怪的++操作
- tomcat日志暴涨,操作出现奇怪错误的问题
- jboss日志暴涨,操作出现奇怪错误的问题
- 奇怪的 多步 OLE DB 操作产生错误
- 误差的浮点操作
- 运行错误:“试图执行系统不支持的操作”
- “只进结果集不支持请求的操作”错误解决办法
- 移位操作的奇怪问题
- 不支持尝试执行的操作
- 浮点数的操作问题
- 调用远程数据库的存储过程出现“ORA-02064不支持分布式操作”错误的解决方法
- 网站指标操作
- 奇怪的Mongo数据库更新操作变成了删除操作
- 试图执行系统不支持的操作
- Linux命令行一些要点(四)
- Android技术积累:图片缓存管理
- DeDecms SQL调用某篇文章内容
- Codeforces Round #197 (Div. 2) B. Xenia and Ringroad
- Android 虚拟机的命令笔记
- 奇怪的浮点操作错误 不支持指标操作
- linux 查看文件编码以及修改编码
- 纯CSS滑动效果
- 浅谈百度原创计划真正的“目的”
- 幸运大转盘-jQuery+PHP实现的抽奖程序(上)
- 为Debian/Ubuntu的apt-get install添加自动补齐/完成功能
- Android SDK 与 eclipse 的配置
- linux command Line and shell script bible(笔记二_非用户变量)
- c++ 继承 虚函数