发 帖  
原厂入驻New
发烧友10周年庆典,全网超值优惠来袭!千元现金券,下单抽奖赶紧参与》》
假如有一个传感器,每次读取的时间远大于320us假设读取时间为5ms,请问该怎么做才能保证读取过程不被打断呢?
986
分享
本帖最后由 一只耳朵怪 于 2018-6-6 14:43 编辑

大家都知道Z-Stack采取时间片轮询任务调度算法,然而Z-Stack2.3.0的时间片长度为320us,也就是说每隔320us协议栈的 OSAL就开始切换Task。废话不刷了,直入正题吧,我的问题是,假如我有一个传感器,每次读取的时间远大于320us假设读取时间为5ms,我该怎么做才能保证读取过程不被打断呢?刚开始想到中断,后来有觉得不妥,因为5ms中有很多个320us了已经被打断很多次了,纠结啊....  有哪位大神弄过这类的问题的啊?坐等OutMan
0
2018-6-6 06:57:59   评论 分享淘帖 邀请回答
7个回答
osal并不具备时间片调度功能,任务都是执行完一个再执行下一个的,只是它的最小轮询时间可以达到320us而已
啦啦啦啦啦啦啦l 发表于 2018-6-6 07:11
osal并不具备时间片调度功能,任务都是执行完一个再执行下一个的,只是它的最小轮询时间可以达到320us而已

xiao dong jia,能详细的说一下吗?
2018-6-6 07:23:12 评论

举报

iyfhnvbn 发表于 2018-6-6 07:23
xiao dong jia,能详细的说一下吗?

这个怎么才算详细?你说的那种叫抢先式实时操作系统,就是任务在执行时如果有更高级任务产生,则保存现在任务的现场转去执行高级任务,执行完后恢复现场回到被中断的任务继续执行。OSAL就是不停查询有没有任务需要执行,如果有就执行,执行完了再查询,就这么转着圈的查,一个循环的时间取决于每个任务执行的时间。这要求对每个任务编程时需要注意不要执行太耗时的工作,否则会影响其它任务的执行效果
啦啦啦啦啦啦啦l 发表于 2018-6-6 07:30
这个怎么才算详细?你说的那种叫抢先式实时操作系统,就是任务在执行时如果有更高级任务产生,则保存现在任务的现场转去执行高级任务,执行完后恢复现场回到被中断的任务继续执行。OSAL就是不停查询有没有任务需要执行,如果有就执行,执行完了再查询,就这么转着圈的查,一个循环的时间取决于每个任务执行的时间。这要求对 ...

在osal_start_system( void )中的for死循环中osalTimeUpdate()函数不是更新时间的吗,产生中断的吗,这个又如何解释呢
2018-6-6 07:41:49 评论

举报

iyfhnvbn 发表于 2018-6-6 07:41
在osal_start_system( void )中的for死循环中osalTimeUpdate()函数不是更新时间的吗,产生中断的吗,这个又如何解释呢

osalTimeUpdate()函数是用来更新系统时钟的,而且这里面也不产生中断。你没有仔细看代码吧
啦啦啦啦啦啦啦l 发表于 2018-6-6 07:49
osalTimeUpdate()函数是用来更新系统时钟的,而且这里面也不产生中断。你没有仔细看代码吧

你说的没错,刚刚看了下,的确是更新系统时间的,至于OSAL能不能处理多任务并发,我明天做实验试试
2018-6-6 08:02:42 评论

举报

iyfhnvbn 发表于 2018-6-6 08:02
你说的没错,刚刚看了下,的确是更新系统时间的,至于OSAL能不能处理多任务并发,我明天做实验试试

谢谢你啊,我做了实验验证过你说的是对的,OSAL的任务调度算法是FIFO
2018-6-6 08:07:55 评论

举报

只有小组成员才能发言,加入小组>>

729个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /10 下一条

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