void MyParaRead(void) { STMFLASH_Read(PARA_ADDR,p.au16,(PARA_LEN / 2)); if(p.au16[0] == Calcu_CRC16(&p.au8[2],(PARA_LEN - 2))){ if(p.s.prgver == PRGVER){ ; }else{ p.s.sheblx = 1; p.s.para_ver = 1; MyParaInit(); } }else{ MyParaFactory(); //MyParaSave(); } }
时间: 2024-04-19 21:29:17 浏览: 118
这段代码是一个函数`MyParaRead`,它的功能是从存储器中读取参数并进行一些校验和处理操作。让我来解释一下代码的具体功能:
1. `STMFLASH_Read(PARA_ADDR,p.au16,(PARA_LEN / 2));` 这行代码调用了一个函数`STMFLASH_Read`,它的作用是从存储器的`PARA_ADDR`地址开始,读取长度为`PARA_LEN / 2`个字节的数据,并将这些数据存储到数组`p.au16`中。
2. `if(p.au16[0] == Calcu_CRC16(&p.au8[2],(PARA_LEN - 2)))` 这行代码进行了一个校验和的判断。它比较了数组`p.au16`的第一个元素与通过函数`Calcu_CRC16`计算得到的校验和,如果相等,则进入下一步的判断和处理。
3. `if(p.s.prgver == PRGVER)` 这行代码判断了参数结构体`p.s`中的成员变量`prgver`是否等于预定义的常量`PRGVER`,如果相等,则执行一个空语句`;`,否则进入下一步的处理。
4. `p.s.sheblx = 1; p.s.para_ver = 1; MyParaInit();` 这几行代码将参数结构体`p.s`中的成员变量`sheblx`和`para_ver`赋值为1,然后调用函数`MyParaInit()`进行参数的初始化。
5. 如果校验和不相等,则执行`MyParaFactory();`函数,该函数用于恢复出厂设置。
总结起来,这段代码的作用是读取存储器中的参数数据,并进行校验和验证。如果校验和正确,并且参数版本号与预定义的版本号相等,则不进行任何操作。如果校验和正确但参数版本号不相等,则将参数结构体中的一些成员变量赋值为1,并调用初始化函数。如果校验和不正确,则执行出厂设置函数。
阅读全文