IAR语言扩展特性里有个##value##这种扩展语言特性,主要用于宏的实现。其中#号中间的value就是你传递进去的值。可以用来提高代码复用性。在编写CC2530的Timer3与Timer4时就可以使用。因为这两个8位定时器特性基本一致。下面是实现通用的Timer3与Timer4头文件实现,用一个头文件可以实现Timer3或Timer4操作。
- #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  
需要注意的是,要使用此特性的话,需要在工程设置里面做如下设置,勾选其中的复选框。 
