硬汉嵌入式论坛

 找回密码
 立即注册
查看: 94|回复: 3
收起左侧

[其它] 奇特的现象。。请高人看看。

[复制链接]

57

主题

84

回帖

255

积分

高级会员

积分
255
发表于 昨天 17:11 | 显示全部楼层 |阅读模式
void BeepTask(void *argument)
{
  /* USER CODE BEGIN BeepTask */
  /* Infinite loop */
  for(;;)
  {
                osSemaphoreAcquire(BinarySemBeepHandle, osWaitForever);

                BEEP_ON;
                osDelay(60);
                BEEP_OFF;
  }
  /* USER CODE END BeepTask */
}
这个任务由触摸屏按下触发,发现大部分情况下BEEP会响60MS,但有时会明显低于60MS(比如只有20),从示波器上也看到了控制信号确实是如此。
这是为什么?如果偶尔长于60是容易理解的,但无论如何也不应该低于60吧?可能是什么原因?



回复

使用道具 举报

9

主题

102

回帖

129

积分

初级会员

积分
129
发表于 昨天 19:17 | 显示全部楼层
被其它任务抢占了吗
回复

使用道具 举报

4

主题

444

回帖

456

积分

高级会员

积分
456
发表于 昨天 22:05 | 显示全部楼层
lizhaoming 发表于 2026-1-10 19:17
被其它任务抢占了吗

抢占会变长吧,变短我觉得有两种可能,beep引脚在其他地方被意外改了。把任务栈检测打开是不是有越界了

在 FreeRTOSConfig.h 中,将 configCHECK_FOR_STACK_OVERFLOW 定义为 2。栈溢出时触发 vApplicationStackOverflowHook 钩子函数
回复

使用道具 举报

7

主题

365

回帖

386

积分

高级会员

积分
386
发表于 5 小时前 | 显示全部楼层
BEEP-OFF后边再加个延时就正常了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2026-1-11 17:21 , Processed in 0.054635 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表