[应用相关] 被编译器优化掉了关键的语句

[复制链接]
2523|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

粉丝
快速回复 在线客服 返回列表 返回顶部