void Thread_EdrProcess(void const *argument)
{
static uint8_t read_vin_state = 0;
uint8_t cnt_getvin=0;
float x_v = 0.0f;
float y_v = 0.0f;
memset(&VehicleEDRData, 0xff,sizeof(VehicleEDRData));
FXLS90322_Init();
read_vin_state=get_vin(vin_info);
GetSnFromFlash(sn_info);
while(IsAccelerometerValid() == FALSE)
{
osDelay(EDR_PROCESS_INTERVAL);
};
while(1)
{
if(!read_vin_state)
{
if(cnt_getvin<10)
{
cnt_getvin++;
if(get_vin(vin_info))
{
read_vin_state = 1;
}
}
}
if(flag_set_vin)
{
const char RESET_VIN[] = "RESET000000000000"; //清FLASH中VIN
const char RESET_VIN_1[] = "reset000000000000";
uint8_t res , res_1;
res = memcmp(vin_info,RESET_VIN ,sizeof(vin_info));
res_1 = memcmp(vin_info,RESET_VIN_1,sizeof(vin_info));
if((!res)||(!res_1))
{
W25QXX_Erase_Chip_osMutex();
for(uint8_t i=0 ;i< sizeof(vin_info);i++)
{
vin_info[i] = 0xFF;
}
}
else
{
set_vin(vin_info,17);
get_vin(vin_info_temp);
vin_read_flag = 1;
uprintf("@VIN:%s\r\n",vin_info_temp);
}
flag_set_vin=0;
}
if(GetFlagSetSn())
{
SetSnToFlash(sn_info);
GetSnFromFlash(sn_info);
uprintf("@SN:%s\r\n",sn_info);
SetFlagSetSn(0);
}
if(GetCalibrationFlag() == 3)
{
/*加速度计校准*/
x_offset = Accelerometer_Calibration(XaxisDeltaVBuff, 200);
y_offset = Accelerometer_Calibration(YaxisDeltaVBuff, 200);
if(getTermianlState() != 2)
{
WriteAccOffsetDataToFlash((uint8_t *)&x_offset, 8);
SetCalibrationFlag(4);
CalibrationSucFlag = 1;
uprintf("%f",x_offset);
}
else
{
if((x_offset - 36 < 6.5) && (x_offset - 36 > -6.5))
{
CalibrationSucFlag = 1;
}
else
{
USARTSendOut(USART0,"\r\n需要重新校准\r\n",strlen("\r\n需要重新校准\r\n"));
}
uprintf("%f",x_offset);
SetCalibrationFlag(0);
}
}
else
{
CrashEventSaveToFlash();
}
if(GetEraseCrasheventFlag())
{
CleanCrashEventFlash();
uprintf("Clear complete\r\n");
SetEraseCrasheventFlag(0);
}
osDelay(EDR_PROCESS_INTERVAL);
}
}
基于new bing部分指引作答:
uint8_t read_vin_state = 0; // VIN读取状态变量
uint8_t cnt_getvin = 0; // 获取VIN的计数器
char x_v[22];
char y_v[22];
memset(VehicleEDRData, 0x00, sizeof(struct vehicle_Data)); // 清零VehicleEDRData结构体
FXLS90322_Init(); // 初始化FXLS90322芯片
get_vin(&read_vin_state); // 获取VIN信息并将结果存储在read_vin_state变量中
GetSnFromFlash(); // 从闪存中获取SN信息
while(1) {
// 进行加速度计验证检查
if(IsAccelerometerValid() == FALSE) {
osDelay(EDR_PROCESS_INTERVAL); // 延迟一段时间后再次进行验证
continue;
}
// 尝试最多10次获取VIN信息
if(read_vin_state == 0 && cnt_getvin < 10) {
get_vin(&read_vin_state);
cnt_getvin++;
}
// 判断是否设置了VIN并清除或存储新的VIN
if(flag_set_vin == TRUE) {
if(strcmp(VIN, RESET_VIN) == 0 || strcmp(VIN, RESET_VIN_1) == 0) {
clearStoredVinInSpiFlash(); // 清除存储在闪存中的VIN
} else {
storeVinToSpiFlash(); // 存储新的VIN到闪存
printf("VIN: %s\n", VIN); // 打印VIN信息
}
}
// 判断是否需要写入SN信息
if(GetFlagSetSn()) {
writeSnToSpiFlash(); // 将SN信息写入闪存
GetSnFromFlash(); // 重新获取并打印SN信息
}
// 进行加速度计校准
if(GetCalibrationFlag() == 3) {
CalculateOffsetXY();
// 根据终端状态,要么存储校准结果到闪存中,要么与阈值进行比较并采取相应措施
}
// 判断是否需要擦除碰撞事件数据
if(GetEraseCrashEventFlag() == TRUE) {
eraseCrashEventDataInSpiFlash(); // 擦除闪存中的碰撞事件数据
printf("Crash event data erased.\n"); // 打印消息
}
osDelay(EDR_PROCESS_INTERVAL); // 循环迭代结束时的延迟
}
作为一名机械专业的大一新生学习C语言其实是源于一次偶然事情,那次我们专业要求安装那个CAD软件(机械人的吃饭家伙😊),由于某些原因(ps~我手滑修改了重要文件数据)导致我的软件崩溃了。
没办法中只能在某淘上面购买了远程安装套餐😅😅,当时师傅帮我远程修复软件时我真的深深震撼到了。
真的就什么都看不懂有感觉好高级,于是我就暗暗下决心要学习编程(当初纯纯觉得看着一大段大码的样子帅)----