Torda 发表于 2010-10-26 13:04

请教下linux中关于线程2ms执行一次的方法

用在一个控制系统中,要求至少是2ms执行一次。用目前的配置好像是20ms一个tick。将参数修改成大约1ms一个tick,好像就无法运行。

高手指点一下,该如何处理。

tiger84 发表于 2010-10-26 14:48

通用版本的Linux,arm一般选100HZ,也就是10ms,这个是有理由的。比如选1000HZ,速度貌似快了,但是系统方面中断就过于频繁了,开销都花在上面了。
个人认为,要想达到2ms,就不要使用通用Linux版本了。

sinanjj 发表于 2010-10-26 14:53

将参数修改成大约1ms一个tick,好像就无法运行
-------------明显就是承受不住了呗

20061002838 发表于 2010-10-26 15:21

既然是控制系统,为什么要用linux呢?

Torda 发表于 2010-10-26 16:55

2# tiger84

尝试将100修改成1000,根本就运行不起来。

Torda 发表于 2010-10-26 16:57

4# 20061002838

用linux是希望用其中一些资源,这个控制系统比较复杂,还包括视频的东西,以及非常复杂的滤波运算。这些东西都是linux下的。

但是采集数据需要2ms一次,所以最好就是用linux,这样视频和算法的东西,就可以重用

chl00100 发表于 2010-10-26 20:46

主频多高?研究一下硬件平台的datasheet,看能不能在内核层写一个定时器中断程序;

sinanjj 发表于 2010-10-26 22:48

本帖最后由 sinanjj 于 2010-10-26 22:50 编辑

4# 20061002838

用linux是希望用其中一些资源,这个控制系统比较复杂,还包括视频的东西,以及非常复杂的滤波运算。这些东西都是linux下的。

但是采集数据需要2ms一次,所以最好就是用linux,这样视频和算法的 ...
Torda 发表于 2010-10-26 16:57 https://bbs.21ic.com/images/common/back.gif


我狂晕365度........


这明显应该是硬件分开做个缓存啊.......

设计硬件的时候应该考虑到的. 如果用的现成的板子, 也应改再括一块硬件采集缓存通信.

加不了几个钱的.....

xwj 发表于 2010-10-26 23:01

LZ 先要学会去写Drive

goosen 发表于 2010-10-27 19:47

若非要用linux,则考虑下
rtlinux、 xenomai/rtai 等作过实时改造的版本,或许能满足要求。

yxwsz 发表于 2010-10-27 23:04

建议LZ去看下RTAI,将这个东西移植到你的平台下,应该可以满足要求的;
前提是你的CPU速度要能够满足latency test

Torda 发表于 2010-11-8 17:11

7# chl00100

主频260M,应该还是比较高。用定时中断的方式应该是可以的。目前正在学习如何在内核中加入这个定时中断。

Torda 发表于 2010-11-8 17:15

8# sinanjj

需要2ms执行一次的程序中,需要做的事情是:采集外部数据,然后滤波,再控制。

由于滤波算法比较复杂,用单片机估计是搞不定的。如果分开做成2个系统的话,就相当于是:控制部分用一个CPU(估计要150MPIS以上)系统,视频部分用一个CPU系统,成本不是增加一点两点了。

而刚好我们目前用的系统中,有一个260M的ARM9,也有ASIC用来处理视频。如果能够在linux下搞定这个控制的话,成本就非常有优势了

Torda 发表于 2010-11-8 17:15

本帖最后由 Torda 于 2010-11-8 17:26 编辑

9# xwj

直接在drive层面搞定的话,是写个定时器中断么,还是啥?

sinanjj 发表于 2010-11-8 18:57

8# sinanjj

需要2ms执行一次的程序中,需要做的事情是:采集外部数据,然后滤波,再控制。

由于滤波算法比较复杂,用单片机估计是搞不定的。如果分开做成2个系统的话,就相当于是:控制部分用一个CPU(估计要15 ...
Torda 发表于 2010-11-8 17:15 https://bbs.21ic.com/images/common/back.gif

"外部数据,然后滤波,再控制"这些如果做到2ms需要多快的速度?

如果明显小于260M, 那就是程序不够优化..............至于说程序优化, 那得知道你程序的大体构架.

有意思 发表于 2010-11-9 00:40

建议改方案,用个小51去处理这种ms级的事情
然后通过UART与Linux进行通讯传输数据进行处理

Torda 发表于 2010-11-9 01:03

16# 有意思

采集的数据,需要进行运算的。然后运算的结果再输出给控制设备。如果用单片机做采集,运算做不了呀

yangbinge 发表于 2010-12-9 15:18

同意16楼
页: [1]
查看完整版本: 请教下linux中关于线程2ms执行一次的方法