TI中文支持网
TI专业的中文技术问题搜集分享网站

关于asm(" NOP")和asm(" RPT #N || 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

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语言。

赞(0)
未经允许不得转载:TI中文支持网 » 关于asm(" NOP")和asm(" RPT #N || NOP")占用的时钟周期
分享到: 更多 (0)