免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4511 | 回复: 10
打印 上一主题 下一主题

[C] 求助:ARM源代码的一个置位操作函数。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-21 10:14 |只看该作者 |倒序浏览
#define bwMCDR2_ADDRESS 4
#define bsMCDR2_ADDRESS 17
#define bmMCDR2_ADDRESS BIT_MASK(MCDR2_ADDRESS)

#define BIT_MASK(_bf)(((1U<<(bw##_bf))-1)<<(bs##_bf)
#define SET_BITS(_dst,_bf,_val)\
           ((_dst)=((_dst)&~(BIT_MASK(_bf))) | (((_val)<<(bs##_bf))&(BIT_MASK(_bf))))
SET_BITS(MCDR2,MCDR2_ADDRESS,RegisterNumber);






没看懂他做的什么和怎么做的。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
2 [报告]
发表于 2008-10-21 10:19 |只看该作者
LZ了解他是在什么情况下要对什么寄存器进行操作吗?
估计这和硬件寄存器的设置有关系。具体的代码应该可以看懂吧

论坛徽章:
0
3 [报告]
发表于 2008-10-21 10:27 |只看该作者
不了解。
是在c语言精华集锦里边看到的。
文章里边只是说写的好,也没说是干嘛的。

我没太看懂,可以稍微解释一下嘛。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
4 [报告]
发表于 2008-10-21 10:52 |只看该作者
但从函数名上可以看看到,BIT_MASK应该是设置位掩码的,SET_BITS就是给某个bit置1的。 Over

论坛徽章:
0
5 [报告]
发表于 2008-10-21 14:35 |只看该作者
不知道是不是和体系结构相关
说真的 仔细看了这个实现  感觉就是严谨而冗余  估计就是照顾到了不同架构上的种种可能吧。。。
有的地方为什么这么做也不是很清楚。。。

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
6 [报告]
发表于 2008-10-21 14:50 |只看该作者
原帖由 duanius 于 2008-10-21 14:35 发表
不知道是不是和体系结构相关
说真的 仔细看了这个实现  感觉就是严谨而冗余  估计就是照顾到了不同架构上的种种可能吧。。。
有的地方为什么这么做也不是很清楚。。。

为什么说冗余呢?

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
7 [报告]
发表于 2008-10-21 14:54 |只看该作者
原帖由 ldy2534 于 2008-10-21 10:14 发表
没看懂他做的什么和怎么做的。

设置 MCDR2 的 bit17 - bit20 的值为RegisterNumber

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
8 [报告]
发表于 2008-10-21 15:51 |只看该作者
感觉可以直接写个程序测试一下,看一下结果更直接一点

论坛徽章:
0
9 [报告]
发表于 2008-10-21 16:21 |只看该作者
为了节约时间采用了宏,目的就是设置寄存器中的某些位为特定值

论坛徽章:
0
10 [报告]
发表于 2008-10-21 16:50 |只看该作者
原帖由 Godbach 于 2008-10-21 15:51 发表
感觉可以直接写个程序测试一下,看一下结果更直接一点


支持,你在这里猜还是不太容易懂的,根据上下文理解宏相对容易些,这个宏差不多就是对指定的寄存器做位操作

##连接的应该是构建一个字符串,标记不同的寄存器吧,额也只能这么猜了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP