打印
[技术问答]

MDK不支持位操作吗?或者怎么设置可以操作位?

[复制链接]
1628|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dontium|  楼主 | 2024-8-24 11:14 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
用小的HC32F460和HC32L130等,均遇到使用库无法达到目的的问题,使用例程也有例外。跟踪调试发现,在位操作时,相应的指令有误,和实际不符,现举例如下。

例如对某一位的操作:

             M0P_SYSCTRL->SYSCTRL0_f.HCLK_PRS = 7;
相应的汇编指令为:

0x00000740 781C      LDRB     r4,[r3,#0x00]
0x00000742 2507      MOVS     r5,#0x07
0x00000744 432C      ORRS     r4,r4,r5
0x00000746 701C      STRB     r4,[r3,#0x00]
0x00000748 4C31      LDR      r4,[pc,#196]  ; @0x00000810

R3作为间址地址,装载为:

         
而实际需要装载的是SYSCTRL0的地址0x40002000,
其执行结果错误。


在其它使用位操作的地方,均为间接寻址时的地址装载错误所导致。还未发现别的原因引起。


使用特权

评论回复
沙发
laocuo1142| | 2024-8-28 14:57 | 只看该作者
MDK支持位操作啊

使用特权

评论回复
板凳
laocuo1142| | 2024-8-28 14:57 | 只看该作者
DK本身并不需要进行特别的设置来支持位操作,因为位操作是C语言标准的一部分,MDK作为C语言的编译器和开发环境,自然支持这些操作。

使用特权

评论回复
地板
dontium|  楼主 | 2024-8-28 18:11 | 只看该作者
laocuo1142 发表于 2024-8-28 14:57
DK本身并不需要进行特别的设置来支持位操作,因为位操作是C语言标准的一部分,MDK作为C语言的编译器和开发 ...

从汇编上看,对应的的间接寻址的地址不对。
实际的程序,也是不正常,但改为读-修改-写方式后就可以正常工作。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:官向官来民向民,穷人向的是穷人

151

主题

1172

帖子

10

粉丝