打印

非常佩服匠人的bit真气**

[复制链接]
楼主: ayb_ice
手机看帖
扫描二维码
随时随地手机跟帖
21

只要能嵌套8层就可以大大简化工作量了

使用特权

评论回复
22
ayb_ice|  楼主 | 2008-6-3 09:26 | 只看该作者

先再看看吧

使用特权

评论回复
23
simon21ic| | 2008-6-3 09:43 | 只看该作者

宏是不能嵌套自己的

不然这个宏永远解不开了

使用特权

评论回复
24
computer00| | 2008-6-3 10:08 | 只看该作者

俺想不出来,如果不用汇编的话,如何使用nop指令?

好象C语言中是没有nop这个东西的……

使用特权

评论回复
25
xwj| | 2008-6-3 10:15 | 只看该作者

C语言中使用nop有好几种方法的

1、用嵌入汇编asm("nop");
2、用_nop_();
3、定义数据段,填充0x00
...

使用特权

评论回复
26
ayb_ice|  楼主 | 2008-6-3 10:28 | 只看该作者

我的宏在KEIL和IAR里效果是完全正确的

但在FREESCALE的CW里有效果,但有副作用,这应该是它自己的问题,我发现很象宏在FREESCALE的CW里工作不正常。。。

使用特权

评论回复
27
yewuyi| | 2008-6-3 11:01 | 只看该作者

呵呵,宏应该在所有的编译器里面都能正确才对

只是个替换工作罢了,如果有问题,那可能是宏写的不规范造成的。


感觉CW不至于连个替换的工作也做不好

使用特权

评论回复
28
computer00| | 2008-6-3 11:33 | 只看该作者

回复25楼:1,2方法还是使用了汇编。

至于方法3,想不出什么指令可在程序需要的地方填充需要的数据...

使用特权

评论回复
29
yewuyi| | 2008-6-3 12:22 | 只看该作者

3、定义数据段,填充0x00

无法连接

使用特权

评论回复
30
程序匠人| | 2008-6-3 12:35 | 只看该作者

任务完成,匠人的答案如下:

//宏定义方法:
#define __NOP1__ asm("nop");
#define __NOP2__ __NOP1__ __NOP1__
#define __NOP4__ __NOP2__ __NOP2__
#define __NOP8__ __NOP4__ __NOP4__
#define __NOP16__ __NOP8__ __NOP8__
#define __NOP32__ __NOP16__ __NOP16__
#define __NOP64__ __NOP32__ __NOP32__
#define __NOP128__ __NOP64__ __NOP64__


#define __NOPX__(a)             
    if ((a)&(0x01))    {__NOP1__}                    
    if ((a)&(0x02))    {__NOP2__}                    
    if ((a)&(0x04))    {__NOP4__}                    
    if ((a)&(0x08))    {__NOP8__}                    
    if ((a)&(0x10))    {__NOP16__}                    
    if ((a)&(0x20))    {__NOP32__}                    
    if ((a)&(0x40))    {__NOP64__}                    
    if ((a)&(0x80))    {__NOP128__}                    

//宏引用方法(举例):

    __NOPX__(13)

//编译结果:
138:                   __NOPX__(13)
  051D    0000     NOP
  051E    0000     NOP
  051F    0000     NOP
  0520    0000     NOP
  0521    0000     NOP
  0522    0000     NOP
  0523    0000     NOP
  0524    0000     NOP
  0525    0000     NOP
  0526    0000     NOP
  0527    0000     NOP
  0528    0000     NOP
  0529    0000     NOP

//说明,此宏在PICC中编译通过
//程序匠人 于 2008-06-03

使用特权

评论回复
31
John_light| | 2008-6-3 12:39 | 只看该作者

沙匠人的一个发

使用特权

评论回复
32
程序匠人| | 2008-6-3 12:40 | 只看该作者

当参数=255时,编译结果正确,如下

