其实这条语句在DSP等系统开发中经常要用到,比如更改某些配置后需要延时几个时钟周期才能够生效,这时asm(”RPT #7 || NOP”)便可以闪亮登场了。虽然这个功能我们都知道而且经常使用,但是具体的细节很多人却不知道,包括我。今天在一个交流群里有人突然问这条指令下去执行之后,会占用多少时钟周期呢?结果可想而知问蒙了。
简单写段代码编译下载到片子里面(我是用的28335进行测试的!),观察CPU Timer0寄存器的TIMER0TIM位。发现执行asm(”RPT #7 || NOP”)之后,TIMER0TIM位增量是8.也就是说每执行一次需要8个时钟周期。确切的说是8个指令周期。这只是对CPU空闲的情况而言,因为空闲的时候,一个指令周期大约就是一个时钟周期。如果28335有任务的时候,可能就会占用9个抑或更多的时钟周期,这要分析流水线等因素。实际应用时,大可不必如此精准。用别的片子也可能会多于8个时钟,主要看片子执行每条指令需要多少个时钟周期。但有一点可以肯定的是asm(”RPT #7 || NOP”)这条指令必然会侵占8个指令周期.因为这条指令的意思就是重复执行7+1=8次 NOP 指令。
简单的总结一下:
对于TMS320F28335而言asm(”RPT #N || NOP”)会执行N+1次NOP指令,占用N+1个指令周期。正常情况下占用N+1个时钟周期。其他的片子占用的时钟周期自己计算。O(∩_∩)o …