完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
我想问个事,正在使用外部中断。配置好引脚,绑定中断回调函数。一开始为了验证编程正确,能进入回调函数,就在回调函数里写了个LED闪烁的代码段,结果发现灯没闪,特意搜了很久答案,也没发现。后来就干脆加入打印,发现是可以打印的,意味着能进入外部中断,但是感觉时间已经不是这个时间了。灯闪的不正确。 |
|
相关推荐
15个回答
|
|
|
中断里面,使用延时是不合适的,修改下程序吧
|
|
|
|
|
|
正常不会这么用,只是测试而已。为啥时间短了,是定时器中断等全被关了吗?
|
|
|
|
|
|
rt_thread_mdelay延时也是要滴答定时器中断的,你这个在中断里阻塞等中断?
|
|
|
|
|
|
没有的,中断里就是调用上面那个test()
|
|
|
|
|
|
中断程序会独占cpu,但你里面又使用延时,会将cpu控制权给其他线程,这里有冲突了
|
|
|
|
|
|
这里在RT-Thread里有文档说明吗?谢谢!进入中断,占用CPU,遇到延时阻塞起来,其他线程得以运行?那时间到是不是又回到中断里?但是灯的情况是,几乎不存在时间上的差异,就是延时跟没有一样。好像说不通呢。
|
|
|
|
|
|
|
|
|
|
|
|
我看看哪些是非线程延时函数先。
|
|
|
|
|
|
可以使用循环计数实现延时,或者使用rt_hw_us_delay
|
|
|
|
|
|
|
|
|
|
|
|
放在main函数里单独控制灯,灯会闪亮,安意思去执行。但是放在中断里不会的。我知道不能放延时在中断里。只是为了直观测试才这么做。
|
|
|
|
|
|
从开始学单片机老师就教中断不能用延时,会影响其他程序或者中断。
不过在RT里,我试了一下,在中断回调里用延时,延时函数并不执行,所以你的点灯和关灯应该是瞬间完成,所以看到的是没有点亮。 另外延时如果加长,比如5s,程序直接就出错了,我用了syswatch,所以出错后直接被复位了。 总之,中断里面是不能延时的。 |
|
|
|
|
|
中断不能用延时,主要影响实时性的吧?比如高优先级使用了延时,低优先级就进不去。我觉得应该问题出现在rt_thread_mdelay()这个函数,可能不能用在中断函数里。如果使用其他延时函数应该可以延时。
|
|
|
|
|
|
有可能是,rt_thread_mdelay()调用的是rt_thread_sleep(),这个函数是This function will let current thread sleep for some ticks。而中断里没有当前线程,所以会出错,理解应该是这样。
|
|
|
|
|
|
一、中断中的rt_thread_mdelay()延时函数并没有成功执行);所以灯的状态应该是“瞬间”设置完成的(超过人眼的识别);
二、rt_thread_mdelay();函数,最终是通过rt_thread_sleep()函切换线程的;但是中断种又不能进行线程的切换,从而调度失败(系统没崩算好的);系统继续执行中断接下来的程序; 三、最重要一点,中断中不能加延时;中断中的函数要尽可能的短,不能有延时、等待的函数; |
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
999 浏览 0 评论
2781 浏览 0 评论
图腾柱PFC无法上升至400V,且电感电流为正弦波形,但是幅值极小
9368 浏览 0 评论
飞凌嵌入式ElfBoard-Vim编辑器之静态链接和动态链接
2895 浏览 0 评论
使用 LinkBoy 将程序导出为 C 语言代码并烧录至 Arduino ESP32 开发板
2300 浏览 1 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 17:49 , Processed in 1.493374 second(s), Total 102, Slave 83 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2746