關於asm(" RPT #7 || NOP")的一點解釋

其實這條語句在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 …

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章