关于asm(" RPT #0 || NOP");这个语句很让我头疼,
我在ccs寄存器窗口里观察cputimer0tim的值,发现
asm(" NOP");)执行完这句减2;
而
asm(" RPT #0 || NOP")执行完这句减3,
asm(" RPT #255 || NOP")执行完这句减258,
asm(" RPT #256 || NOP")执行完这句再次变成了减3,
asm(" RPT #511 || NOP")执行完这句再次变成了减258
Eric Ma:
建议你直接看一下反汇编是咋回事吧,
注意一下是否有开优化等级。
asm(" RPT #256 || NOP")执行完这句再次变成了减3。
另外,如果想延时,建议可以直接调用DELAY_US函数。
ERIC
关于asm(" RPT #0 || NOP");这个语句很让我头疼,
我在ccs寄存器窗口里观察cputimer0tim的值,发现
asm(" NOP");)执行完这句减2;
而
asm(" RPT #0 || NOP")执行完这句减3,
asm(" RPT #255 || NOP")执行完这句减258,
asm(" RPT #256 || NOP")执行完这句再次变成了减3,
asm(" RPT #511 || NOP")执行完这句再次变成了减258
囧:
第一,你的测试方法有问题,RPT汇编语句如果是立即数测试方式,操作数应该是一个8位数据,最大不超过255,所以你给256就溢出魏0了,给511就又溢出为255了。
第二,你用timer测试,看到的执行系统时钟数会多一个系统时钟,所以nop指令其实只占用一个系统时钟
第三,如果是 RPT #0 || NOP,那就会占用两个系统时钟,因为RPT指令如果操作数是立即数,本身就会占用一个系统时钟,然后NOP还会占用一个系统时钟。所以这就是为什么你测试出来这个语句是3个系统时钟的原因,但是无论立即数是多少,RPT指令执行一次就占用一个系统时钟,区别只是NOP重复多少次。
建议你好好阅读C2000汇编语言手册:SPRU430E
关于asm(" RPT #0 || NOP");这个语句很让我头疼,
我在ccs寄存器窗口里观察cputimer0tim的值,发现
asm(" NOP");)执行完这句减2;
而
asm(" RPT #0 || NOP")执行完这句减3,
asm(" RPT #255 || NOP")执行完这句减258,
asm(" RPT #256 || NOP")执行完这句再次变成了减3,
asm(" RPT #511 || NOP")执行完这句再次变成了减258
Chujun Li:
回复 囧:
SPRU430E我有,请问一般什么时候用C,什么时候用汇编?
关于asm(" RPT #0 || NOP");这个语句很让我头疼,
我在ccs寄存器窗口里观察cputimer0tim的值,发现
asm(" NOP");)执行完这句减2;
而
asm(" RPT #0 || NOP")执行完这句减3,
asm(" RPT #255 || NOP")执行完这句减258,
asm(" RPT #256 || NOP")执行完这句再次变成了减3,
asm(" RPT #511 || NOP")执行完这句再次变成了减258
囧:
回复 Chujun Li:
你指的是用NOP指令延时还是用Delayus函数吗?
关于asm(" RPT #0 || NOP");这个语句很让我头疼,
我在ccs寄存器窗口里观察cputimer0tim的值,发现
asm(" NOP");)执行完这句减2;
而
asm(" RPT #0 || NOP")执行完这句减3,
asm(" RPT #255 || NOP")执行完这句减258,
asm(" RPT #256 || NOP")执行完这句再次变成了减3,
asm(" RPT #511 || NOP")执行完这句再次变成了减258
Tao Tang3:
回复 囧:
NOP
关于asm(" RPT #0 || NOP");这个语句很让我头疼,
我在ccs寄存器窗口里观察cputimer0tim的值,发现
asm(" NOP");)执行完这句减2;
而
asm(" RPT #0 || NOP")执行完这句减3,
asm(" RPT #255 || NOP")执行完这句减258,
asm(" RPT #256 || NOP")执行完这句再次变成了减3,
asm(" RPT #511 || NOP")执行完这句再次变成了减258
囧:
回复 Tao Tang3:
当你只需要延时一个系统周期,或者几个精准系统周期的时候就用nop,如果时间要长一点,比如一两个us,就用C语言。
TI中文支持网



