打印
[应用相关]

被编译器优化掉了关键的语句

[复制链接]
1902|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhangxk|  楼主 | 2009-4-13 11:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
DMA_UART1TxStructure.DMA_PeripheralBaseAddr = (u32)USART1->DR;

我使用的是MDK 3.22a版,在编译时上面这行被编译器优化掉了,我取消了优化设置选项,但还是没用,这行还是被优化掉了,这是怎么回事儿?
沙发
香水城| | 2009-4-13 11:18 | 只看该作者

你需要使用volatile修饰符

对于编译器来讲,以后没有用到的赋值,它认为是无用的操作,所以优化掉了。


关于你这个语句,从字面上看也确实没有意义,你为什么要把USART_DR寄存器的内容传送到假定为DMA基地址的变量中?这是2个风马牛不相及的东西,除非你给变量起了一个迷惑人的名字。

使用特权

评论回复
板凳
zhangxk|  楼主 | 2009-4-13 11:38 | 只看该作者

不是要传寄存器的内容

我的本意是要把串口接收寄存器的地址值赋值给DMA的外设地址寄存器,那该如何写这一句呵?C用的不是很熟,请指点一下。

使用特权

评论回复
地板
zhangxk|  楼主 | 2009-4-13 11:42 | 只看该作者

明白了,指针理解不够

应该这样写的:
DMA_UART1TxStructure.DMA_PeripheralBaseAddr = (u32)&USART1->DR;

谢谢提醒!

使用特权

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

本版积分规则

20

主题

69

帖子

1

粉丝