使用IAR的扩展语言特性编写可复用的代码

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

需要注意的是,要使用此特性的话,需要在工程设置里面做如下设置,勾选其中的复选框。

使用IAR的扩展语言特性编写可复用的代码_第1张图片


你可能感兴趣的:(使用IAR的扩展语言特性编写可复用的代码)