- 小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
\
背景说明
在做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;
}