RTOS สำหรับระบบฝังตัว


57

ฉันได้เห็นบทความมากมายที่บอกฉันว่าฉันควรใช้ RTOS สำหรับการจัดการเวลาและการจัดการทรัพยากร เวลาของฉันไม่ได้รับอนุญาตให้ทำการวิจัยของฉันเองดังนั้นฉันจึงไปหาชิปเพื่อขอคำแนะนำ

ฉันใช้ไมโครคอนโทรลเลอร์ทรัพยากรต่ำ (MSP430, PIC) และกำลังมองหา RTOS ที่ฉันสามารถใช้ได้

ตรงประเด็น:

  1. ต้นทุนทรัพยากรของระบบ
  2. ข้อดีของระบบ
  3. ข้อเสียของระบบ
  4. เคล็ดลับการใช้งาน
  5. สถานการณ์ที่ RTOS ควร / ไม่ควรใช้

ฉันไม่ได้ใช้ระบบเช่น arduino โครงการที่ฉันทำงานด้วยไม่สามารถรองรับค่าใช้จ่ายของระบบดังกล่าวได้


2
ฉันสับสนว่าสิ่งนี้ได้รับการลงคะแนนสำหรับ หากผู้มีสิทธิเลือกตั้งสามารถให้ข้อเสนอแนะกับฉันฉันจะพยายามหลีกเลี่ยงการกระทำดังกล่าวในอนาคต
Kortuk

1
เหมือนกัน มันเป็นคำถามที่ดี ....
เจสัน S

ฉันยอมรับคำถามเพราะถึงแม้จะคิดว่าเรื่องนี้จบลงฉันก็มีคำตอบมากมายและต้องการให้รางวัลนักเขียนอย่างน้อยหนึ่งคนสำหรับความพยายาม
Kortuk

คำตอบ:


29

ฉันไม่ได้มีประสบการณ์ส่วนตัวกับ RTOS นอกเหนือจาก QNX มาก (ซึ่งยอดเยี่ยมในภาพรวม แต่ไม่ถูกและฉันมีประสบการณ์ที่แย่มากกับผู้จำหน่ายบอร์ดรายใดรายหนึ่งและทัศนคติที่เราไม่สนใจสำหรับระบบอื่น ๆ ของ QNX มากกว่าที่พบบ่อยที่สุด) ซึ่งมีขนาดใหญ่เกินไปสำหรับ PIC และ MSP430

คุณจะได้ประโยชน์จาก RTOS ในด้านต่าง ๆ เช่น

  • การจัดการเธรด / การกำหนดตารางเวลา
  • การสื่อสารระหว่างเธรด + การซิงโครไนซ์
  • I / O บนระบบที่มี stdin / stdout / stderr หรือพอร์ตอนุกรมหรืออีเธอร์เน็ตรองรับหรือระบบไฟล์ (ไม่ใช่ MSP430 หรือ PIC ส่วนใหญ่ยกเว้นพอร์ตอนุกรม)

สำหรับอุปกรณ์ต่อพ่วงของ PIC หรือ MSP430: สำหรับพอร์ตอนุกรมฉันจะใช้วงแหวนบัฟเฟอร์ + อินเตอร์รัปต์ ... สิ่งที่ฉันเขียนหนึ่งครั้งต่อระบบและใช้ใหม่ อุปกรณ์ต่อพ่วงอื่น ๆ ฉันไม่คิดว่าคุณจะได้รับการสนับสนุนอย่างมากจาก RTOS เนื่องจากเป็นอุปกรณ์เฉพาะของผู้ขาย

หากคุณต้องการเวลาที่มีความทนทานต่อไมโครวินาที RTOS อาจไม่ช่วย - RTOS นั้นมีเวลา จำกัด แต่โดยทั่วไปแล้วจะมีเวลากระวนกระวายใจในการตั้งเวลาเนื่องจากความล่าช้าในการสลับบริบท ... QNX ที่ทำงานบน PXA270 มี กระวนกระวายใจโดยทั่วไปเป็นสิบไมโครวินาที, สูงสุด 100-200us ดังนั้นฉันจะไม่ใช้มันสำหรับสิ่งที่ต้องวิ่งเร็วกว่าประมาณ 100Hz หรือต้องการเวลาที่แม่นยำมากกว่าประมาณ 500us สำหรับสิ่งนั้นคุณอาจต้องใช้การจัดการขัดจังหวะของคุณเอง RTOS ของบางคนจะเล่นอย่างนั้นและคนอื่น ๆ จะทำให้มันเจ็บปวดราชวงศ์: เวลาของคุณและเวลาของพวกเขาอาจไม่สามารถอยู่ร่วมกันได้ดี

หากการกำหนดเวลา / การกำหนดเวลาไม่ซับซ้อนเกินไปคุณอาจจะดีกว่าโดยใช้เครื่องสถานะที่ออกแบบมาอย่างดี ฉันอยากจะแนะนำให้อ่านStatecharts ปฏิบัติใน C / C ++ถ้าคุณยังไม่ได้ เราได้ใช้วิธีการนี้ในบางโครงการที่ฉันทำงานอยู่และมีข้อได้เปรียบที่เหนือกว่าเครื่องรัฐแบบดั้งเดิมสำหรับการจัดการความซับซ้อน .... ซึ่งเป็นเหตุผลเดียวที่คุณต้องการ RTOS


ฉันทำงานที่ บริษัท เริ่มต้นที่พวกระบบฝังตัวที่มีประสบการณ์มากที่สุดเพิ่งจะเลิกเรียน (เช่นตัวเองและคนอื่น ๆ ที่ทำงานกับฉันมาประมาณ 2 ปี) ฉันใช้เวลาส่วนใหญ่สอนตัวเองเกี่ยวกับการฝึกปฏิบัติงานในช่วงสัปดาห์ทำงาน ขณะที่ฉันอ่านฉันได้รับการแจ้งให้ทราบทั้งหมด แต่ระบบต้นทุนต่ำสุดของเรา RTOS จะเป็นสิ่งที่ปรับปรุงได้อย่างมาก
Kortuk

ดูเหมือนจะมีระบบ RTOS ทรัพยากรที่ต่ำมากสำหรับสิ่งต่าง ๆ เช่น PICs และ MSP430s ที่สามารถช่วยสร้างระบบที่กำหนดขึ้นจากระบบที่ซับซ้อนมากและยังช่วยกำจัดการจัดการแยกโมดูล ฉันเป็นส่วนหนึ่งของทีมชายสองคนที่สร้างการรวบรวมข้อมูลและระบบการจัดเส้นทางอย่างมีประสิทธิภาพ ตอนนี้ฉันดู RTOS ฉันเห็นว่ามันสมบูรณ์แบบสำหรับสิ่งที่เราออกแบบ
Kortuk

ขออภัยที่ใช้ช่องโพสต์สามช่องคำตอบของคุณมีประโยชน์มากฉันกำลังมองหาวิธีแก้ปัญหาทรัพยากรที่ต่ำมาก แต่ข้อมูลนี้มีค่าควรขอบคุณสำหรับความช่วยเหลือ
Kortuk

ไม่ต้องกังวลเกี่ยวกับจำนวนความคิดเห็น (IMHO สิ่งหนึ่งที่ขาดกรอบ StackExchange คือการสนับสนุนสำหรับการอภิปราย ... รูปแบบ Q / A ครอบคลุมเกือบทุกอย่าง แต่ไม่ใช่บางอย่าง) ... ดูเหมือนว่าคุณจะจัดการกับสิ่งที่ค่อนข้างดี คุณกำลังมองหา ฉันไม่ได้ดู FreeRTOS ที่ Steve ได้กล่าวถึง แต่ถ้ามันถูกส่งไปยังไมโครคอนโทรลเลอร์ระดับล่างสุดบางทีมันอาจเป็นการจัดการการตั้งเวลาที่คุณต้องการ
เจสัน S

