本帖最后由 hotpower 于 2011-5-4 21:09 编辑
实际酒鬼很早就提到此问题了。
酒鬼的方法很好,就是头文件要加倍。
hotpower 发表于 2011-5-1 18:38
回菜农老师,继续改进新的写法,去掉加倍的头文件。。并且,上面的写法统统作废。。作废。。
还是用1楼的例子,这是1楼的写法:- UART0s.UA_FSR.b.BIF = 1;
- UART0s.UA_FSR.b.FEF = 1;
- UART0s.UA_FSR.b.PEF = 1;
其中有个.b, 略显麻烦。
新的写法如下:
新写法一:非优化版本 - 13条汇编指令:- UART0s.UA_FSR.BIF = 1;
- UART0s.UA_FSR.FEF = 1;
- UART0s.UA_FSR.PEF = 1;
新写法二:优化版本(带下划线)- 5条汇编指令:- UART0s.UA_FSR_.BIF = 1;
- UART0s.UA_FSR_.FEF = 1;
- UART0s.UA_FSR_.PEF = 1;
- REG_COMMIT(UART0s.UA_FSR); //或 REG_COMMIT(UART0s.UA_FSR_);
新写法三:直接32位赋值(仅c++有效)- 5条汇编指令- unsigned int v = UART0s.UA_FSR;
- v |= 0x00000070;
- UART0s.UA_FSR = v;
写法三只用于c++, 如果在c程序用,需要加上.v,和1楼的旧写法一样,并且Keil同样编译出5条汇编指令- unsigned int v = UART0s.UA_FSR.v;
- v |= 0x00000070;
- UART0s.UA_FSR.v = v;
支持新写法的寄存器头文件下载
|