IAR語言擴展特性裏有個##value##這種擴展語言特性,主要用於宏的實現。其中#號中間的value就是你傳遞進去的值。能夠用來提升代碼複用性。在編寫CC2530的Timer3與Timer4時就可使用。由於這兩個8位定時器特性基本一致。下面是實現通用的Timer3與Timer4頭文件實現,用一個頭文件能夠實現Timer3或Timer4操做。code
#ifndef _TIMER34_H #define _TIMER34_H #define CLEAR_TIMER34_COUNTER(timer) \ T##timer##CTL &= ~0x04 #define TIMER34_ENABLE_OVERFLOW_INT(timer, val) \ (T##timer##CTL = (val)? T##timer##CTL | 0x08 : T##timer##CTL & ~0x08) #define TIMER34_START(timer, val) \ (T##timer##CTL = (val) ? T##timer##CTL | 0x10 : T##timer##CTL & ~0x10) #define TIMER34_SET_CLOCK_DIVIDE(timer, val) \ do{ \ T##timer##CTL &= ~0xE0; \ (val == 2) ? (T##timer##CTL |= 0x20) : \ (val == 4) ? (T##timer##CTL |= 0x40) : \ (val == 8) ? (T##timer##CTL |= 0x60) : \ (val == 16) ? (T##timer##CTL |= 0x80) : \ (val == 32) ? (T##timer##CTL |= 0xA0) : \ (val == 64) ? (T##timer##CTL |= 0xC0) : \ (val == 128) ? (T##timer##CTL |= 0xE0) : \ (T##timer##CTL |= 0x00); \ }while(0) #define TIMER34_SET_MODE(timer, val) \ do{ \ T##timer##CTL &= ~0x03; \ (val == 1) ? (T##timer##CTL |= 0x01): \ (val == 2) ? (T##timer##CTL |= 0x02): \ (val == 3) ? (T##timer##CTL |= 0x03): \ (T##timer##CTL |= 0x00); \ }while(0) void Timer34_Init(void); #endif