osii事件小于最小ticks怎么办?
假如osii最小ticks是1ms,我想100us就执行一次,有什么办法没有?不知道下面这种方式是否可行?
在task里面挂起,
flg = OSFlagPend(Flag,
FLG_Timer,
OS_FLAG_WAIT_SET_ANY,
0, //
&err);
if (err == OS_NO_ERR)
{
}
开一个100us定时器,每100us的时候发送标志位,这样是否可行呢?
还是说即使100us发送标志位,但实际也是最小1ms任务才得到执行? {:biggrin:} 沉的好快~{:dizzy:} 使用硬件定时器,要多少时间都可以随意设置。 aozima 发表于 2014-9-15 11:51
使用硬件定时器,要多少时间都可以随意设置。
请看清题意~{:biggrin:} 直接100us中断执行 bsz84 发表于 2014-9-15 13:40
直接100us中断执行
需要在任务里面执行的~不能占中断很长时间~ 难道你不知道有异步事件? steaven2000 发表于 2014-9-15 13:51
难道你不知道有异步事件?
能举个简单例子解释下吗?比如楼主位的例子~{:biggrin:} 楼主你不是已经说出来了吗! 在100us的定时器中发送事件或信号量,任务中等待这个时间或者信号量。 kebaojun305 发表于 2014-9-15 14:23
楼主你不是已经说出来了吗! 在100us的定时器中发送事件或信号量,任务中等待这个时间或者信号量。 ...
呵呵~关键是我不确定这种方法是否可行,所以才来问的~{:biggrin:}
任务切换的最小ticks是1ms,如果我想在100us就干某件事并且不霸占中断,那么在100us时钟中断里面发信号量或者标志位等等~在任务里面挂起等待信号量或者标志位,理想很好,不知道能不能达到?
embeddev_1 发表于 2014-9-15 14:30
呵呵~关键是我不确定这种方法是否可行,所以才来问的~
任务切换的最小ticks是1ms,如果 ...
肯定可以啊要不中断怎么处理。1ms才响应中断 那黄花菜都凉了。 本帖最后由 4058665 于 2014-9-15 14:42 编辑
中断里执行处理的动作要快 如果标志的话 会等待调度周期 还是要花时间的,当然无ostimedly的死任务除外 embeddev_1 发表于 2014-9-15 13:53
能举个简单例子解释下吗?比如楼主位的例子~
你不觉得自己对OS的理解有问题吗?
ticks是1ms任务就最短1ms切换?假设只有2个任务,每个任务只需要执行1us的时间,那剩下的时间哪去了?
steaven2000 发表于 2014-9-15 14:40
你不觉得自己对OS的理解有问题吗?
ticks是1ms任务就最短1ms切换?假设只有2个任务,每个任务只需要执行1 ...
嗯!~应该是我理解有问题!
可否请教下假如在100us中断里面发出信号量,到任务执行这个时间需要多少呢?{:biggrin:} kebaojun305 发表于 2014-9-15 14:37
肯定可以啊要不中断怎么处理。1ms才响应中断 那黄花菜都凉了。
和14楼同样问题,在100us中断里面发信号量,到在任务中挂起的信号量执行需要多少时间呢?如果是小于100us的,那满足楼主位的要求,如果超过100us,例如1ms以后任务才得到执行,那肯定不行的!
我这块不是很清楚~{:biggrin:}
可以设计1个ticks = 10次中断,每次中断调用一个你想执行一次的函数 embeddev_1 发表于 2014-9-15 14:56
和14楼同样问题,在100us中断里面发信号量,到在任务中挂起的信号量执行需要多少时间呢?如果是小于100u ...
你这个接收的任务设置最高优先级, 那么切换时间就是任务的切换时间。 kebaojun305 发表于 2014-9-15 15:02
你这个接收的任务设置最高优先级, 那么切换时间就是任务的切换时间。 ...
任务切换时间不是tick最小时间1ms吗?怎么知道任务切换时间呢? 中断里执行处理的动作要快 cs128815 发表于 2014-9-15 15:09
中断里执行处理的动作要快
不看题意,打屁股~{:biggrin:} 本帖最后由 kebaojun305 于 2014-9-15 15:20 编辑
embeddev_1 发表于 2014-9-15 15:09
任务切换时间不是tick最小时间1ms吗?怎么知道任务切换时间呢?
你也不仔细看你说的1ms 是 OS的时基,OS内部是以1ms基准时间运行的切换时间都是us或者us以内的时间。你说的是任务切换的间隔时间是1ms(这中说法本身就不是太对,实际意思是OS内的时间单位必须是1ms的倍数) 不仔细看。
仔细看看OS的基本原理你就应该理解了。
当你发送消息时,这个消息已经通知了OS,然后OS会查询那个任务在等待这个消息如果查到了,那么等退出中断时,就会切换到那个等待这个消息的任务了(当然还有个任务的优先级在起作用的)。 embeddev_1 发表于 2014-9-15 14:56
和14楼同样问题,在100us中断里面发信号量,到在任务中挂起的信号量执行需要多少时间呢?如果是小于100u ...
那就要看看你的rtos的任务切换时间了 哪位知道如果系统ticks最小时间周期是1ms,也就是#define OS_TICKS_PER_SEC 1000u的时候
在主频是72mhz, 从100us时钟中断里面发信号量,到osii任务(最高优先级)执行挂起的信号量的时间是多少? 绕来绕去没有得到答案~{:biggrin:} myxiaonia 发表于 2014-9-15 15:22
那就要看看你的rtos的任务切换时间了
怎么确定任务切换时间呢?现在问题就是在这里!
主频是72mhz,systick 1ms中断~最高优先级~从发出信号量,到任务得到执行,怎么确定需要多少时间?{:biggrin:} 可以用串口输出的方式 或者示波器测量 kebaojun305 发表于 2014-9-15 15:16
你也不仔细看你说的1ms 是 OS的时基,OS内部是以1ms基准时间运行的切换时间都是us或者us以内的时 ...
哥们,你说的这个没错,我也是这样认为的!但是没给出发出信号量到任务得到执行的时间啊,如果这个时间是立即执行或者小于100us,那没问题,如果大于了就失去意义了~ embeddev_1 发表于 2014-9-15 14:30
呵呵~关键是我不确定这种方法是否可行,所以才来问的~
任务切换的最小ticks是1ms,如果 ...
肯定不行的,这样会丢失很多事件,如你明明产生了10次中断,但你的OSII任务为1ms(最快)轮询一次,所以不可以第次100us产生事件都会快速被响应
这个问题只有中断中执行, 黄晨0410 发表于 2014-9-15 15:35
肯定不行的,这样会丢失很多事件,如你明明产生了10次中断,但你的OSII任务为1ms(最快)轮询一次,所以 ...
其他人都认为是可以的哦~{:titter:} embeddev_1 发表于 2014-9-15 15:36
其他人都认为是可以的哦~
可以的前提是你这个任务处理的时间不能超过100us。任务的切换时间你就的查有多少条汇编了,可以用个IO口测量切换时间。72m的时钟切换时间应该最多几个us。至于实际值的你自己测试。 最快的方法是 100us周期产生一个中断,在中断给你要执行的任务发送消息使其切换到执行态。
但这有二个问题,1:被恢复的任务优先级要高,2:这个任务执行时间不超过100us embeddev_1 发表于 2014-9-15 15:25
怎么确定任务切换时间呢?现在问题就是在这里!
主频是72mhz,systick 1ms中断~最高优先级~从发出信号量 ...
本坛有网友eric2013贴过各个rtos的任务切换时间比较,那个帖子暂时还没恢复过来
给你找到他的博客上的帖子RTX, uCOS-II, FreeRTOS embOS, uCOS-III的综合性能PK 理论上是不行的,os只能1ms执行一次。
特例是你等待中断的任务是最高优先级,并且挂起状态,可能可以。
其实跟os的实现有关,也就是1m ticks,任务用了100us,剩下时间如何安排,不同的os处理不同,我也没有具体研究过。 migrant 发表于 2014-9-15 17:34
理论上是不行的,os只能1ms执行一次。
特例是你等待中断的任务是最高优先级,并且挂起状态,可能可以。
其 ...
剩下的空闲时间执行空闲任务了呀。
楼主,有两个办法,一个在空闲任务里添加一个函数,来判断标志并执行,中断发送标志。
另一个办法就是用消息队列看看。两种办法都不实时。
建议还是不跑系统了吧。
页:
[1]