我正在编程TI TMS320F28379D微控制器。我需要写一个延迟函数,其中时间单位是CPU周期。德州仪器(TI)提供已在装配中实施的延迟功能。这是:
_F28x_usDelay:
SUB ACC, #1
BF _F28x_usDelay, GEQ
LRETR
通常我用C和C ++编写代码,而且我对汇编只有基本的了解。这个功能很简单。第一条指令从累加器寄存器中减去1,然后分支指令BF一次又一次地循环,而存储在累加器中的值大于或等于0.LRETR只是一个返回指令。
现在,必须知道每个循环需要多少CPU周期。 TI代码附带以下文档:
循环开销为9/10,每个循环需要5个循环。循环计数由以下公式给出: DELAY_CPU_CYCLES = 9 + 5 * LoopCount
我不明白什么是" 9/10周期开销"以及为什么要添加9以获得DELAY_CPU_CYCLES。谁有人向我解释这个?谢谢。
答案 0 :(得分:1)
此链接描述overhead在此上下文中的含义。
在此示例中,开销是循环中未包含的循环,循环是用于从函数调用和返回的循环。根据记录的公式,执行循环的单次迭代需要5个周期,并且仅需要9个周期的开销来调用和返回函数。例如,LRETR指令不是循环的一部分,它是开销的一部分。
也许" 9/10"在描述中表示" 9或10"。调用和返回函数的开销可能需要9到10个周期,具体取决于调用它或管道问题的位置。