เป็นไปได้ไหมที่จะใช้งานซอฟต์แวร์แบบเรียลไทม์?


60

ฉันรู้ว่ามันรัน Linux และมีแพทช์เรียลไทม์สำหรับ Linux แพทช์เหล่านั้นจะใช้งานได้หรือไม่

มีใครลองใช้ Raspberry Pi แบบเรียลไทม์อีกไหม

ความคิดคือการใช้คณะกรรมการเพื่อการควบคุมและงานควบคุมที่มีเวลาที่สำคัญ


2
ฉันคิดว่าเหตุผลที่ไม่เหมือนใครเท่านั้นที่อยู่ในใจว่าทำไมคุณถึงทำไม่ได้ถ้าโซลูชั่น GPU ปิดจะเข้ามา หากคุณสามารถตัดสินใจที่จะเพิกเฉย GPU ในขณะที่อยู่ในภารกิจเรียลไทม์ของคุณฉันคิดว่าส่วนขยายเรียลไทม์สามารถทำงานได้
Chris Stratton

7
ระบบราสเบอร์รี่ปี่ทั้งหมดไม่ได้เปิดให้คุณแก้ไข คำถามก็คือถ้าส่วนที่ไม่ใช่ (GPU) ยินดีที่จะหลีกเลี่ยงในขณะที่คุณกำลังทำงานแบบเรียลไทม์ของคุณหรือถ้านั่นเป็นสิ่งที่หลีกเลี่ยงไม่ได้ที่จะเรียกร้องให้วงรอบรถบัสเข้าถึง RAM หรือแม้แต่ "ความสนใจ "จากแกน ARM ในแบบที่จะทำให้เป้าหมายจังหวะยากลำบาก
Chris Stratton

4
เห็นได้ชัดว่าRISCOSนั้นค่อนข้างเหมาะสมกับแอพพลิเคชั่นเรียลไทม์บางตัวและพอร์ต Raspberry Piก็ทำงานได้ดี * 8 ')
มาร์กบูธ

4
RISCOS ไม่ใช่ระบบปฏิบัติการแบบเรียลไทม์ (ตามลิงค์ Wikipedia ของคุณ) ดังนั้นมันจะช่วยได้อย่างไร?
Lars Pötter

4
CONFIG_PREEMPT_RT Patch ได้รับการแสดงบนโปรเซสเซอร์ ARM หลายตัวที่ใช้ Linux อาจมีปัญหาความล่าช้าบางอย่าง แต่สิ่งเหล่านี้ควรวัดได้ตามคำสั่งของไมโครวินาที
พัฒนา

คำตอบ:


16

คุณอาจสนใจใช้Xenomaiบน RaspberryPi ที่นี่คุณสามารถหาได้สอนเกี่ยวกับวิธีการทำเช่นนี้ สรุป Xenomai เป็นโครงการที่สร้างเคอร์เนล Linux ที่กำหนดเอง (พวกเขามีแพทช์ที่จะต้องนำไปใช้กับแหล่งที่มาของเคอร์เนล) ทำให้มันสามารถเรียกใช้เคอร์เนลอื่น (Xenomai core) ที่เป็นเรียลไทม์ สิ่งนี้ทำให้สามารถเรียกใช้แอปพลิเคชัน Xenomai บนฮาร์ดแวร์ที่หลากหลายโดยไม่จำเป็นต้องเขียนไดรเวอร์สำหรับพวกเขา (เนื่องจาก Linux ทำงานบนฮาร์ดแวร์ที่หลากหลายมาก) สิ่งนี้ช่วยให้การเขียนแอปพลิเคชันผู้ใช้ RT โดยใช้ RT API ที่แตกต่างกัน


1
ความถี่สูงสุดที่ฉันจะได้รับด้วยเครื่องมือนี้คืออะไร ฉันสนใจที่จะควบคุมมอเตอร์กระแสตรงในอัตราการปัดเศษ 1 kHz
Nicolás Arias

19

ในเคอร์เนล Linux การเปิดใช้งานPREEMPT_RTจะให้เวลาแฝงและขอบเขตแบบเรียลไทม์ นอกจากนี้การกำหนดค่าPREEMPT_RTการSCHED_FIFOและSCHED_RRนโยบายยังต้องได้รับการคัดเลือก และแอปพลิเคชันจำเป็นต้องตั้งค่าพารามิเตอร์เรียลไทม์โดยการเรียก API ที่เหมาะสมหรือโดยใช้ยูทิลิตี้ที่เหมาะสม

จากการฝึกอบรมอิเล็กตรอนอิสระ: Realtime ใน Embedded Linux PREEMPT_RT เป็นโครงการที่นำความสามารถแบบเรียลไทม์มาสู่เคอร์เนล มันได้พับอย่างเต็มที่ใน 2.6.33 และ 3.0 กระแสเคอร์เนล ดูเอกสารที่คุณจะพบทุกสิ่ง

โดยทั่วไปมีสองวิธีในการนำความสามารถแบบเรียลไทม์มาสู่เคอร์เนล Linux:

  • ปรับเปลี่ยนภายในเคอร์เนลนั่นคือPREEMPT_RTโครงการ
  • เรียกใช้เรียลไทม์ส่วนด้านข้างกับเคอร์เนลปกติและด้านล่างเคอร์เนลปกติมีได้สามรุ่น: RTLinux, และRTAI Xenomai( Aedosตามที่Avioระบุไว้ด้านล่าง?)

แก้ไข:


2
ยินดีต้อนรับสู่ราสเบอร์รี่ Pi คำตอบที่ดี! RT PREEMPT patchโดยIngo Molnarใช้ร่วมกับHigh Resolution Timers(HRT)สนับสนุนให้เคอร์เนลเพื่อให้บรรลุยากเรียลไทม์ความสามารถ ปัจจุบันการสนับสนุนของมันมาถึง3.4.11 เมล็ดและ "ข่าวดี" ก็คือแพตช์ "กำลังลดขนาด" ดังนั้นดูเหมือนว่าส่วนใหญ่จะรวมอยู่ในแหล่งเคอร์เนลหลัก คุณสามารถค้นหากวดวิชาที่ดีเยี่ยมสำหรับวิธีการใช้และใช้งานได้ที่นี่
Avio

1
เอ่อและอย่าลืมอ้างอิงAdeosท่ามกลางทางเลือกอื่น ๆ เพื่อให้การสนับสนุนแบบเรียลไทม์ใน Linux
Avio

2
ฉันต้องบอกว่าการได้รับ PREEMPT_RT การทำงานกับเคอร์เนล Raspberry Pi นั้นไม่ใช่เรื่องที่ตรงไปตรงมาเพียงแค่การใช้ patch ทำให้เกิดเคอร์เนลที่ไม่ทำงาน นอกจากนี้ยังมีไดรเวอร์ใหม่จำนวนมากในเคอร์เนล Raspberry Pi และไดรเวอร์เหล่านี้ยังไม่ได้ทดสอบกับ PREEMPT_RT และไม่ได้ถูกล้างออกจากการบล็อคสลีปนานเกินไป นี่เป็นงานที่กำลังดำเนินอยู่อย่างมากนั่นคือ
Nakedible

2
มีการอัพเดทอะไรบ้าง? ตอนนี้ไดรเวอร์มีเสถียรภาพเพียงพอที่จะใช้เคอร์เนลแพตช์นี้หรือไม่? ฉันชอบแบบฝึกหัดที่ใช้งานได้สำหรับผู้ที่ยังไม่ได้รวบรวมเคอร์เนล
fabb

@fabb: แม้หลังจากหลายปีจะยังคงมีไดรเวอร์ที่มีความผิดพลาดต่อความต้องการ rt คุณจะพบโดยใช้มันเท่านั้น อย่างไรก็ตามเมื่อเร็ว ๆ นี้ฉันเห็นความผิดพลาดของเครือข่ายเมื่อมีการจัดลำดับความสำคัญของแอปพลิเคชั่นพื้นที่ผู้ใช้ แม้ว่าสถานการณ์เหล่านี้ทั้งหมดจะมีการกำหนดค่าสูงและแอปพลิเคชันเฉพาะ
minghua

6

Wyolum mas aLaMode (ฉันเรียกว่า Almond Pi) เพื่อให้พอดีกับส่วนบนของ Pi ในลักษณะที่วางซ้อนกันได้ มันมีนาฬิกาเรียลไทม์ใช้ aTiny 328 ฟีดของ GPIO Real UART / กำลังไฟและสามารถแฟลชได้หลายวิธี มันยอดเยี่ยมเพราะ Pi สามารถทำอะไรก็ได้ที่คุณต้องการเว็บเซิร์ฟเวอร์ / ฐานข้อมูลในขณะที่ Arduino ทำงานในอินเตอร์รัปต์แบบเรียลไทม์

ป้อนคำอธิบายรูปภาพที่นี่


1
ดูเหมือนว่าอาจจะทำไม่ได้เล็กน้อยในการที่จะมีไมโครคอนโทรลเลอร์ 2 ตัวทำงาน แต่ในทางกลับกันนี่จะช่วยให้มั่นใจได้ว่าการทำงานแบบเรียลไทม์หากวิธีอื่นนั้นไม่เร็วพอ
fabb

1
มีคำแนะนำใด ๆ เกี่ยวกับวิธี RPi ที่จะสื่อสารกับ µC อื่น ๆ อย่างหมดจดโดยไม่ทำให้การควบคุมลูปช้าลง?
fabb

1
ใช่ แต่ µC จะต้องสำรวจ UART ฉันเดาว่าเพื่อไม่ให้ UART ขัดจังหวะเลื่อนการจับเวลาลูปควบคุมไป จากนั้นฉันจะสำรวจความคิดเห็นของ UART ที่จุดเริ่มต้นของลูปควบคุมและตรวจสอบให้แน่ใจว่าฉันไม่ได้อ่านหลายไบต์ดังนั้นจึงใช้เวลาไม่นานเกินไป หรือบัฟเฟอร์ของ UART สามารถล้นได้ง่ายเกินไป หรือความถี่ลูปควบคุมจะสูงกว่าความเร็ว UART ที่อ่านหนึ่งไบต์ในแต่ละลูปถ้ามีจะเพียงพอมากกว่าหรือไม่
fabb

1
คำแนะนำที่ดี BTW Raspberry Pi Alamode เป็นเกมที่เล่นแล้ว โหมด Ala คือเมื่อคุณวางไอศครีมลงในพาย
Dan

1
จริงเหรอ ฮิฮิ. ฉันสงสัยว่ามันหมายถึงอะไร เหมาะสมแล้ว :)
Piotr Kula

2

ทางออกที่ดีที่สุดที่ฉันเคยเห็นคือX10i - คณะกรรมการควบคุมแบบเรียลไทม์สำหรับราสเบอร์รี่ Piจากฮีเบอร์

X10i เป็นตัวควบคุมแบบเรียลไทม์ที่ทรงพลังและปลอดภัยที่อนุญาตให้ควบคุมอินพุต / เอาต์พุตหลายช่องทางผ่าน USB จากระบบพีซีใดก็ได้ ตอนนี้ Heber ให้การสนับสนุนในภาษาการเขียนโปรแกรมจำนวนมากเพื่อให้ง่ายขึ้นสำหรับโปรแกรมเมอร์นักประดิษฐ์และนักพัฒนาเพื่อเชื่อมต่อกับโลกภายนอกจากพีซี

ลิงค์ข้างต้นเป็นเอกสารที่ยอดเยี่ยมและครอบคลุมและพวกเขาพยายามปรับปรุงไดรเวอร์ให้ทันสมัยด้วย Debian for Pi เวอร์ชันล่าสุด


ดังนั้นคุณต้องการตัวเชื่อมต่อริบบิ้นจาก Pi ถึงสิ่งนี้หรือไม่ ไม่สามารถหาภาพจ้างของสิ่งนี้ได้ แต่มันดูเทอะทะจริงๆ มันมีตัวอย่างมากมายดังนั้นฉันคิดว่าดี +1
Piotr Kula

ฉันไม่สามารถบอกได้ว่าฉันใช้มัน แต่ฉันคาดหวังว่าจะเป็นเช่นนั้นแม้ว่าฉันจะจำคนที่ใช้อินเตอร์เฟส USB ในการสาธิตได้ มันค่อนข้างใหญ่ แต่ก็ใช่
Jivings

