2017-02-11 74 views
0

我剛開始學習的ARM Cortex-M4,它擁有先進的功能,如DSP指令,......的ARM Cortex M4調重排一個unsigned int變量

uint32_t my_rearrange(uint32_t value){ 
    uint32_t value_high = (value & 0xffff0000)>>16; 
    uint32_t value_low = (value & 0x0000ffff); 
    return (value_low<<16)|value_high; 
} 

這是一個簡單的重新排列unsigned int變量的代碼。
無論如何要調整這個函數以獲得最佳性能或在cortex-M4中執行速度最快嗎?有沒有辦法讓我在這個函數中使用dsp指令?

回答

0

您不需要爲此使用任何dsp指令。你所看到的只是一個16位旋轉。編譯器應該認識到這一點並生成一個ROR。 GCC 5.4.1與標誌-O3 -std=c++11 -march=armv7-m -mtune=cortex-m4 -mthumb做,對你的代碼generates

my_rearrange(unsigned long): 
    ror  r0, r0, #16 
    bx  lr 

你可以加速這一過程將是如果它是內聯的唯一途徑。