将C #define常量转换为变量

时间:2014-11-18 01:05:32

标签: c constants

我有一个设备驱动程序,使用C中的#define宏对wifi路由器的访问进行硬编码,代码如下:

#define SSID                     "XXXX-XXX" 
#define AUTH                      AAAA
#define PSK                       “YYyy00”

并且使用这些用户定义常量的函数定义为:

router_connect((char *)SSID, sizeof(SSID), AUTH, (char *)PSK, CH_ALL);

我想将这些常量更改为定义.h文件作为字符串,我可以从SD卡读取并将其传递给函数调用而不是在main.h文件中进行硬编码。我希望能够更改它们而不是像程序中编码的固定存储一样存储它们。毕竟它们是用户定义的字符串,只要值在设备之间正确传递,它们就不需要在主代码中进行硬编码。

所以我在main.c中将它们写成:

extern char SSID[] = "XXXX-XXX";
extern uint8 AUTH  =  AAAA;
extern char PSK[]  = "YYyy00";

在SD卡中我有一个文件setup.txt,我在下面用三行输入三个字符串:

XXXX-XXX;
AAAA;
YYyy00;

我写了一个小例程来读取SD卡中的每一行并将字符串分配给变量 SSID,AUTH,PSK

char line[20];  
int line_count;     

FRESULT  my_res;                        
FIL myfil;


my_res = f_open(&myfil, "setup.txt", FA_READ);
if (my_res != FR_OK) {
   printf("file: setup.txt is not found. \n\r");
   /* deal with errors */; 
}

for (line_count = 1; line_count < 4;) {
   f_gets(line, sizeof(line), &myfil); 


   if (line_count == 1) {
      strcpy(SSID, line);
      printf("SSID: %s %s \n\r", SSID, line); 
   }


   if (line_count == 2) {
      strcpy(AUTH, line);
      printf("AUTH: %s %s \n\r", AUTH, line);
   }


   if (line_count == 3) {
      strcpy(PSK, line);
      printf("PSK: %s %s \n\r", PSK, line);
   }

   line_count++;
}

我的意图是在调用函数“router_connect”之前从SD卡读取这些字符串。 我可以毫无问题地做到这一点,当我打印出我从SD卡读取的叮咬时,它们就像硬编码时一样,但我发现“router_connect”功能不喜欢我传递的参数。设备驱动程序在我对#define语句中的值进行硬编码时起作用,但由于某种原因它没有正确地将值传递给函数。你能告诉我,如果我把参数传递给函数调用是不正确的,那么实现它的正确方法是什么。感谢。

1 个答案:

答案 0 :(得分:-1)

首先,很高兴看到这个功能与这些参数的确切程度。其次,我看到你将AUTH值读作char数组,函数想要的是uint8。你怎么通过它?也许将AUTH解析为uint8就可以了。