免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: yjz98
打印 上一主题 下一主题

数据类型 [复制链接]

论坛徽章:
5
1 [报告]
发表于 2009-03-23 16:34 |显示全部楼层
兄弟,你边界地址没对齐阿。
你应该是32位机,对不?
#define HPIA_LW                        (hpi_vbase+0x04)
#define HPIA_HW                        (hpi_vbase+0x06)
#define HPIA_LR                        (hpi_vbase+0x14)
#define HPIA_HR                        (hpi_vbase+0x16)

如果hpi_vbase是地址对齐,那HPIA_LW && HPIA_LR是4字节地址对齐,但HPIA_HW && HPIA_HR就不是4字节对齐了。

如果你是16位机,没问题.

改成4字节的边界地址,问题应该解决。

[ 本帖最后由 yidou 于 2009-3-24 09:12 编辑 ]

论坛徽章:
5
2 [报告]
发表于 2009-03-24 01:01 |显示全部楼层
#define HPIA_LW                        (hpi_vbase+0x04)
#define HPIA_HW                        (hpi_vbase+0x06)
#define HPIA_LR                        (hpi_vbase+0x14)
#define HPIA_HR                        (hpi_vbase+0x16)

HPIA_LW和HPIA_LR的区别实际上就是一个是写使能有效,一个是读使能有效,转换成指针指向的外设空间是一样的

writew (0x1234, HPIA_LW);  写入1234
writew (0x5678, HPIA_HW);  写入5678   
*tmp++ = readw (HPIA_LR);  读出1212  , 应该读出1234
*tmp++ = readw (HPIA_HR);  读出5656, 应该读出5678


writew (0x1234, HPIA_LW);  写入1234
writew (0x5678, HPIA_HW);  写入5678    //非4字节对齐地址, 非法语句
*tmp++ = readw (HPIA_LR);  读出1212  , 应该读出1234   //奇怪, 写入HPIA_LW && HPIA_HW, 怎么读HPIA_LR && HPIA_HR?
*tmp++ = readw (HPIA_HR);  读出5656, 应该读出5678  //非4字节对齐地址, 非法语句

[ 本帖最后由 yidou 于 2009-3-24 09:19 编辑 ]

论坛徽章:
5
3 [报告]
发表于 2009-03-24 08:54 |显示全部楼层
NULL

[ 本帖最后由 yidou 于 2009-3-24 08:57 编辑 ]

论坛徽章:
5
4 [报告]
发表于 2009-03-24 09:17 |显示全部楼层
原帖由 star316 于 2009/3/24 09:15 发表



他的 0x14  好像是4字节对齐的吧? 改成 0x12 反而没有对齐



眼花了, 所述有误, 已作纠正.

论坛徽章:
5
5 [报告]
发表于 2009-03-24 14:59 |显示全部楼层
原帖由 yjz98 于 2009/3/24 14:46 发表


哪里把它强制字对齐了啊?


readw是强制转换
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP