小白想问一下rt_thread_delay与普通的delay_ms函数有何不同吗?我在初始化函数中使用将rt_thread_delay替换原来的delay_ms函数将会导致初始化函数不继续运行下去?
查看更多
你的 delay_ms 是怎么实现的?是自己写的?另外你是在哪里调用 rt_thread_delay 的,main函数的最开始吗还是哪里?
rt_thread_delay
线程调度器运行前,不允许调用 rt_thread_delay 函数。更多 api 使用限制可以看我的文章介绍。哪些不能在任务调度器启动前使用,哪些不能在中断回调函数里执行等等。
rt_thread_delay 不占用CPU,会有线程切换,裸机的延时函数会一直占用cpu
你看源码,rt_thread_delay是直接调用的rt_thread_sleep函数。
系统调度都没跑起来,你跑rt_thread_mdelay,那不得死了?那个时候了就是单线程运行的,直接上硬delay就完事了
我猜大概率是你在调度器开启之前调用了rt_thread_mdelay函数,可以把初始化的代码放到main线程去,这时候调度器打开了,在使用mdelay函数就没问题了
欢迎发表与嵌入式相关的技术分享、开发技巧、工具介绍、技术设想、职业心得、行业评论等对他人有启发,排版优雅的文章
回到 顶部
发布 问题
分享 好友
手机 浏览
投诉 建议
回到 底部
看官方文档 使线程睡眠 。
rt_thread_delay
可以使当前线程挂起一段指定的时间,当这个时间过后,线程会被唤醒并再次进入就绪状态。不知道你的delay_ms
是怎么实现的,可以把delay_ms
的实现贴上来。在操作系统里要使用rt_thread_delay
,该函数能挂起当前线程并且影响调度器调度其他线程。