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