【发布时间】:2019-03-02 01:57:31
【问题描述】:
我正在尝试理解作为可重用固件开发指南一部分的代码。这本书对我来说太难了,但我仍然在努力理解代码。
在本书附带的示例代码中,有一个类似于下面的语法
typedef enum
{
DIO_MAX_MODE
}DioMode_t;
typedef enum
{
DIO_PULLUP_DISABLED, /*< Used to disable the internal pull-ups */
DIO_PULLUP_ENABLED, /*< Used to enable the internal pull-ups */
DIO_MAX_RESISTOR /*< Resistor states should be below this value */
}DioResistor_t;
typedef enum
{
DIO_OUTPUT,
DIO_INPUT
}DioDirection_t;
typedef struct
{
DioResistor_t Resistor; /**< Pullup/Pulldown Resistor - ENABLED or DISABLED */
DioDirection_t Direction; /**< Data Direction - OUTPUT or INPUT */
DioMode_t Function; /**< Mux Function - Dio_Peri_Select */
}DioConfig_t;
如果我理解正确,结构的成员是枚举变量。
并且在代码的一部分中,开发人员以下面的方式为其分配了一个值(不准确,我试图通过对其进行类似的语法来理解整个事情是如何工作的)
DioConfig_t config[] = { {1, 2, 3},
{4, 5, 6}
};
这里发生了什么?这可能吗??
如上初始化时,会不会影响枚举的值,哪些值在变化,如何访问?
编辑:
如果我创建一个这样的结构
#include <stdio.h>
struct test {
int a;
int b;
};
int main()
{
struct test var[] = { {1, 2}, {3, 4} };
/*
struct test var[0] = {1, 2}
struct test var[1] = {3, 4}
*/
printf("%d %d\n", var[0].a, var[1].a);
return 0;
根据我用来调用它们的结构变量,我知道为a 和b 分配了哪些值
例如:var[0].a = 1 和 var1.a = 3
但是我首先展示的代码有 enum 变量作为结构成员
所以分配给结构成员的值是
config[0].Resistor = 1
config[0].Direction = 2
config[0].Function = 3
既然这些是enum 变量,它会改变enum 的值吗?如何???
PS:我开始学习C才几个月,我用它来开发小型嵌入式项目,我阅读了一些在线教程和视频,了解了结构和指针,但是当我打开这个
code ,这对我来说没有多大意义。这正常吗??
【问题讨论】:
-
究竟是什么让您感到困惑?这个例子不是很好的风格,但我不确定这是否是由于你的“(不准确,...)”真实代码的副本。枚举可以用数字吗?
-
令人困惑的是,
{4,5,6}的值不在枚举的有效值范围内,还是其他原因? -
整个代码可以在我提供的驱动链接上找到。 Dio_cfg.c 和 Dio_cfg.h。令人困惑的部分是当我如上所述初始化时,如何将值分配给 struct 和 enum
-
好的,那么超出范围的枚举值不是问题。但目前还不清楚哪一部分让你感到困惑。
-
@Gerhardh 我已经编辑了这个问题。你说的超出范围是什么意思??