我想做以下几件事:
#define ConfigureCAN(index,value) CAN.MBOX##index=value
for (i=0;i<15;i++) ConfigureCAN (i,0);这不管用。那么有没有别的办法呢:
ConfigureCAN (0,0);
ConfigureCAN (1,0);..。
谢谢。
编辑: Wil结构的索引是否正确?#define ConfigureCAN (index,value) {struct MBOX *Mailbox;Mailbox = &can.MBOX0 +(index* sizeof(struct MBOX));MBOX=value;}
发布于 2014-11-17 20:47:31
不,您不能使用for循环索引变量(它只在运行时获得它的值)来构建编译时符号名称。当程序运行时,即for循环执行时,符号名称不可用,因此没有任何意义。
你也许可以设置一个(指针)数组来使访问更容易循环,但是你需要初始化一个看起来很像的数组(但如果你的目标是获得更好的运行时性能)。
发布于 2014-11-17 20:52:41
在C中没有简单的方法可以做到这一点。
根据您使用的框架和硬件,可能有另一种方法来解决您的CAN结构:
MBOX###值,则可以在适当的位置创建一个具有指针的数组:易失性int * MBOXPOINTERS[] ={ &CAN.MBOX0,&CAN.MBOX1,/*自己继续*/ };
(将volatile int替换为各自头文件中使用的任何内容)
https://stackoverflow.com/questions/26972804
复制相似问题