linux下要达到1 ms的精度执行动作哪种准
如题。。。。。。。 哪种定时方式准一些? 不可能{:lol:} 就算RT也不行,在imx6和IMX8上都用RT实测过。 双核一个跑linux 一个裸奔或者rtos{:lol:} 本帖最后由 justdomyself 于 2023-11-29 19:00 编辑boyiee 发表于 2023-11-29 18:41
不可能 就算RT也不行,在imx6和IMX8上都用RT实测过。
(引用自2楼)
我要1ms从共享内存读一个数。然后发送出去。
如果不能做到绝对准确,用哪种方式相对准确呢?有误差也再所难免 kebaojun305 发表于 2023-11-29 18:43
双核一个跑linux 一个裸奔或者rtos
(引用自3楼)
我要1ms从共享内存读一个数。然后发送出去。要保证采样率为1khz. 不是实时操作系统没法保证的吧?
以前看别人开发运动控制器,就说了freertos之类的才行 vxworks系统可以吧?...... 一般情况,可以写一个小驱动,在内核空间用 hrtimer
要求高的话,打一个 rt preempt 实时补丁,打了补丁后,用户空间都可以保证实时性 dukelec 发表于 2023-11-29 19:07
一般情况,可以写一个小驱动,在内核空间用 hrtimer
要求高的话,打一个 rt preempt 实时补丁,打了补丁后 ...
(引用自8楼)
按照上面说的一般情况,但是不打内核补丁,应用层精度能到多少? 只能硬件定时器,软件模拟啥不可能 justdomyself 发表于 2023-11-29 19:09
按照上面说的一般情况,但是不打内核补丁,应用层精度能到多少?
(引用自9楼)
不打补丁,用户空间的话
要把内核配置的动态调度关掉,调度频率开比较大
然后尽量少开启一些驱动,譬如 wifi usb 之类的
然后不要跑耗 cpu 的程序
然后 x86-64 的话,acpi 一些影响实时性的坑要规避一下
然后你应用程序的 nice 调度优先及给到最高
还有即便没打布丁,也要按照打了布丁的教程来写程序,譬如程序启动的时候申请内存,运行的过程中不要再动态申请内存
然后你 cpu 足够强劲
可能也能达到打了实时补丁的效果(只是不能 100% 避免偶发的较大的抖动,和所启用的驱动有关)
做到位的话,剩下还是跟 cpu 性能有关系,pc 的话,一般 50us 到 100us 左右的抖动 我用epoll做10ms定时通讯还能跑的过来,1ms没试过 三年模拟 发表于 2023-11-29 19:24
只能硬件定时器,软件模拟啥不可能
(引用自10楼)
在应用层开硬件定时器? 加个单片机吧,别难为Linux了。 liuqian 发表于 2023-11-29 20:07
我用epoll做10ms定时通讯还能跑的过来,1ms没试过
(引用自12楼)
没这么离谱吧,我是传送频率高,数据量不大。 不可能, 10ms起步, windows 正负30ms
window没那么差吧,我试过多媒体定时器 linux本身就是非实时系统,达不到1ms的不抖动,只能打preemptrt 补丁。但打preemptrt 补丁以后,你想要在实时环境驱动外围设备,可能需要另外写驱动,反正是个麻烦事。 linux 反复掉电重启,也会容易丢系统文件。丢文件的问题。一直不敢用。 liuzhijun2008 发表于 2023-11-29 23:10
linux 反复掉电重启,也会容易丢系统文件。丢文件的问题。一直不敢用。
(引用自19楼)
文件系统选型的问题不归系统背锅 justdomyself 发表于 2023-11-29 21:27
在应用层开硬件定时器?
(引用自13楼)
驱动支持就行 liuzhijun2008 发表于 2023-11-29 23:10
linux 反复掉电重启,也会容易丢系统文件。丢文件的问题。一直不敢用。
(引用自19楼)
研究下安卓文件系统怎么分区的。你会懂的 liuzhijun2008 发表于 2023-11-29 23:10
linux 反复掉电重启,也会容易丢系统文件。丢文件的问题。一直不敢用。
(引用自19楼)
这个%99是文件系统移植时,没有搞好的缘故, 特别是早期 用NAND FLASH 的方案 liuzhijun2008 发表于 2023-11-29 23:10
linux 反复掉电重启,也会容易丢系统文件。丢文件的问题。一直不敢用。
(引用自19楼)
掉电的时候,你不频繁写数据,不会丢的的。 redworlf007 发表于 2023-11-30 09:13
掉电的时候,你不频繁写数据,不会丢的的。
(引用自24楼)
掉电时写,只会造成当前操作的文件数据丢失, 不会造成系统文件出问题,或者是文件系统损坏、崩溃的;
如果会出这个问题, 那可以把主板扔掉了 本帖最后由 redworlf007 于 2023-11-30 10:26 编辑
polarbear 发表于 2023-11-30 09:40
掉电时写,只会造成当前操作的文件数据丢失, 不会造成系统文件出问题,或者是文件系统损坏、崩溃的;
...
(引用自25楼)
大哥,如果写的系统盘里面的文件,掉电时,系统文件也会有概率损坏。
arm9j1900跑Linux都会出现,工业上要求掉电不丢东西的,基本都有备用电池或者超级电容之类的。
只要你掉电得时候,写的频繁或者数据量大,没有备用电支持,从原理讲就不可能避免丢东西或者系统文件出问题,只是概率大小的问题。
本帖最后由 polarbear 于 2023-11-30 10:51 编辑
redworlf007 发表于 2023-11-30 10:24
大哥,如果写的系统盘里面的文件,掉电时,系统文件也会有概率损坏。
arm9j1900跑Linux都会出现,工业 ...
(引用自26楼)
不会掉系统盘的数据的;
工业上加电容或者电池是为了防止用户动作数据或者工艺文件数据丢失, 要保存用户掉电前的数据
而不是为防止系统盘掉文件或者是文件系统奔溃;
掉电写文件为啥不会崩文件系统, 硬件上来说,FLASH 的最低工作电压是2.7V,你系统中的PMC 检测到 5V 电压有跌落, PMC 就会有检测到BOD,硬件复位系统, 不会有读写动作发生了
如果你为了节省硬件成本,用一堆DCDC 来替换PMC , 就当我上面的没有说;
然后就是软件层面的事情, 包括你用的文件系统(特别是用NAND FLASH 存储器 ),驱动。。。。
文件系统防止丢失数据需要软件硬件综合的设计考虑,任何一个环节考虑不好都会出问题
我见过有个公司的主板就是会丢数据,他们公司的工程师也没有根治解决, 反正就是你说的加掉电电容。。。一系列骚操作; 但是他们同行的就是啥也不加,也没有出过问题{:titter:}
换方案吧,这种场景是STM32MP15这种双核芯片擅长的,一个主核A7跑Linux,另外一个M4核跑实时任务。各大芯片厂商之所以出这种芯片就是考虑Linux和实时控制相结合的应用场景。 换一个多核的芯片,拿一个核跑MCU程序,我做过使用芯片的LCD模式发送数据精度nS级别的 polarbear 发表于 2023-11-30 10:34
不会掉系统盘的数据的;
工业上加电容或者电池是为了防止用户动作数据或者工艺文件数据丢失, 要保存用 ...
(引用自27楼)
PMC用啥做?检测掉电然后复位的芯片?
我在复位电路那里加了一个检测到掉电立马复位cpu的芯片,实际上我还把系统放一个flash里面,频繁读写的数据存在另外一个flash。 redworlf007 发表于 2023-11-30 13:22
PMC用啥做?检测掉电然后复位的芯片?
我在复位电路那里加了一个检测到掉电立马复位cpu的芯片,实际上我还 ...
(引用自30楼)
检测3.3 V 跌落到3V立马复位也可以; 现在很多linux的主板基本都是1片FLASH , 系统和数据都在里面 linu有实时版本的 Linux打上Preempt RT补丁,就可以跑1ms周期任务,优化一下 抖动30-50us左右。 外置一片MCU,反正现在MCU白菜价了。 oldca9001 发表于 2023-12-3 09:52
Linux打上Preempt RT补丁,就可以跑1ms周期任务,优化一下 抖动30-50us左右。
(引用自33楼)
具体怎么操作 justdomyself 发表于 2023-12-3 19:04
具体怎么操作
(引用自35楼)
打了rt补丁也不可靠,我们在imx系列上实际测试过,不打rt补丁基本几十ms,打了补丁系统空闲时候抖动几十us,系统负载高时候就不行了。
如果想要可靠,还是加单片机把,别为难linux了。 boyiee 发表于 2023-12-3 19:33
打了rt补丁也不可靠,我们在imx系列上实际测试过,不打rt补丁基本几十ms,打了补丁系统空闲时候抖动几十u ...
(引用自36楼)
CPU本身性能不能太差,另外可以考虑多核处理器,把其中一个核隔离出来,绑定到实时任务上去,这些就是Linux本身优化的问题了,很多技巧。
页:
[1]