【发布时间】:2016-10-25 19:06:01
【问题描述】:
这是否可以在 Linux GCC 下编译和工作?
在 Github 上托管的 LoRa 网关堆栈中,我在 loragw_hal.h 中找到了以下构造
enum lgw_radio_type_e {
LGW_RADIO_TYPE_NONE,
LGW_RADIO_TYPE_SX1255,
LGW_RADIO_TYPE_SX1257
};
#define LGW_RF_CHAIN_NB 2 /* number of RF chains */
然后在 loragw_hal.c
static enum lgw_radio_type_e rf_radio_type[LGW_RF_CHAIN_NB];
编辑:数组在代码中的任何地方都没有初始化
然后在函数中
setup_sx125x(uint8_t rf_chain, uint32_t freq_hz)
以下switch语句用于根据rf_chain参数选择rf链
switch (rf_radio_type[rf_chain]) {
case LGW_RADIO_TYPE_SX1255:
// some code
break;
case LGW_RADIO_TYPE_SX1257:
// some code
break;
default:
DEBUG_PRINTF("ERROR: UNEXPECTED VALUE %d FOR RADIO TYPE\n",
rf_radio_type[rf_chain]);
break;
}
rf_chain 参数设置为 1,当函数被调用时,它当然会选择默认的 Error 'unexpected rf chain'。
版权持有者 Semtech Inc. 的支持始终指向此代码,如果您对其产品有任何问题,请作为参考。
但我有一种感觉,如果不进行任何修改,这段代码无论如何都不会运行。
所以我在这里向论坛提出的问题是,除了上面的这个构造没有真正意义之外,这不是一个错误的构造吗?
这是否可以在 Linux GCC 下编译和工作?
我尝试在 GCC ARM 下使用此代码,但它似乎没有按计划工作。
【问题讨论】:
-
代码看起来一切正常,但
switch在rf_radio_type[1]中的值上,而不是在1上...并且显示的代码都没有设置数组中的值。 -
正确,数组没有初始化,无论如何,我认为更糟糕的是,因为如果为 rf_radio_type 分配的空间没有初始化为 NULL,这可能会像彩票一样出来
-
我看不出您提供的代码有任何本质上的错误或荒谬之处。值得怀疑的是,
switch没有明确的LGW_RADIO_TYPE_NONE案例,但也许该替代方案以不同的方式处理。您对代码有具体的顾虑吗? -
实际上,由于数组是
static,它的元素最初被归零(LGW_RADIO_TYPE_NONE)......但没有显示将它们设置为其他任何东西。 -
"* ...它并没有按计划工作*" -- 那么它做什么呢?