使用IAR的擴展語言特性編寫可複用的代碼

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

須要注意的是,要使用此特性的話,須要在工程設置裏面作以下設置,勾選其中的複選框。

相關文章
相關標籤/搜索