ดูเหมือนว่าจะบันทึกสถานะของแต่ละเธรดแม้ว่าสแต็ก (คล้าย 50 คำสั่ง push / pull) และสามารถจัดการกับอินเตอร์รัปต์ที่กำหนดเวลา ตามปกติระบบของฉันจะใช้การขัดจังหวะพอร์ตเพื่อเปลี่ยนเธรด แต่งานดูเป็นไปได้ ฉันหวังว่าเว็บไซต์ประเภทนี้จัดการสนทนาในรูปแบบที่ดีขึ้น
Kortuk

26

คุณลองFreeRTOS แล้วหรือยัง มันเป็นฟรี (ขึ้นอยู่กับ T & C) และได้รับการ ported ทั้ง MSP430 และหลายรสชาติของ PIC

มันมีขนาดเล็กเมื่อเทียบกับคนอื่น ๆ แต่ก็ทำให้เรียนรู้ได้ง่ายโดยเฉพาะถ้าคุณไม่เคยใช้ RTOS มาก่อน

มีใบอนุญาตให้ใช้งานเชิงพาณิชย์ (ไม่ใช้ฟรี) รวมถึงรุ่น IEC 61508 / SIL 3


ขอบคุณตันฉันจะดูภายในสัปดาห์ฉันจะปล่อยให้คำถามเปิดสำหรับคำตอบอื่น ๆ แต่คุณเป็นความช่วยเหลือที่ดี!
Kortuk

12

ฉันเพิ่งค้นพบเกี่ยวกับNuttX RTOS ที่สามารถใช้กับระบบ 8052 (8 บิต) ได้ มันมีพอร์ตไม่เยอะ แต่มันดูน่าสนใจ POSIX อาจเป็นข้อดีเพราะอาจทำให้บางรหัสของคุณพกพาได้มากกว่านี้ถ้าคุณเลื่อนขึ้นไปที่โปรเซสเซอร์ที่มีเนื้อวัวมากขึ้นและคุณต้องการเรียกใช้ linux หรือ QNX แบบเรียลไทม์

ฉันไม่มีประสบการณ์กับ RTOS เชิงพาณิชย์ด้วยตัวเอง แต่ฉันใช้โฮมเมดมานานหลายปี! พวกเขายอดเยี่ยมในการช่วยคุณแบ่งการพัฒนาโค้ดของคุณในบรรดาโปรแกรมเมอร์หลายคนเพราะพวกเขาแต่ละคนสามารถได้รับ "งาน" หรือ "เธรด" เพื่อทำงานในส่วนของพวกเขา คุณยังต้องประสานงานและบางคนต้องดูแลโครงการทั้งหมดเพื่อให้แน่ใจว่าแต่ละงานสามารถทำให้เป็นวันครบกำหนด

ฉันขอแนะนำให้คุณวิจัยอัตราการวิเคราะห์เสียงเดียวหรือ RMA เมื่อใช้ RTOS สิ่งนี้จะช่วยคุณรับประกันว่างานสำคัญของคุณจะตรงตามกำหนดเวลา

ฉันจะพิจารณากรอบการเขียนโปรแกรมที่ขับเคลื่อนด้วยเหตุการณ์QP-nanoของ Miro Samek ที่สามารถทำงานกับหรือไม่ใช้ RTOS และยังให้ความสามารถแบบเรียลไทม์ ด้วยคุณจะแบ่งการออกแบบของคุณเป็นเครื่องสถานะแบบลำดับชั้นแทนที่จะเป็นงานดั้งเดิม Jason S พูดถึงหนังสือของ Miro ในโพสต์ของเขา อ่านดีมาก!


9

สิ่งหนึ่งที่ฉันพบว่ามีประโยชน์กับหลาย ๆ เครื่องก็คือ stack switcher แบบง่าย ๆ ฉันยังไม่ได้เขียนหนึ่งสำหรับ PIC แต่ฉันคาดหวังว่าวิธีการนี้จะทำงานได้ดีบน PIC18 หากเธรดทั้งคู่ / ทั้งหมดใช้ระดับสแต็คทั้งหมด 31 หรือน้อยกว่า ใน 8051 รูทีนหลักคือ:

_taskswitch:
  xch a, SP
  xch a, _altSP
  xch a, SP
  เกษียณ

บน PIC ฉันลืมชื่อของตัวชี้สแต็ก แต่รูทีนจะเป็นดังนี้:

_taskswitch:
  movlb _altSP >> 8
  movf _altSP, w, b
  movff _STKPTR, altSP 
  movwf _STKPTR, c
  กลับ

เมื่อเริ่มต้นโปรแกรมให้เรียกรูทีน task2 () ซึ่งโหลด altSP พร้อมที่อยู่ของสแต็กสำรอง (16 อาจทำงานได้ดีสำหรับ PIC18Fxx) และรันลูป task2 กิจวัตรนี้จะต้องไม่กลับมามิฉะนั้นสิ่งอื่น ๆ จะตายอย่างเจ็บปวด แต่ควรเรียก _taskswitch ทุกครั้งที่ต้องการควบคุมการทำงานหลัก ภารกิจหลักควรเรียก _taskswitch ทุกครั้งที่ต้องการให้งานรอง บ่อยครั้งที่หนึ่งจะมีกิจวัตรน้อยน่ารักเช่น:

เป็นโมฆะ delay_t1 (สั้น val ที่ไม่ได้ลงชื่อ)
{
  ทำ
    taskswitch ();
  ในขณะที่ ((สั้นไม่ได้ลงนาม) (millisecond_clock - val)> 0xFF00);  
}

โปรดทราบว่าตัวสลับงานไม่มีวิธีการใด ๆ ในการทำ 'รอเงื่อนไข' สิ่งที่มันรองรับก็คือ spinwait ในทางกลับกันสวิตช์งานจะเร็วมากจนการพยายาม taskwitch () ในขณะที่ภารกิจอื่นกำลังรอให้ตัวจับเวลาหมดอายุจะสลับไปที่งานอื่นตรวจสอบตัวจับเวลาและสลับกลับเร็วกว่าตัวสลับงานทั่วไป จะกำหนดว่าไม่จำเป็นต้องสลับงาน

โปรดทราบว่าการทำงานมัลติทาสกิ้งแบบร่วมมือมีข้อ จำกัด บางประการ แต่ก็หลีกเลี่ยงความต้องการการล็อคและโค้ดที่เกี่ยวข้องกับ mutex จำนวนมากในกรณีที่ค่าคงที่ที่ถูกรบกวนชั่วคราวสามารถสร้างใหม่ได้อย่างรวดเร็ว

(แก้ไข): คำเตือนคู่เกี่ยวกับตัวแปรอัตโนมัติและเช่น:

  1. หากรูทีนที่ใช้การสลับงานถูกเรียกจากเธรดทั้งสองโดยทั่วไปจะจำเป็นต้องรวบรวมสำเนาสองชุดของรูทีน (อาจเป็นโดย #including ซอร์สไฟล์เดียวกันสองครั้งโดยมีคำสั่ง #define ต่างกัน) ไฟล์ต้นฉบับที่ให้มาจะมีโค้ดสำหรับเธรดเดียวเท่านั้นมิฉะนั้นจะมีโค้ดที่จะคอมไพล์สองครั้ง - หนึ่งครั้งสำหรับแต่ละเธรด - ดังนั้นฉันสามารถใช้มาโครเช่น "#define delay (x) delay_t1 (x)" หรือ #define delay (x) delay_tx (x) "ขึ้นอยู่กับว่าฉันใช้เธรดใดอยู่
  2. ฉันเชื่อว่าคอมไพเลอร์ PIC ที่ไม่สามารถ "เห็น" ฟังก์ชั่นที่เรียกว่าจะถือว่าฟังก์ชั่นดังกล่าวอาจทำให้ถังขยะใด ๆ และ CPU ทั้งหมดที่ลงทะเบียนดังนั้นหลีกเลี่ยงความจำเป็นในการบันทึกลงทะเบียนในรูทีน มัลติทาสกิ้งยึดเอาเสียก่อน] ทุกคนที่พิจารณาตัวสลับงานที่คล้ายกันสำหรับ CPU อื่น ๆ จำเป็นต้องทราบถึงระเบียบการลงทะเบียนที่ใช้งานอยู่ การกดรีจิสเตอร์ก่อนที่จะสลับงานและ popping หลังจากนั้นเป็นวิธีที่ง่ายในการดูแลสิ่งต่าง ๆ โดยสมมติว่ามีพื้นที่สแต็กเพียงพอ

มัลติทาสกิ้งแบบมีส่วนร่วมไม่อนุญาตให้ใครหลบหนีปัญหาการล็อคอย่างสมบูรณ์ แต่มันทำให้สิ่งต่าง ๆ ง่ายขึ้นอย่างมาก ใน RTOS ที่ยึดเอาเสียก่อนด้วยเครื่องเก็บขยะแบบย่อซึ่งจำเป็นต้องอนุญาตให้ตรึงวัตถุ เมื่อใช้ตัวสลับการทำงานร่วมกันคุณไม่จำเป็นต้องใช้รหัสที่สมมติว่ามีวัตถุ GC อาจย้ายเมื่อใดก็ได้ที่ taskwitch () ถูกเรียก ตัวบีบอัดแบบกระชับซึ่งไม่ต้องกังวลกับวัตถุที่ปักหมุดสามารถทำได้ง่ายกว่าที่ทำ


1
คำตอบที่ยอดเยี่ยม ฉันคิดว่ามันน่าสนใจที่จะได้รับลิงค์เกี่ยวกับแหล่งข้อมูลเกี่ยวกับการเข้าถึง RTOS ของฉันเอง การมุ่งเน้นของฉันที่นี่คือการได้รับ RTOS ที่มีคุณภาพสูงจากผู้ขายที่ได้ทำงานเพื่อให้แน่ใจว่าจะได้ตามเวลาจริง แต่นี่อาจเป็นงานอดิเรกที่สนุกสำหรับตัวเอง
Kortuk

1
เย็นไม่เคยคิดว่างานเป็นเพียงแค่สลับเอสพี ...
NickHalden

1
@JGord: ฉันได้ทำ switch-task เล็ก ๆ บน 8x51 และ TI DSP 8051 ดังที่แสดงไว้ด้านบนถูกออกแบบมาสำหรับสองงานที่แม่นยำ DSP หนึ่งใช้กับสี่และมันซับซ้อนกว่าเล็กน้อย ฉันเพิ่งมีความคิดที่บ้าคลั่ง: หนึ่งสามารถจัดการสี่งานโดยเพียงแค่ใช้สาม taskwitchers ทุกครั้งที่หนึ่งในสองภารกิจแรกต้องการสลับงานควรเรียก TaskSwitch1 และ TaskSwitch2 เมื่อหนึ่งในสองภารกิจที่สองต้องการ taskwitch มันควรเรียก Taskswitch1 และ Taskswitch3 สมมติว่าโค้ดเริ่มต้นใน stack0 และแต่ละ task switcher ถูกตั้งค่าด้วยหมายเลขสแต็กที่สอดคล้องกัน
supercat

