关于Delay函数的思考

本文探讨了在处理机械按键时,Delay函数在软件设计中的不合理性,指出其导致CPU资源浪费并影响实时任务执行。提出在实时操作系统中使用信号量和标志位作为替代方案,以更精确地管理任务和资源,例如在按键识别中应用这种思路,通过标志位进行间隔扫描来判断按键状态。文中还给出了基于DSP C2000的BSP程序示例。
摘要由CSDN通过智能技术生成

这几天一直在忙的一个项目中有一小部分是对机械按键的操作,在准备些BSP的时候突然想起来以前在大学
常用的处理方法就是按键消抖然后识别,待消抖最后弹起,并且所有的消抖程序段都是依靠延时程序实现。
可能很多人对该函数的使用并不排斥,但是我个人觉得这是非常不符合软件的本质的,并且也并不合理。
软件的本质是将现实中的各种行为抽象。以现实中人的活动为例,人在同一时刻是可以实时响应很多事情的,
而Delay函数的出现相当于将CPU进行软件暂停而对实时的任务拒之门外(中断除外),这在很多对任务的
执行时间有着严格要求的场合是难以忍受的。并且糟糕的是,系统任务越多,Delay函数的影响越大。那难
倒就没有了别的解决办法了吗?其实答案就在μ/COSii里。
在实时操作系统里有一个概念叫信号量,用来处理不同事件状态的查询或者对不同任务队同一资源的请求。
标志,该时间标志位在50微秒(暂定)的定时器中断中递增,当达到计时时间要求后就传递给响应的需要延
时的任务,然后该变量清零。
我们以按键的识别为例,在实际按键按下以后,需要等待按键可靠弹起,一般来说在一定时间内如果按键
借用操作系统的思路是用标志位进行间隔扫描状态,这样可以精确的判断按键的状态。详细示意图如下所示:

![按键扫描示意图](https://img-blog.csdn.net/20150817223738086)

以下是编写的BSP程序(基于DSP C2000)

/*******************************************************************************
*                                      
*                           -------------------------
*                           Details to create profits
*
* All rights reserved.
* Contact information:V1.0
* QQ:    836002276
* e-mail:      836002276@qq.com
*******************************************************************************/
/******************************************************************************
 * 本文件实现了Key.c文件
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 很抱歉,我无法回答您的问题。因为我是一个自然语言处理模型,无法看到代码或进行任何编译、调试操作。如果您在编写代码时遇到错误,我可以尽力帮助您思考解决方案,但是您需要提供更多的细节。 如果您在使用 Visual Studio 2019 并且遇到了“未定义标识符 delay”的错误,这可能是因为在代码中使用了一个未被定义的函数名或变量名。在 Visual Studio 中,可以使用 F12 快捷键轻松地跳转到该标识符的定义处。如果找不到定义,则可能是因为您使用了一个未在代码中包含的头文件,或者您使用的是一个未正确链接的库。 如果您不确定错误的原因,或者您需要进一步的帮助,您可以尝试给出更多的上下文信息,例如您在尝试什么,在何处出现了错误,以及您尝试过的解决方案。这样我就可以尽力帮助您解决问题了。 ### 回答2: 在VS2019中,错误未定义标识符"delay"通常是因为程序中使用了一个名为"delay"的标识符,但是该标识符并没有被正确地定义。 为了解决这个错误,首先要检查程序中是否存在名为"delay"的标识符。如果存在,可能是由于以下几种原因导致了错误未定义标识符"delay": 1. 忘记包含相关的头文件:检查程序中是否包含了定义"delay"的头文件。通常情况下,延迟函数需要包含头文件"windows.h"或"dos.h"。确保在程序中包含了相应的头文件。 2. 错误的函数名称:检查函数名称是否正确。如果正确的函数名称为"Delay",而不是"delay",或者其他大小写问题等,都会导致未定义标识符错误。 3. 缺少必需的库:调用延迟函数时,需要链接相应的库文件。例如,在调用"Sleep"函数时,需要链接"kernel32.lib"库。确保在项目的链接器设置中添加了相应的库文件。 4. 检查语法错误:在调用延迟函数的语句中,确保正确使用了括号、分号等语法元素。 5. 重新构建项目:如果以上步骤都正确无误,尝试重新构建整个项目。有时,错误未定义标识符可能是由于项目构建错误导致的。 如果以上步骤都没有解决问题,建议进一步检查源代码或提供更多详细信息以便更准确地解决问题。 ### 回答3: 在使用VS2019时,出现错误未定义标识符"delay"是因为程序中没有定义该标识符。"delay"通常用于实现延迟功能,用于控制程序执行时的时间间隔。 要解决这个错误,可以按以下步骤操作: 首先,确认是否需要使用"delay"函数。如果确实需要使用延迟功能,可以在程序中添加相应的头文件。 #include <Windows.h> 然后,在需要延迟的地方使用以下代码: Sleep(1000); // 延迟1秒钟 在此代码中,Sleep()函数来自于Windows.h头文件,参数1000表示需要延迟的毫秒数。 如果你的程序并不需要延迟功能,那么可能是某些代码中误用了"delay"这个标识符。在这种情况下,应该检查程序中的变量、函数或宏定义是否存在拼写错误或重复定义的情况。寻找并修改这些错误,然后重新编译程序即可。 总之,解决VS2019显示错误未定义标识符"delay"的方法是确认是否需要延迟功能并添加相应的头文件,或是检查程序中的代码是否存在拼写错误或重复定义的情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值