文号
t29829
阅读
4428
回复
4
收藏
3
stm32的程序在MDK里为什么不能这么写??
2010/10/13
IP:黑龙江
在stm32的库函数立里,对GPIOA的BRR寄存器操作语句还原回来是这样的语句: ((GPIO_TypeDef *) 0x40010800)->BRR=0x00000001;
那为什么我这条语句就不行呢:
((uint32_t *) 0x4001080c)=0x00000000;

错误信息:..\main.c(66): error:  #137: expression must be a modifiable lvalue ,大概意思是不能给一个数字赋值
为什么这样写就不行呢?我想这么来写内存.
16年3个月前IP:未同步
261668
1楼
ourdev上有人指出了,应该是(* (uint32_t *) 0x4001080c)=0x00000000;
引用
评论
16年2个月前IP:未同步
265043
2楼
(*(uint32_t *) 0x4001080c)=0x00000000;
写成这样才行(uint32_t *) 是强制类型转换,把后面的数字转换成指针,之后你用指针还要加个*取数据运算符才能用;
另外最好写成(*(volatile uint32_t *) 0x4001080c)=0x00000000;避免MDK在优化的时候出现问题
引用
评论
14年11个月前IP:未同步
355288
3楼
[s:274] 很棒!
引用
评论
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的