@JGord: อืม ... มันไม่ได้ผลหรอก ดูเหมือนว่าจะให้ผลเป็นแบบ 3 ทางและจะไม่สนใจ switcher ตัวที่สาม การทดลองและฉันคิดว่าคุณน่าจะได้สูตรที่ดี
supercat

7

ฉันใช้Salvoกับ MSP430 แล้ว นี่คือทรัพยากรของตัวประมวลผลที่เบามากและหากคุณปฏิบัติตามกฎการใช้งานนั้นใช้งานง่ายและเชื่อถือได้มาก นี่เป็นระบบปฏิบัติการแบบร่วมมือกันและต้องการให้สวิตช์งานทำงานในระดับการเรียกฟังก์ชันภายนอกของฟังก์ชันงาน ข้อ จำกัด นี้อนุญาตให้ระบบปฏิบัติการทำงานในอุปกรณ์หน่วยความจำขนาดเล็กมากโดยไม่ต้องใช้พื้นที่สแต็คจำนวนมากเพื่อรักษาบริบทงาน

ใน AVR32 ฉันใช้ FreeRTOS น่าเชื่อถือมากจนถึงตอนนี้ แต่ฉันมีความแตกต่างของการกำหนดค่า / รุ่นระหว่างรุ่นที่ FreeRTOS เผยแพร่และรุ่นที่ให้มาพร้อมกับเฟรมเวิร์ก Atmel อย่างไรก็ตามเรื่องนี้มีข้อดีคือมันฟรี!


5

