单片机函数返回值是指函数执行完毕后返回的结果,这个结果可以在程序中使用,也可以赋值给其他变量。单片机函数返回值的使用可以帮助程序更好地实现逻辑功能,提高程序的效率。
有的函数执行后会产生一个状态,如读写FLASH操作成功与否,这时可以将函数的返回值用于判断函数是否成功执行。当函数执行成功时,返回值为0,否则返回其他的值,程序可以根据返回值执行不同的操作。
例如,下面的代码中,函数read_flash()返回值的非零判断代表读写操作未成功。
int read_flash(uint32_t addr, uint16_t *buf, uint16_t len)
{
int i;
/* 读取Flash数据 */
for(i = 0; i < len; i++)
{
*buf++ = *(volatile uint16_t *)addr;
}
/* 判断返回值 */
if(i == len)
{
return 0;
}
else
{
return -1;
}
}
函数的返回值也可以用于在不同的函数之间传递数据。例如,如果一个函数需要调用另一个函数并获得它的返回值,那么这个返回值就可以直接用于调用函数中。
例如下面的代码,函数A()调用函数B(),并且需要使用B()的返回值。这时就可以把B()的返回值作为A()的返回值,并且在调用A()时获取B()的返回值。
int function_B(void)
{
int value = 100;
/* 执行操作 */
return value;
}
int function_A(void)
{
int x;
/* 调用函数B()并获取返回值*/
x = function_B();
/* 返回B()的返回值 */
return x;
}
函数返回值也可以用于控制循环结构和控制结构。例如,当函数返回值为真或非零时,可以用于终止循环结构;当函数返回值为假或0时,则可以执行下一轮循环结构。
例如下面的代码,函数function_C()返回值为真时,终止循环结构。
int function_C(uint16_t *data, uint16_t len)
{
int ret;
/*执行操作*/
ret = function_D();
/* 判断返回值 */
if(ret)
{
return 1;
}
else
{
return 0;
}
}
void function_E(void)
{
uint16_t data[10];
int i;
/* 循环结构 */
for(i = 0; i < 10; i++)
{
if(function_C(data, i))
{
break;
}
}
}