|
我在FreeRTOS中用硬汉哥的蜂鸣器驱动包,总是有问题。
具体用法大概如下:
FreeRTOS中有三个任务A,B,C
A跑LVGL,10ms运行一次
B调用蜂鸣器的beep_pro, 10ms调用一次
C执行蜂鸣器鸣叫,也就是调用beep_start,C任务也是10ms运行一次
我在A中通过UI设置蜂鸣器鸣叫方式,比如
0:持续鸣叫,
1:关闭鸣叫,
2:200ms时间间隔鸣叫,
然后每设置一次,就通过队列把序号发给C
然后在C中,接收来自A的设置,然后执行对应的鸣叫方式,类似
void C_task()
{
sBeep_t BeepConfig;
unsigned char get_index;
while(1)
{
if(xQueueReceive(xQueueBeep, &BeepConfig, 0)==pdTRUE) //接收来自任务A中的设置,实现对应的鸣叫方式
{
get_index = BeepConfig.beepid; //得到鸣叫方式序号:0,1,2
}
switch(get_index)
{
case 0:
beep_Start(5, 5, 0); //持续鸣叫
break;
case 1:
beep_Start(0, 0, 1); //关闭鸣叫
break;
case 2:
beep_Start(10, 10, 5); //以100ms的时间间隔鸣叫5次
break;
}
}
}
我全程都是用beep_start设置,包括关闭蜂鸣器,因为在硬汉哥的pdf文档中提到,其他函数不好用,我就只用了beep_start。
遇到的主要问题是,
1,蜂鸣器无法关闭,就是设置1的时候,蜂鸣器仍然在叫
2,设置到2,蜂鸣器持续鸣叫,并没有实现100ms间隔的鸣叫效果
总体感觉无法控制,不管设置哪个值,它总是持续的叫,无法得到期望的效果也无法关闭。。。
在某些情况下,设置关闭,它居然会以100ms的时间间隔鸣叫,感觉完全乱了
是不能在FreeRTOS中使用吗?还是我的用法不对?望指点。
|
|