嵌入式C语言实战案例
1. ERR_CODE_t ipu_power_up_then_init()
在C语言中,使用枚举类型(enum
)定义了一组命名的整数值,这些值通常用于表示一组预定义的选项或状态码。在您提供的代码中,ERR_CODE_t 是一个枚举类型的别名(typedef),它定义了一系列错误代码。
typedef enum{
SYS_PG_OK=0,
GLB_RST_OK=1,
PWR_OFF_OK,
C10_RST_OK,
C10_1V8_PG_ERR,
C10_1V8_PG_OFF_ERR,
C10_0V8_PG_ERR,
C10_0V8_PG_OFF_ERR,
SYS_PG_ERR,
SYS_PG_OFF_ERR,
GLB_RST_ERR,
PWR_OFF_ERR,
C10_RST_ERR,
IPU_APP_STARTUP_ERR,
FT_1V8_PG_ERR,
} ERR_CODE_t;
这个枚举定义了一个错误代码的类型,每个错误代码都有一个特定的名称和值。例如,SYS_PG_OK
表示系统上电正常,其值为0。
当一个函数的返回类型被定义为 ERR_CODE_t
时,这意味着这个函数将返回一个上述枚举中定义的错误代码。例如:
ERR_CODE_t ipu_power_up_then_init() {
ERR_CODE_t err_code;
// ... 函数实现 ...
return err_code;
}
这个函数 ipu_power_up_then_init
的目的是执行某个上电和初始化过程,并根据过程的结果返回一个错误代码。函数内部可能会设置 err_code
变量来表示成功或失败,最后将这个错误代码返回给调用者。
使用 ERR_CODE_t
作为函数返回类型的好处是,它提供了清晰的错误指示,并且是类型安全的,因为函数只能返回在枚举中定义的合法错误代码。这有助于提高代码的可读性和可维护性,同时也使得错误处理更加一致和方便。
2. 有条件的延时
ERR_CODE_t wait_c10_rest_done(void){
int tst_cnt = 0; // 定义一个变量,用于记录循环执行的次数
// 循环,直到C10_RESET_DONE引脚为高电平或tst_cnt达到MAX_TST_SYS_RSTPULLUP_CNT //相当于有条件的延时
while(!GPIO_ReadInputDataBit(PORTC_POWER, C10_RESET_DONE) && tst_cnt < MAX_TST_SYS_RSTPULLUP_CNT) //MAX_TST_SYS_RSTPULLUP_CNT=100
{
delay_ms(100); // 每次循环延迟100毫秒
tst_cnt++; // tst_cnt增加1
}// 等待C10芯片复位完成信号 PA5
// 检查C10_RESET_DONE引脚的电平状态
if(GPIO_ReadInputDataBit(PORTC_POWER, C10_RESET_DONE))
{
return C10_RST_OK; // 如果引脚为高电平,返回C10_RST_OK
}
else
{
return C10_RST_ERR; // 如果引脚为低电平,返回C10_RST_ERR
}
}
3.全局vpx指令状态变量指针