我想问个事,正在使用外部中断。配置好引脚,绑定中断回调函数。一开始为了验证编程正确,能进入回调函数,就在回调函数里写了个LED闪烁的代码段,结果发现灯没闪,特意搜了很久答案,也没发现。后来就干脆加入打印,发现是可以打印的,意味着能进入外部中断,但是感觉时间已经不是这个时间了。灯闪的不正确。
查看更多
中断里面,使用延时是不合适的,修改下程序吧
IO口模式设置了没,单独控制一下灯是否能正常点亮闪烁呢?另外,延时的函数不要放在中断里执行,中断执行时间太长会影响其他线程的。
一、中断中的rt_thread_mdelay()延时函数并没有成功执行);所以灯的状态应该是“瞬间”设置完成的(超过人眼的识别);二、rt_thread_mdelay();函数,最终是通过rt_thread_sleep()函切换线程的;但是中断种又不能进行线程的切换,从而调度失败(系统没崩算好的);系统继续执行中断接下来的程序;三、最重要一点,中断中不能加延时;中断中的函数要尽可能的短,不能有延时、等待的函数;
欢迎发表与嵌入式相关的技术分享、开发技巧、工具介绍、技术设想、职业心得、行业评论等对他人有启发,排版优雅的文章
回到 顶部
发布 问题
分享 好友
手机 浏览
投诉 建议
回到 底部
正常不会这么用,只是测试而已。为啥时间短了,是定时器中断等全被关了吗?
rt_thread_mdelay延时也是要滴答定时器中断的,你这个在中断里阻塞等中断?
@ccxzjz 没有的,中断里就是调用上面那个test()
中断程序会独占cpu,但你里面又使用延时,会将cpu控制权给其他线程,这里有冲突了
@sync 这里在RT-Thread里有文档说明吗?谢谢!进入中断,占用CPU,遇到延时阻塞起来,其他线程得以运行?那时间到是不是又回到中断里?但是灯的情况是,几乎不存在时间上的差异,就是延时跟没有一样。好像说不通呢。
@RT_Student 给你找个出处
@sync 好的,有心了,非常感谢!
@RT_Student 我看看哪些是非线程延时函数先。
可以使用循环计数实现延时,或者使用rt_hw_us_delay