搜索
bottom↓
回复: 22

嵌入式实时操作性能评估

[复制链接]

出0入0汤圆

发表于 2017-11-3 11:33:24 | 显示全部楼层 |阅读模式
各位使用过实时操作系统的大佬,可否交流下使用过的OS的实时性,比如can通讯频率能到多高,任务时间最快可以到什么量级等等,感谢!

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2017-11-3 14:17:20 | 显示全部楼层
貌似所有操作系统都有这种参数。而且是很重要的参数。。

出0入0汤圆

 楼主| 发表于 2017-11-3 14:42:26 | 显示全部楼层
bg6agf 发表于 2017-11-3 14:17
貌似所有操作系统都有这种参数。而且是很重要的参数。。

我正在看基于STM32的FreeRTOS,里面写到OS的时钟是1ms,我理解的是调度器每1ms根据任务的优先级去集中处理所有任务,比如三个任务A:1KHz的串口通讯, 500Hz的IO翻转, 100Hz的液晶屏显示, 优先级A>B>C,那么是不是CPU开始计时,到1ms时要执行任务A,当2ms时要执行 A和B,当10ms是要执行A,B,C。即所有的任务根据优先级在1ms内执行完成,执行不完也要丢弃任务,当然执行不完的肯定是那些低优先级的任务?而在每个任务中我们主要就是调用ST的库函数去进行数据交互?  不知道这样理解对不对,欢迎讨论

出0入0汤圆

发表于 2017-11-3 14:56:19 | 显示全部楼层
上海爱观视觉 发表于 2017-11-3 14:42
我正在看基于STM32的FreeRTOS,里面写到OS的时钟是1ms,我理解的是调度器每1ms根据任务的优先级去集中处理 ...

不完全对。并不是执行1ms才放弃,而是随时高优先级的都可能会打断底优先级的,只要高优先级处于就绪状态。这种调度一般通过中断来完成,而不仅仅是tick中断。只有同优先级(如果支持)的,才是按时间片轮转。但还有很多细节各操作系统处理并不一样。

出0入0汤圆

发表于 2017-11-3 15:49:15 | 显示全部楼层
有严格时序要求的地方,比如汽车ECU,不用这种有名字的OS,我见到的是中断和时间片轮转的

出0入0汤圆

发表于 2017-11-3 16:31:22 来自手机 | 显示全部楼层
3DA502 发表于 2017-11-3 15:49
有严格时序要求的地方,比如汽车ECU,不用这种有名字的OS,我见到的是中断和时间片轮转的 ...

我见到的汽车ECU用的是RTA OS

出0入8汤圆

发表于 2017-11-3 16:49:22 | 显示全部楼层
上海爱观视觉 发表于 2017-11-3 14:42
我正在看基于STM32的FreeRTOS,里面写到OS的时钟是1ms,我理解的是调度器每1ms根据任务的优先级去集中处理 ...

你需要去看操作系统的书,或者论坛里面搜一下。

给你个帖子:
关于操作系统的调度的,看这边:「UCOSIII中无干扰下最高优先级任务何时才会任务切换?」,4 楼的回复。

出0入0汤圆

 楼主| 发表于 2017-11-3 17:02:15 | 显示全部楼层
security 发表于 2017-11-3 16:49
你需要去看操作系统的书,或者论坛里面搜一下。

给你个帖子:

嗯,下午一直在看这块的内容,FreeRTOS的任务调度机制现在清楚了,我们现在有个项目,有点像六轴云台,想找一个实时操作系统融合多传感器信息去控制六个伺服电机的转角,伺服电机控制器的位置环500Hz - 1KHz可调,所以我想使用CAN总线控制6个电机,像通讯频率尽可能高点1KHz吧,传感器主要是IMU也希望快点,所以想看看使用STM32F429 主频180M,想看看OS的节拍最高能到多少,不知道有没有人实际用过。

现在用PC去控制6个电机,100Hz不到,我都快哭了。

出0入0汤圆

 楼主| 发表于 2017-11-3 17:03:17 | 显示全部楼层
flamma 发表于 2017-11-3 14:56
不完全对。并不是执行1ms才放弃,而是随时高优先级的都可能会打断底优先级的,只要高优先级处于就绪状态 ...

这个我也看到了,也可以使用任务绝对延时函数来实现任务定频运行

出0入8汤圆

发表于 2017-11-3 17:09:05 | 显示全部楼层
上海爱观视觉 发表于 2017-11-3 17:02
嗯,下午一直在看这块的内容,FreeRTOS的任务调度机制现在清楚了,我们现在有个项目,有点像六轴云台,想 ...

我这边一直使用 tick = 1ms。
更低的,你可以试一下。
可以戳这里,看看有没有想法:「为什么RTOS系统时钟都是1毫秒?可以调到0.1毫秒不?

出0入0汤圆

 楼主| 发表于 2017-11-3 17:22:00 | 显示全部楼层
flamma 发表于 2017-11-3 14:56
不完全对。并不是执行1ms才放弃,而是随时高优先级的都可能会打断底优先级的,只要高优先级处于就绪状态 ...

这个我也看到了,也可以使用任务绝对延时函数来实现任务定频

出0入0汤圆

 楼主| 发表于 2017-11-4 14:25:09 | 显示全部楼层
security 发表于 2017-11-3 17:09
我这边一直使用 tick = 1ms。
更低的,你可以试一下。
可以戳这里,看看有没有想法:「为什么RTOS系统时 ...

嗯  这个帖子了解到不少,里面提到可以开一个10K的定时器去查询高开销任务的中断标志位(比如接收标志位),一旦确认接收到以后,给任务发信号量唤醒任务,这样就不用特别高的系统节拍了,问题是中断发出信号量后,任务应该在下一个节拍开始时才能接收到信号量吧,这个延时是不确定的,理论最大延时是一个节拍的时间。但是感觉如果有多个高实时性的任务的话  感觉还是提高节拍比较好


帖子里的回答让我感觉好像不是所有的资源都由OS调度,用户也可以划出一部分资源用STM32自带的库函数直接访问,再加上DMA,感觉RTOS好灵活啊

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入8汤圆

