编辑:我只用case语句,我不知道是否有更简单的方法来做到这一点
好的,所以我想调用47个不同的宏之一,这些宏的不同之处仅在于名称更改
如果输入0,则调用“宏” AD0_ADCOMP0,而31是AD0_ADCOMP31
这将是一个汇编程序,我想设置给定寄存器编号的某个位。
声明AD0_ADCOMP0 = 0x000;可以,但是如何在宏中添加变量?
我试图做
Storelocation = &AD0_ADCOMP0 + offset
Storelocation = 0x000
但它的功能不像原始的那样。
AD0_ADCOMP0 = 0x000;
在寄存器的存储位置中存储0x000。我觉得这很简单,我看不到它。
结构是
typedef union
{
struct
{
__HWORD hword;
} ADCOMP;
struct
{
__HWORD hword;
} ADCOMPB;
} __ADCOMP;
#ifdef __IO_DEFINE
#pragma segment DATA=IO_AD0,attr=IO,locate=0x1304
#endif
#define AD0_ADCOMP0 (IO_AD0._ADCOMP0.ADCOMP.hword)
最佳答案
boost可以产生多个case
:
#include <boost/preprocessor/repetition/repeat.hpp>
#define DECL(z, n, _data) case n: AD0_ADCOMP ## n = 0x000; break;
...
int input = ...;
switch(input) {
BOOST_PP_REPEAT(47, DECL,)
}
变成:
switch(input) {
case 0:
AD0_ADCOMP0 = 0x000;
break;
case 1:
AD0_ADCOMP1 = 0x000;
break;
...
case 46:
AD0_ADCOMP46 = 0x000;
break;
}