在有os系统的程序因为在通讯而其他模块需要延时的方法(不使用死等延时的方法)

项目中遇到前主板与后锁板通讯问题,由于使用死等延时方式导致串口数据接收不到。为解决这个问题,提出了采用计数器和状态机的方案,通过定时调用来避免CPU资源浪费,并确保键盘灯旋转显示的平滑进行,从而实现高效通讯并保持键盘灯效果。
摘要由CSDN通过智能技术生成

项目场景:

项目场景:自动锁后板和主板通讯键盘灯要显示旋转灯

问题描述:

问题描述:因为后锁板要与前主板通讯所以前板不能使用死等延时的方式来显示键盘灯

未解决问题的代码:这种死等的方式导致串口数据接收不到

// 开锁
void KeyPadLed_Unlock(void)
{		
	KeyPadLed_ScanSingle('A', LED_OFF);
	KeyPadLed_ScanSingle('5', LED_ON);
	HalDelayMs(60);
	KeyPadLed_ScanSingle('8', LED_ON);
	HalDelayMs(50);
	KeyPadLed_ScanSingle('0', LED_ON);
	HalDelayMs(50);
	KeyPadLed_ScanSingle('*', LED_ON);
	HalDelayMs(40);
	KeyPadLed_ScanSingle('7', LED_ON);
	HalDelayMs(40);
	KeyPadLed_ScanSingle('4', LED_ON);
	HalDelayMs(30);
	KeyPadLed_ScanSingle('1', LED_ON);
	HalDelayMs(30);
	KeyPadLed_ScanSingle('2', LED_ON);
	HalDelayMs(20);
	KeyPadLed_ScanSingle('3', LED_ON);
	HalDelayMs(20);
	KeyPadLed_ScanSingle('6', LED_ON);
	HalDelayMs(10);
	KeyPadLed_ScanSingle('9', LED_ON);
	HalDelayMs(10);
	KeyPadLed_ScanSingle('#', LED_ON);
	HalDelayMs(60);
	KeyPadLed_ScanSingle('A', LED_OFF);
}


原因分析:

因为死等的原因直接占用CPU所以串口不能实现的接收到数据导致不能进行前板关锁的一些显示


解决方案:

要使用计数器的方法然它按照一个特定的时间在进入那个执行函数,os一直在调用,而且要用状态机分状态去运行
在这里插入图片描述后面Ulock加加然后判断它大于3就进来一次就是30ms*3=90ms

在这里插入图片描述Task一直在运行这个函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值