弱弱的问下这个库函数返回值怎么读啊
本帖最后由 axman002 于 2021-6-22 16:29 编辑近来在使用华大的ARM库函数编程,其中碰到这样一个库函数(比较结果返回)
en_cmp_output_state_t CMP_GetOutputState(M4_CMP_TypeDef *CMPx)
{
/* Check parameter */
DDL_ASSERT(IS_VALID_CMP(CMPx));
return (en_cmp_output_state_t)(CMPx->MON_f.OMON);
}
我需要读取该函数的返回值,查这个函数返回值类型en_cmp_output_state_t是这样定义的:
typedef enum en_cmp_output_state
{
CmpOutputLow= 0u, ///< Compare output Low "0"
CmpOutputHigh = 1u, ///< Compare output High "1"
} en_cmp_output_state_t;
可见是个枚举类型。
可是问题来了,我程序定义一个变量是符合上述格式要求的枚举类型,但是硬件仿真始终无法正确获取函数返回值,只有直接调用该函数来判断才行。我就纳闷了,求教各位,这种函数返回值到底要用什么样的变量来获取啊?
反复尝试后自个解决了问题,原来要在定义变量时加上static限定符。不过说实话,我不是很理解为什么enum类型的返回值一定要用static变量才能读到 需要static修饰是表象, 十之**是优化选项的后果.
你可以尝试优化级别改成0试试. 变量作用域的问题
test1函数中的a是作用域本来是整个test1函数,但后面a没人使用,所以调试器认为作用域提前结束了
test2局部变量加了static,声明这是一个需要长久保持的局部变量,他的作用域虽限制在函数内,但生命周期和全局变量相同
test3直接用全局变量,作用域和声明周期,和整个程序相同
test4因为a在后面的if语句会用到,所以a的声明周期延续到if语句,没执行if语句前a仍有效
编译器把变量声明周期最短化,是为了尽可能的使多个变量使用同一个RAM存储,变量重叠
int fun( int n)
{
return n + 3;
}
void test1()
{
int a;
a = fun(4);
}
void test2()
{
static int a;
a = fun(4);
}
int a_test3;
void test3()
{
a_test2 = fun(4);
}
void test4()
{
int a;
a = fun(4);
if(a)
{
Gpio_SetHigh();
}
}
页:
[1]