الدرس ٦٤ : RTOS P1 – Introduction to RTOS and Execution Threads

محتوى الفيديو

00:19 - Objectives, Prerequisites and References
02:27 - Why using RTOS?
06:07 - Consider before Using RTOS
07:57 - busy-wait VS thread scheduler
11:35 - Parallel and Concurrent programming
13:03 - Foreground and background Systems
15:23 - Execution Thread
23:35 - Thread Control Block (TCB)
24:50 - Thread states
27:19 - Create Thread API
33:00 - Thread Lists
34:20 - Thread Linked List
45:24 - Linked List Operations
49:03 - ARM CM4 OS Support Features
52:20 - Using Shadowed stack pointer
54:05 - SVC (Supervisor Call) exception
59:45 - PendSV (Pendable Service Call) exception
01:02:53 - Using PendSV for Context Switch
01:04:40 - Using PendSV to partition an interrupt

إعجاب واحد (1)

السلام عليكم يا بشمهندس يا رب تكون بخير
كان عندي كام سؤال بخصوص الimplementation of RTOS
1.هل اننا نحول ال stack و memory mangment لل dynamic memory allocation هل ده صح ولا غلط … انا عارف ان مشكلة من مشاكل ال heap ان ممكن الcompiler يتجاهل ال malloc في حالات و ممكن يحصل memory fragmentation لكن هل بيتم استخدمها في السوق اكتر وليه

٢. تعامل الrtos مع ال interrupts ازاي مع العلم اني قرأت ان المفروض ال isr ميعملش اي حاجة تسبب context switching جوا ال isr فكدا ال interrupt based components حتشتغل ازاي من غير ما نلجأ للpooling (في تصوري ان ممكن يكون ليهم نوع من انواع ال waiting list و لما الisr يجيي يودي الtask ل ready بس انا حاسس ان ده memory كتير ضايعة عشان لكل interrupt يكون ليه list فهل ده صح ؟)

٣. ما شاء الله يا بشمهندس الRTOS EXAMPLE بتاع حضرتك كان وافي و مغطي اهم حاجات في RTOS و فرق معايا كتير … لكن دلوقتي لو حبيت اعمل عليه extention فايه اللي ممكن اضيفه ليه و يخليه متكامل اكتر .

شكرا جدا لحضرتك و جزاك الله عنا كل خير

إعجاب واحد (1)

وعليكم السلام ورحمة الله وبركاته

هو طبعا استخدام ال dynamic memory allocation من حيث المبدأ يعتبر فعلا جدا باستخدام الميمورى فمثلا انك تعمل allocation لما تكون محتاج ميمورى وتعمل free بعد ما تخلص بدل ما تحجز ميمورى طول مده ال run time. بس المشكلة في ال C و malloc مشاكلها لو هتستخدم C++ هتلاقي الموضوع احسن ومشاكله اقل وخصوصا انه في تطوير مستمر وحاجات جديدة زى ال smart pointer طبعا لو هتعمل RTOS بال C يبقى مفيش مانع انك تدى المستخدم حرية الاختيار او انه ممكن يعمل implementaion خاصة بيه لل malloc ودا اللي غالبا اللي الشركات بتعمله لو هتستخدم freeRTOS اما بالنسبة لل safety critical طبعا ممنوع استخدام dynamic memory allocation

هو ممكن يحصل اى حاجة تطلب او تسبب context switching بس مش هيحصل الا بعد الخروج من ال ISR، ودى حاجة اتكلمت عنها في الفيديوهات اننا بنخلى ال context switching بيكون عن طريق PendSV وبنديلة اقل priority علشان نضمن انه عمره في يتنفذ داخل اى ISR وفى حالة ان حد بيطلب context switching ممكن بكل بساطة يعمل PendSV pending state مثلا

  /* Check the need for context switch when scheduler is running
   * and this thread is the higher priority than the running thread */
  if((NULL != pRunningThread)
      && (pThread->priority < pRunningThread->priority))
  {
    /* Trigger context switch, set PendSV to pending */
    SCB->ICSR |= SCB_ICSR_PENDSVSET_Msk;
  }
  else
  {
    /* Context switch is not required */
  }

ففي الحالة دى مش هيكون في اى مشكلة لو تاسك معين عمل release ل resource كان تاسك تانى له اولوية اعلى محتاجه وبناء عليه هيحصل Context switch

اتكلمت عليه في الفيديو
59:45 - PendSV (Pendable Service Call) exception

طبعا في حالة ال RTOS هتكون عايز تعزل ال tasks عن ال interrupts وانهم يعمل configuration لل priority ففي الحالة دى ممكن ال RTOS يوفر لل interface معينه مثلا التاسك يوفر function معينة لل RTOS ويتعملها call في حالة حدوث ال interrupt وهكذا

سعيد جدا انك قدرت تستفاد من المثال وطبعا المثال والكود عموما بعرض تعليميى يعنى جودته مش عالية، ولو حابب تحسن فيه ممكن تضيف جزء ال dynamic memory allocation

إعجاب واحد (1)