假如有一个传感器,每次读取的时间远大于320us假设读取时间为5ms,请问该怎么做才能保证读取过程不被打断呢?

iyfhnvbn ( 楼主 ) 2018-6-6 06:57:59  显示全部楼层
本帖最后由 一只耳朵怪 于 2018-6-6 14:43 编辑

大家都知道Z-Stack采取时间片轮询任务调度算法,然而Z-Stack2.3.0的时间片长度为320us,也就是说每隔320us协议栈的 OSAL就开始切换Task。废话不刷了,直入正题吧,我的问题是,假如我有一个传感器,每次读取的时间远大于320us假设读取时间为5ms,我该怎么做才能保证读取过程不被打断呢?刚开始想到中断,后来有觉得不妥,因为5ms中有很多个320us了已经被打断很多次了,纠结啊....  有哪位大神弄过这类的问题的啊?坐等OutMan

7个回复

啦啦啦啦啦啦啦l 发表于 2018-6-6 07:11:18
osal并不具备时间片调度功能,任务都是执行完一个再执行下一个的,只是它的最小轮询时间可以达到320us而已
回复

举报 使用道具

iyfhnvbn 发表于 2018-6-6 07:23:12
啦啦啦啦啦啦啦l 发表于 2018-6-6 07:11
osal并不具备时间片调度功能,任务都是执行完一个再执行下一个的,只是它的最小轮询时间可以达到320us而已

xiao dong jia,能详细的说一下吗?
回复

举报 使用道具

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

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

举报 使用道具

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

在osal_start_system( void )中的for死循环中osalTimeUpdate()函数不是更新时间的吗,产生中断的吗,这个又如何解释呢
回复

举报 使用道具

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

osalTimeUpdate()函数是用来更新系统时钟的,而且这里面也不产生中断。你没有仔细看代码吧
回复

举报 使用道具

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

你说的没错,刚刚看了下,的确是更新系统时间的,至于OSAL能不能处理多任务并发,我明天做实验试试
回复

举报 使用道具

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

谢谢你啊,我做了实验验证过你说的是对的,OSAL的任务调度算法是FIFO
回复

举报 使用道具

您需要登录后才可以回帖 登录 | 注册

本版积分规则


关闭

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

小黑屋|手机版|Archiver|电子发烧友 ( 粤ICP备14022951号-2 )

GMT+8, 2018-6-20 19:18 , Processed in 0.120964 second(s), 21 queries , Memcache On.

Powered by 电子发烧友网

© 2015 bbs.elecfans.com

微信扫描
快速回复 返回顶部 返回列表