背景说明
在做stm32的时候,使用的是前后台的裸机逻辑,没有使用实际的操作系统,而在while循环中,获取到上位机的指令后,需要进行相应的操作,实现操作很简单,但是要保证得到该指令后只能执行一次相应的操作,这就需要使用一个标志位来实现这个功能加以保证,虽然逻辑简单,但是在我初次接触嵌入式和C语音的时候也花了一番力气。借此掘金的征文比赛,予以记录。
实现逻辑
解析中在接收到上位机的指令后,执行操作,处置标志位flag 执行循环中,通过read_Auto_value_flag保证执行一次EEPROM操作。执行一次后就置为1
代码实例
下面是以按键控制的操作中,保证eeprom设备只读写一次的操作。
//1————————进入图像自动模式设置
if(KEY4_count==2)
{ Q1=1; if(KEY1_flag)//+ { read_Auto_value_flag= 0; //标志位处置0 L1++; if(L1>2) L1=0; } if(KEY2_flag)//- { read_Auto_value_flag= 0; L1--; if(L1<0) L1=2; } if (L1>2) L1=0; if(L1<0) L1=2; if(0== read_Auto_value_flag) { read_Auto_value_flag= 1; //标志位处置1 EEPROM_DataBuff[0]= L1;//自动 0、1、2对应值1、2、3??? EEPROM_WriteBuffer(AUTO_VAL,EEPROM_DataBuff,1); //一次将多个参数保存 delay_ms(50); IR_ReadParameter_EEPROM(); if(L1==1) SetCameraValue(11,10,1);//发送亮度优化 else SetCameraValue(11,10,3);//直方图 delay_ms(50); if(L3==255) { SetCameraValue1(1,4,0xfe);//增益 }else { SetCameraValue1(1,4,L3);//增益 } delay_ms(50); if(L1!= 1) { if(L4== 255) { SetCameraValue1(0,5,0xfe);//亮度 }else { SetCameraValue1(0,5,L4);//亮度 } delay_ms(50); } } KEY1_count=0; KEY2_count=0; }