LED调试中碰到的优先级问题
来源:互联网 发布:win32系统编程 哈特 编辑:程序博客网 时间:2024/05/22 05:24
最近调试LED驱动时,基本问题解决了。在一个LED多功能共享上却遇到了拦路虎。对同一个LED灯的控制,要实现以下要求:
(1)在未开机的BOOT LOADER状态,插入充电线闪橙灯,拔掉灭;充满显示绿灯;电压太低开不了机时显示红色灯。
(2)在开机后的操作系统状态,充电闪橙色灯,充满显示绿色灯;电量不够闪红色灯,电量严重不够一直亮红色灯;打开WIFI时显示蓝色灯。其中WIFI的状态优先级要低于电源指示灯,也就是电源指示用的红绿橙色可以抢占WIFI所用的蓝色。
一开始在灯的设置前加入了判断函数,用if else把很多状况列举出来,后来发现在WIFI工作和插拔充电线时会有很多冲突。比如WIFI工作亮蓝色灯,此时插入充电线显示橙色灯,拔掉充电线要恢复成蓝色灯;又或者在充电时亮橙色灯,此时打开或者关闭WIFI对灯是没有任何影响的。
(3)最后决定采用固定优先级的做法来处理。因为红色、绿色、橙色这三种颜色不可能同时起作用,而且是表示电源状态,可以统一将他们设定为优先级0,WIFI用的蓝色灯设定优先级1。那么在设置灯的入口之前,用下面函数处理下。
typedef struct
{
UINT8 OnOffState ;
UINT8 color ;
UINT8 OffTime ;
}RGBLED_STATE; //用来存储优先级及要用的参数
struct NLED_SETTINGS_INFO *SelectByPriority(struct NLED_SETTINGS_INFO* p)//p是标准的NLED设置参数,待处理
{
int priority;
int cnt = 0;
if((p->MetaCycleOn>WF43_BLUE_LED)||(p->MetaCycleOn<WF43_GREEN_LED))
return NULL; //判断参数是否在正确范围内
if(p->MetaCycleOn == WF43_BLUE_LED)
priority = 1; //设定蓝色灯优先级
else
priority = 0; //设定其它色灯优先级
static RGBLED_STATE State[2]={{0,0,0},{0,0,0}}; //初始化静态数组
State[priority].OnOffState = p->OffOnBlink; //出入数据到静态数组元素,保存用
State[priority].color = p->MetaCycleOn;
State[priority].OffTime = p->OffTime;
for(cnt = 0; cnt<2; cnt++) //从优先级0的开始处理
{
if(State[cnt].OnOffState>0) //当灯处于常亮或者闪烁时,优先返回此状态
{
p->OffOnBlink= State[cnt].OnOffState;
p->MetaCycleOn= State[cnt].color;
p->OffTime= State[cnt].OffTime;
break; //推出循环,以返回覆盖之前状态
}
}
return p; //就算循环中没有合适的,反悔设定的关灯操作
}
(4)类似的问题还有,诸如:同一个LED驱动控制多个LED,哪个LED优先相应,也需要做类似的处理。最好的办法是固定优先级,因为这个不需要涉及到恢复的操作,打开和关闭也不需要成对。
- LED调试中碰到的优先级问题
- spartan6 MCB调试中碰到的问题
- CAMERA调试碰到的问题
- 调试FT5X06碰到的问题
- CAMERA调试碰到的问题
- 调试gpio模拟i2c的TP中碰到的问题
- Carbide实机调试中碰到的问题
- ADS1.2+H-JTAG调试中碰到的问题
- USB HID调试过程中碰到的一些问题
- ccs调试过程中碰到的问题总结
- 调试Tomcat 6.0.35碰到的问题
- 调试WCF服务碰到的问题
- SQL中碰到的问题
- 工作中碰到的问题
- angularjs中碰到的问题
- js中碰到的问题
- 调试碰到问题小计
- 调试LED遇到的问题和解决方法
- 第7讲 IO/输入与输出-Java程序与其它进程的数据通信
- 设计模式——代理模式【Proxy Pattern】
- Git
- vmware的vmnet-概念的解说
- Kind of lost
- LED调试中碰到的优先级问题
- vmware的vmnet-感官和视觉上的效果
- 设计模式——单例模式【Singleton Pattern】
- vmware的vmnet-有机会还要看源码
- 30 things that can each be done in only 30 seconds
- 城府的修练
- 设计模式——多例模式【Multition Pattern】
- RThread::RequestComplete 和AO 的使用
- vim常用的缩进等命令