编辑:我只用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;

}

10-04 21:19