138:                   __NOPX__(255)
  042B    0000     NOP
  042C    0000     NOP
  042D    0000     NOP
  042E    0000     NOP
  042F    0000     NOP
  0430    0000     NOP
  0431    0000     NOP
  0432    0000     NOP
  0433    0000     NOP
  0434    0000     NOP
  0435    0000     NOP
  0436    0000     NOP
  0437    0000     NOP
  0438    0000     NOP
  0439    0000     NOP
  043A    0000     NOP
  043B    0000     NOP
  043C    0000     NOP
  043D    0000     NOP
  043E    0000     NOP
  043F    0000     NOP
  0440    0000     NOP
  0441    0000     NOP
  0442    0000     NOP
  0443    0000     NOP
  0444    0000     NOP
  0445    0000     NOP
  0446    0000     NOP
  0447    0000     NOP
  0448    0000     NOP
  0449    0000     NOP
  044A    0000     NOP
  044B    0000     NOP
  044C    0000     NOP
  044D    0000     NOP
  044E    0000     NOP
  044F    0000     NOP
  0450    0000     NOP
  0451    0000     NOP
  0452    0000     NOP
  0453    0000     NOP
  0454    0000     NOP
  0455    0000     NOP
  0456    0000     NOP
  0457    0000     NOP
  0458    0000     NOP
  0459    0000     NOP
  045A    0000     NOP
  045B    0000     NOP
  045C    0000     NOP
  045D    0000     NOP
  045E    0000     NOP
  045F    0000     NOP
  0460    0000     NOP
  0461    0000     NOP
  0462    0000     NOP
  0463    0000     NOP
  0464    0000     NOP
  0465    0000     NOP
  0466    0000     NOP
  0467    0000     NOP
  0468    0000     NOP
  0469    0000     NOP
  046A    0000     NOP
  046B    0000     NOP
  046C    0000     NOP
  046D    0000     NOP
  046E    0000     NOP
  046F    0000     NOP
  0470    0000     NOP
  0471    0000     NOP
  0472    0000     NOP
  0473    0000     NOP
  0474    0000     NOP
  0475    0000     NOP
  0476    0000     NOP
  0477    0000     NOP
  0478    0000     NOP
  0479    0000     NOP
  047A    0000     NOP
  047B    0000     NOP
  047C    0000     NOP
  047D    0000     NOP
  047E    0000     NOP
  047F    0000     NOP
  0480    0000     NOP
  0481    0000     NOP
  0482    0000     NOP
  0483    0000     NOP
  0484    0000     NOP
  0485    0000     NOP
  0486    0000     NOP
  0487    0000     NOP
  0488    0000     NOP
  0489    0000     NOP
  048A    0000     NOP
  048B    0000     NOP
  048C    0000     NOP
  048D    0000     NOP
  048E    0000     NOP
  048F    0000     NOP
  0490    0000     NOP
  0491    0000     NOP
  0492    0000     NOP
  0493    0000     NOP
  0494    0000     NOP
  0495    0000     NOP
  0496    0000     NOP
  0497    0000     NOP
  0498    0000     NOP
  0499    0000     NOP
  049A    0000     NOP
  049B    0000     NOP
  049C    0000     NOP
  049D    0000     NOP
  049E    0000     NOP
  049F    0000     NOP
  04A0    0000     NOP
  04A1    0000     NOP
  04A2    0000     NOP
  04A3    0000     NOP
  04A4    0000     NOP
  04A5    0000     NOP
  04A6    0000     NOP
  04A7    0000     NOP
  04A8    0000     NOP
  04A9    0000     NOP
  04AA    0000     NOP
  04AB    0000     NOP
  04AC    0000     NOP
  04AD    0000     NOP
  04AE    0000     NOP
  04AF    0000     NOP
  04B0    0000     NOP
  04B1    0000     NOP
  04B2    0000     NOP
  04B3    0000     NOP
  04B4    0000     NOP
  04B5    0000     NOP
  04B6    0000     NOP
  04B7    0000     NOP
  04B8    0000     NOP
  04B9    0000     NOP
  04BA    0000     NOP
  04BB    0000     NOP
  04BC    0000     NOP
  04BD    0000     NOP
  04BE    0000     NOP
  04BF    0000     NOP
  04C0    0000     NOP
  04C1    0000     NOP
  04C2    0000     NOP
  04C3    0000     NOP
  04C4    0000     NOP
  04C5    0000     NOP
  04C6    0000     NOP
  04C7    0000     NOP
  04C8    0000     NOP
  04C9    0000     NOP
  04CA    0000     NOP
  04CB    0000     NOP
  04CC    0000     NOP
  04CD    0000     NOP
  04CE    0000     NOP
  04CF    0000     NOP
  04D0    0000     NOP
  04D1    0000     NOP
  04D2    0000     NOP
  04D3    0000     NOP
  04D4    0000     NOP
  04D5    0000     NOP
  04D6    0000     NOP
  04D7    0000     NOP
  04D8    0000     NOP
  04D9    0000     NOP
  04DA    0000     NOP
  04DB    0000     NOP
  04DC    0000     NOP
  04DD    0000     NOP
  04DE    0000     NOP
  04DF    0000     NOP
  04E0    0000     NOP
  04E1    0000     NOP
  04E2    0000     NOP
  04E3    0000     NOP
  04E4    0000     NOP
  04E5    0000     NOP
  04E6    0000     NOP
  04E7    0000     NOP
  04E8    0000     NOP
  04E9    0000     NOP
  04EA    0000     NOP
  04EB    0000     NOP
  04EC    0000     NOP
  04ED    0000     NOP
  04EE    0000     NOP
  04EF    0000     NOP
  04F0    0000     NOP
  04F1    0000     NOP
  04F2    0000     NOP
  04F3    0000     NOP
  04F4    0000     NOP
  04F5    0000     NOP
  04F6    0000     NOP
  04F7    0000     NOP
  04F8    0000     NOP
  04F9    0000     NOP
  04FA    0000     NOP
  04FB    0000     NOP
  04FC    0000     NOP
  04FD    0000     NOP
  04FE    0000     NOP
  04FF    0000     NOP
  0500    0000     NOP
  0501    0000     NOP
  0502    0000     NOP
  0503    0000     NOP
  0504    0000     NOP
  0505    0000     NOP
  0506    0000     NOP
  0507    0000     NOP
  0508    0000     NOP
  0509    0000     NOP
  050A    0000     NOP
  050B    0000     NOP
  050C    0000     NOP
  050D    0000     NOP
  050E    0000     NOP
  050F    0000     NOP
  0510    0000     NOP
  0511    0000     NOP
  0512    0000     NOP
  0513    0000     NOP
  0514    0000     NOP
  0515    0000     NOP
  0516    0000     NOP
  0517    0000     NOP
  0518    0000     NOP
  0519    0000     NOP
  051A    0000     NOP
  051B    0000     NOP
  051C    0000     NOP
  051D    0000     NOP
  051E    0000     NOP
  051F    0000     NOP
  0520    0000     NOP
  0521    0000     NOP
  0522    0000     NOP
  0523    0000     NOP
  0524    0000     NOP
  0525    0000     NOP
  0526    0000     NOP
  0527    0000     NOP
  0528    0000     NOP
  0529    0000     NOP