อิเล็คทรอนิคส์อิเล็กทรอนิคส์ฉบับเดือนธันวาคมมีส่วนที่ 3 ของชุดระบบปฏิบัติการแบบเรียลไทม์สำหรับ PICs (ในคอลัมน์ผสม PIC n ') และมีรายละเอียดของการตั้งค่า FreeRTOS ด้วย MPLAB และ PICKit 2 บทความสองบทความก่อนหน้านี้ ไม่ได้เห็น) ดูเหมือนจะพูดคุยเกี่ยวกับข้อดีของ RTOS ต่างๆและตัดสินบน FreeRTOS เมื่อบทความปัจจุบันมีการตั้งค่าสภาพแวดล้อมการพัฒนาพวกเขาจะเริ่มออกแบบนาฬิกาดิจิตอลไบนารี ดูเหมือนว่ามีอย่างน้อยหนึ่งส่วนที่จะมาในหัวข้อนี้

ฉันไม่แน่ใจว่า EPE มีให้บริการในสหรัฐอเมริกาเพียงใด แต่ดูเหมือนว่าเป็นร้านค้าในสหรัฐอเมริกาที่เชื่อมโยงกับเว็บไซต์ของพวกเขาและอาจมีสำเนาอิเล็กทรอนิกส์


4

คอมไพเลอร์ CCS สำหรับ PIC มาพร้อมกับ RTOS แบบง่าย ฉันยังไม่ได้ลอง แต่ถ้าคุณมีคอมไพเลอร์นี้มันจะง่ายต่อการทดสอบ


1
ฉันลองนี่เป็นครั้งแรกของฉัน มันไม่ใช่ RTOS ในความหมายที่แท้จริงของคำใด ๆ มันไม่ได้ยึดเอาเสียก่อนในทางใดทางหนึ่ง มันต้องการการใช้คำสั่งที่ให้ผลตอบแทนเป็นประจำเพื่อให้ RTOS สามารถตัดสินใจได้ว่าใครจะทำงานต่อไปคุณจะต้องตั้งใจใส่มันอย่างต่อเนื่องในกรณีที่โปรแกรมอื่นจำเป็นต้องเข้าครอบครอง
Kortuk

2
ฉันคิดว่ามันยังคงเรียกว่า RTOS ดูเหมือนว่าจะมีตัวกำหนดเวลาทำงานแบบมีส่วนร่วมแทนที่จะเป็นตัวกำหนดตารางเวลาไว้ก่อน
Jay Atkinson

ใช่มันยังคงเป็น RTOS ในทางเทคนิค แต่ฉันมีและยังมีค่าน้อยมาก ฉันรู้ว่ามันเป็นเรื่องส่วนตัว แต่สำหรับฉันมันจำเป็นต้องได้รับการดูแลให้มีคุณค่า ฉันยัง +1 เพราะมันเป็นคำตอบที่ดีและมีค่า
Kortuk

3

คำถามที่เกี่ยวข้องอย่างใกล้ชิด: https://stackoverflow.com/questions/1624237/multithreading-using-c-on-pic18


ขอบคุณ! ดูเหมือนว่าคนส่วนใหญ่ไม่ได้รับคำถาม แต่ก็ยังน่าสนใจ
Kortuk

ฉันโพสต์คำถามเพื่อเชิญผู้ใช้ให้มาที่ E&R เพื่อขอความช่วยเหลือ!
Kortuk

ฉันคิดว่าเรา "ได้รับ" คำถามเกี่ยวกับ SO มันกำลังถามอะไรที่แตกต่าง แต่เกี่ยวข้องกับคำถามนี้ สำหรับความคิดเห็นของคุณมีเกี่ยวกับการรับรอง; ขึ้นอยู่กับหลาย ๆ อย่าง ดูคำตอบที่นี่ฉันชอบคำตอบของ DoxaLogos ที่อ้างถึง QP-nano; ประสบการณ์ของฉันทำให้ฉันชอบรหัสที่ขับเคลื่อนด้วยเหตุการณ์เหนือเธรดและการสลับบริบทของเธรดโดยปริยาย
janm

2

คุณไม่ได้พูดเกี่ยวกับใบสมัครของคุณมากนัก ไม่ว่าคุณจะใช้ RTOS นั้นขึ้นอยู่กับสิ่งที่คุณต้องทำใน PIC หากคุณไม่ทำสิ่งที่แตกต่างกันแบบอะซิงโครนัสซึ่งต้องการขอบเขตเวลาที่เข้มงวดหรือมีหลายเธรดที่ทำงานอยู่ RTOS อาจ overkill

มีหลายวิธีในการจัดเวลาบนไมโครคอนโทรลเลอร์ขึ้นอยู่กับสิ่งที่สำคัญที่สุด:

  1. อัตราเฟรมคงที่: สำหรับ PIC ที่ใช้คอนโทรลเลอร์เซอร์โวซึ่งต้องทำงานที่ 1000Hz เช่น หากอัลกอริทึม PID ใช้เวลาดำเนินการน้อยกว่า 1 มิลลิวินาทีคุณสามารถใช้ส่วนที่เหลือของมิลลิวินาทีเพื่อทำงานอื่น ๆ เช่นตรวจสอบ CAN บัสอ่านเซ็นเซอร์ ฯลฯ

  2. การขัดจังหวะทั้งหมด: ทุกสิ่งที่เกิดขึ้นใน PIC จะถูกทริกเกอร์โดยการขัดจังหวะ การขัดจังหวะสามารถจัดลำดับความสำคัญได้ตามความสำคัญของเหตุการณ์

  3. ติดไว้ในลูปและทำทุกอย่างให้เร็วที่สุด คุณอาจพบว่าสิ่งนี้ให้ขอบเขตเวลาที่เหมาะสม


ฉันเข้าใจวิธีการอื่น แต่ต้องการขยายไปยัง RTOS ฉันจะทำงานหลายอย่างและมีระบบเรียลไทม์ยาก แต่ฉันยินดีที่จะเริ่มโดยไม่ต้องใช้เวลาจริงยาก ขอบคุณที่สละเวลาตอบ แต่ฉันต้องการเรียนรู้ RTOS เพื่อที่ฉันจะได้ใช้มันในสถานการณ์ที่มีความต้องการสูง
Kortuk
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.