1

นี่คือบทความ (ฝรั่งเศสแปลโดย Google แปล) ในราสเบอร์รี่ Pi ทำงานด้วย Xenomai


5
สวัสดี. โดยทั่วไปเราไม่สนับสนุนคำตอบที่เป็นเพียงการเชื่อมโยงในกรณีที่หน้าเว็บที่เชื่อมโยงเคลื่อนที่ คุณสามารถสรุปข้อมูลในหน้านั้นในคำตอบของคุณได้หรือไม่? จากนั้นคุณสามารถรวมลิงค์เป็นข้อมูลอ้างอิง ขอบคุณ!
Jivings

1

RODOS เป็นอีกทางเลือกหนึ่ง มันเป็นโครงการโอเพ่นซอร์สที่พัฒนาโดยศูนย์การบินและอวกาศเยอรมันและทีมมหาวิทยาลัยและนักศึกษาของ Montenegro

มันใช้ C ++ เขียนด้วยวิธีเชิงวัตถุอย่างสมบูรณ์และรองรับ ARM7, Atmel AVR, STM32 / Cortex-M3, Xilinx, Raspberry Pi :), ...

ปัจจุบันใช้กับดาวเทียม TET และในเครื่อง LoTTo ถ้าฉันไม่ผิด

แน่นอนว่าฉันต้องการใช้งานบน Linux (เป็นไปได้มากที่สุด) เพื่อให้ได้ทั้งสองโลกที่ดีที่สุด - แต่คำถามแบบเรียลไทม์ยังคงอยู่เพราะฉันไม่แน่ใจว่าเป็นไปได้หรือไม่ที่ Linux สามารถให้ API ที่ถูกต้องได้

ในการรับ RODOS ต้องเขียนข้อความถึงศ. Sergio Montenegro หรือ DLR (German Aerospace Center)


1

นอกเหนือจาก linux ยังมีระบบปฏิบัติการแบบเรียลไทม์ ค่อนข้างเป็นที่นิยมในหมู่คนที่เปิดแหล่งที่มาคือ ChibiOS / RT:

เป็น RTOS ที่สมบูรณ์แบบพกพามาได้ขนาดกะทัดรัดและรวดเร็วมาก (ระบบปฏิบัติการเรียลไทม์)

แนะนำสั้น ๆ ที่http://chibios.org/dokuwiki/doku.php?id=chibios:documents:introduction จะแตกต่างจาก linux คุณอาจชอบอ่านของ

มีตัวเลือกการออกแบบบางอย่างที่ควรอธิบายและสนับสนุนเพื่อทำให้ ChibiOS / RT เป็นงานออกแบบที่แปลกประหลาด ไม่มีอะไรใหม่ในตัวเอง แต่ทั้งหมดน่าสนใจ

หรือไม่. ถ้าคุณชอบการทดลอง pi อาจคุ้มค่ากับประสบการณ์ที่https://github.com/steve-bate/ChibiOS-RPi :

ChibiOS fork สำหรับการทดลอง Raspberry PI

ผู้เขียนเพิ่มคำแนะนำที่ดีที่

http://www.stevebate.net/chibios-rpi/GettingStarted.html

โดยส่วนตัวเมื่อพูดถึง rtos สำหรับฉัน linux ก็เหมือนกับการพกพาอุปกรณ์ข้ามเทือกเขาแอลป์สำหรับความต้องการในประเทศธรรมดา คุณอาจไม่ต้องการมัน แม้ปี่อาจจะมากเกินไป ตรวจสอบhttp://forum.arduino.cc/index.php?topic=144715.0สำหรับน้ำหนักที่ลดลง :)


0

ดู Hypriot Raspbian รุ่นนี้ด้วย RT_PREEMPT_FULL:

http://www.ehu.eus/ehusfera/pablogn/2016/01/20/real-time-kernel-for-the-raspberry-sbc/


1
ยินดีต้อนรับสู่ราสเบอร์รี่ Pi! ในขณะที่สิ่งนี้อาจตอบคำถามในทางทฤษฎีมันก็ควรที่จะรวมส่วนสำคัญของคำตอบที่นี่และให้ลิงค์สำหรับการอ้างอิง
Ghanima
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.