使用特权

评论回复
33
HWM| | 2008-6-3 12:49 | 只看该作者

若无优化,不知结果如何?呵呵。或代个变量进去逗它一下

使用特权

评论回复
34
xwj| | 2008-6-3 12:51 | 只看该作者

二进制确实是最科学的方法

只是是在不明白那么多NOP用来干嘛...


要做到精确到周期延时是很简单的事,又何必非用nop呢?

而且,要“精确”就得关中断...

使用特权

评论回复
35
huangqi412| | 2008-6-3 12:52 | 只看该作者

顶匠人

使用特权

评论回复
36
cheungman| | 2008-6-3 12:53 | 只看该作者

re

匠人的方法体现了数学之美.

使用特权

评论回复
37
程序匠人| | 2008-6-3 12:58 | 只看该作者

变量?

tU08 i,j ;
135:                   i=1;
  051B    1283     BCF 0x3, 0x5
  051C    1303     BCF 0x3, 0x6
  051D    01C8     CLRF 0x48
  051E    0AC8     INCF 0x48, F
136:                   j=i+1;
  051F    3002     MOVLW 0x2
  0520    00C9     MOVWF 0x49
137:                   __NOPX__(j*4+1)
  0521    0000     NOP
  0522    0000     NOP
  0523    0000     NOP
  0524    0000     NOP
  0525    0000     NOP
  0526    0000     NOP
  0527    0000     NOP
  0528    0000     NOP
  0529    0000     NOP

使用特权

评论回复
38
wrainp| | 2008-6-3 12:58 | 只看该作者

    

使用特权

评论回复
39
程序匠人| | 2008-6-3 13:01 | 只看该作者

说明一下,变量是不行的

大家不要被37楼误导。那只是特例,碰巧。

使用特权

评论回复
40
HWM| | 2008-6-3 13:02 | 只看该作者

楼主估计也是此法,且已遇到相应问题,这玩意儿和优化有

还是别这样玩为妙。

使用特权

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

本版积分规则