项目场景:
项目场景:自动锁后板和主板通讯键盘灯要显示旋转灯问题描述:
问题描述:因为后锁板要与前主板通讯所以前板不能使用死等延时的方式来显示键盘灯未解决问题的代码:这种死等的方式导致串口数据接收不到
// 开锁
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一直在运行这个函数