发表于 2017-11-4 16:22:23 | 显示全部楼层
上海爱观视觉 发表于 2017-11-4 14:25
嗯  这个帖子了解到不少,里面提到可以开一个10K的定时器去查询高开销任务的中断标志位(比如接收标志位 ...


错,
在中断中,释放了信号量,一旦这个信号量使得更高优先级的线程就绪,在退出中断时,就会触发一次线程调度切换,即时切换到更高优先级的线程上。
这也是抢占式 RTOS 能够冠以实时的一个基本因素。

你自己再好好看看书吧。

出300入477汤圆

发表于 2017-11-4 18:22:05 来自手机 | 显示全部楼层
security 发表于 2017-11-4 16:22
错,
在中断中,释放了信号量,一旦这个信号量使得更高优先级的线程就绪,在退出中断时,就会触发一次线 ...

这不是自动的。如果某个中断里有可能释放信号量,那么这个中断函数必须在退岀之前调用系统的一个检查函数,这个检查函数会在需要的情况下假造一个中断现场来切换到高优先级任务。

出0入0汤圆

发表于 2017-11-4 18:57:44 | 显示全部楼层
security 发表于 2017-11-4 16:22
错,
在中断中,释放了信号量,一旦这个信号量使得更高优先级的线程就绪,在退出中断时,就会触发一次线 ...

在退出中断时,就会触发一次线程调度切换,即时切换到更高优先级的线程上。



是这么回事吗

Preemptive multitasking

Real-time operating systems like embOS operate with preemptive multitasking.
The highest-priority task in the READY state always executes as long as
the task is not suspended by a call of any operating system function.
A high-priority task waiting for an event is signaled READY as soon as the event occurs.
The event can be set by an interrupt handler, which then activates the task immediately.
Other tasks with lower priority are suspended (preempted) as long as the high-priority task is executing.
A real-time operating system, such as embOS, normally comes with a regular timer
interrupt to interrupt tasks at regular intervals and to perform task switches if timed task switches are necessary

抢先多任务

像embOS这样的实时操作系统可以抢先进行多任务操作。
该就绪状态下最高优先级的任务总是在任务不执行时执行通过任何操作系统函数调用暂停。
等待的高优先级任务一旦事件发生,一个事件就会发出READY信号。
事件可以由一个中断处理程序,然后立即激活任务。
其他任务较低只要高优先级任务正在执行,优先级就被暂停(抢占)。
一个实时操作系统,比如embOS,通常配备一个普通的定时器中断以定期中断任务,如果定时执行任务切换任务切换是必要的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2017-11-4 19:05:56 | 显示全部楼层
http://www.emcu.it/STM32F4xx/Exe ... 32F4-Discovery.html



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入8汤圆

发表于 2017-11-6 08:26:36 | 显示全部楼层
redroof 发表于 2017-11-4 18:22
这不是自动的。如果某个中断里有可能释放信号量,那么这个中断函数必须在退岀之前调用系统的一个检查函数 ...

嗯,你这边说的更细致些。

出0入8汤圆

发表于 2017-11-6 08:32:30 | 显示全部楼层
shangdawei 发表于 2017-11-4 18:57
在退出中断时,就会触发一次线程调度切换,即时切换到更高优先级的线程上。

是这样的意思。

出0入0汤圆

 楼主| 发表于 2017-11-6 09:57:33 | 显示全部楼层
redroof 发表于 2017-11-4 18:22
这不是自动的。如果某个中断里有可能释放信号量,那么这个中断函数必须在退岀之前调用系统的一个检查函数 ...

所以说中断不但要释放信号量,还要立马通知OS,让他进行任务切换?

出300入477汤圆

发表于 2017-11-6 10:17:32 | 显示全部楼层
上海爱观视觉 发表于 2017-11-6 09:57
所以说中断不但要释放信号量,还要立马通知OS,让他进行任务切换?

所有的中断在退出之前永远调用一下系统的检查函数也无所谓,只是浪费一点CPU而已。
平常为了节约时间,如果明知道这个中断肯定不影响系统任务调度,那么就不需要在退出之前检查任务切换。

出0入8汤圆

发表于 2017-11-6 10:19:10 | 显示全部楼层
上海爱观视觉 发表于 2017-11-6 09:57
所以说中断不但要释放信号量,还要立马通知OS,让他进行任务切换?

这部分动作是 RTOS 的职责,移植 RTOS 时,这部分逻辑就已经要写好、就绪了。
应用层开发,用户无需关注。

出0入8汤圆

发表于 2017-11-6 10:34:14 | 显示全部楼层
上海爱观视觉 发表于 2017-11-6 09:57
所以说中断不但要释放信号量,还要立马通知OS,让他进行任务切换?

你只要按照 RTOS 的手册来编程即可。
这部分通知 OS,切换任务的事情,从理论上讲,这是 RTOS 的职责,它需要负责对你进行屏蔽,让你感觉不到:与传统的 ISR 的写法,有什么差异。

以 ucos 为例,进入中断,需要用 OSIntEnter 和 OSIntExit 来标记。
记住这个特殊的编程规则就是了。

你可以去看 OSIntExit 的源码,就会发现,内部,它已经替你实现了这部分动作。

出0入0汤圆

 楼主| 发表于 2017-11-6 13:56:41 | 显示全部楼层
感谢各位,我基本上对RTOS的一些原理有了解了,最后一个问题,请问悬赏怎么给别人啊
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 05:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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