串口IAP升级DAY5:APP和Bootloader状态标志位判断

文章详细描述了Bootloader和APP程序中关于LED的工作逻辑,包括缓慢和快速亮灯模式,以及状态判断功能。在Bootloader中,当达到特定时间延迟后会检查RTC备份寄存器并可能跳转到APP;在APP中,相同机制但用于跳回Bootloader。整个过程涉及到时间间隔计算、状态标志位判断以及系统状态的切换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Bootloader程序中的判断:

static void System_LED_Control(void)
{
	static uint32_t time_delay = 0;
	static uint8_t ledsys_cnt = 0;
	
	time_delay++;

	if(time_delay % 100 == 0)
	{
		ledsys_cnt++;//设置缓慢亮灯模式	
	}			
	/* Act灯与 Flt故障灯运行逻辑 系统初始化后即启动 */				
	DS_master.Dev_LED.Act =	(ledsys_cnt%2) ? 1 : 0;
	DS_master.Dev_LED.Flt = (ledsys_cnt%2) ? 0 : 1;	

}

/* APP状态标志位判断 */
static void System_Status_Judge(void)
{
	uint16_t Goto_app_flag = 0;
	static uint32_t timedelay_2s = 0;
	static uint32_t timedelay_5s = 0;
		
	if(timedelay_2s < 200)
	{		
		timedelay_2s++;
	}else{			
		/* 100ms进行跳转状态读取 */
		Goto_app_flag = RTC_ReadBackupRegister(RTC_BKP_DR1);
		
		if (Goto_app_flag == 0X0000)	/* 第一次配置使用 */
		{
			/* 延时等待发送完成 */
			if(timedelay_5s < 500)
			{		
				timedelay_5s++;
			}else{
				/* 直接跳转到APP */
				iap_goto_app();
			}		
		}			
	}
}

void SystemEngine_Low_Task(void)
{
	/* LED工作逻辑 */
	System_LED_Control();
	/* LED外设控制*/
	DRV_LED_Refrush();
	
	System_Status_Judge();
}

APP程序中的判断:

static void System_LED_Control(void)
{
	static uint16_t time_delay = 0;
	static uint8_t ledsys_cnt = 0;
	time_delay++;

	if(time_delay % 10 == 0)
	{
		ledsys_cnt++;//设置快速亮灯模式	
	}			
	/* Act灯与 Flt故障灯运行逻辑 系统初始化后即启动 */				
	DS_master.Dev_LED.Act =	(ledsys_cnt%2) ? 1 : 0;
	DS_master.Dev_LED.Flt = (ledsys_cnt%2) ? 0 : 1;	

}

/* APP状态标志位判断 */
void SystemEngine_High_Task(void)
{
	uint16_t Goto_app_flag = 0;
	static uint32_t timedelay_2s = 0;
	static uint32_t timedelay_5s = 0;
	
	if(timedelay_2s < 200)
	{		
		timedelay_2s++;
	}else{	
		/* 100ms进行跳转状态读取 */
		Goto_app_flag = RTC_ReadBackupRegister(RTC_BKP_DR1);
		
		if (Goto_app_flag == 0X0001)	/* 第一次配置使用 */
		{
			/* 延时等待发送完成 */
			if(timedelay_5s < 500)
			{		
				timedelay_5s++;
			}else{
				/* 直接跳转到BOOTLoad */
				soft_reset();
			}									
		}
	}
}

void SystemEngine_Low_Task(void)
{
	/* LED工作逻辑 */
	System_LED_Control();
	/* LED外设控制*/
	DRV_LED_Refrush();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值