اطلاعیه

Collapse
No announcement yet.

چظور می شه چند قسمت برنامه رو همزمان اجرا کرد؟؟؟

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    چظور می شه چند قسمت برنامه رو همزمان اجرا کرد؟؟؟

    من می خوام برنامه ای بنویسم که تو اون برنامه چند قسمت همراه هم اجرا بشن و دستورات رو انجام بدن.
    مثلا خیلی از برنامه ها رو دیدیم که همزمان ساعت ، و دما و شاید خیلی چیزهای دیگه رو انجام می دن. و یه چیز دیگه با وجود اینکه AVR از بالا دستورات رو اجرا می کنه و به ترتیب پایین میاد ، چگونه این امکان وجود داره؟
    کنکوری 90 دیروز،آ‌دانشجو مهندسی نرم افزار پلی تکنیک امروز!

    #2
    پاسخ : چظور می شه چند قسمت برنامه رو همزمان اجرا کرد؟؟؟

    چند تا راه وجود داره

    یکی اینکه خودتون یه الگوریتمی دربیارین که چند تا کار با هم انجام بشه
    مثلا یه تایمر رو طوری تنظیم کنید که توی فواصل زمانی مشخص سرریز بشه و وقفه بده و هر سری که وقفش اومد یه کار از اون چند تا کار بسته به اولویت اجرا بشن .

    راه دوم که اصولی تر اما مشکل تره اینه که از یه کرنل که مولتی تسکینگ رو پشتیبانی کنه برای اینکار استفاده کنید.
    مثل uClinux یا uC/OS یا کرنل های موجود دیگه

    البته uC/OS برای AVR پورت شده ولی uCLinux فکر نکنم .

    البته به این معنی نیست که دقیقا کارها با هم اجرا میشن
    اونا زمان بندی میشن و در هر لحظه یکی از اونا در حال اجرا هست

    البته برای کارهای کوچیکی مثل نشون دادن ساعت و دما با همدیگه زیاد به صرفه نیست که از یه کرنل استفاده بشه
    و همونجوری ابتکاری الگوریتم برنامه دربیاد بهتره :agree:
    چگونه هوشمندانه بپرسیم

    دیدگاه


      #3
      پاسخ : چظور می شه چند قسمت برنامه رو همزمان اجرا کرد؟؟؟

      با سلام

      دوست عزیز می تونی با تکنیک مولتی تسک انگ این کار رو بکنی اگه وین اور بلئی سایت زیر برنامه کامل مولتی رو داره

      www.barello.net/avrx/
      برای تشکر از امتیاز + استفاده کنید

      دیدگاه


        #4
        پاسخ : چظور می شه چند قسمت برنامه رو همزمان اجرا کرد؟؟؟

        با توجه به اینکه فکر می کنم با بسکام کار می کنی ساده ترین راه استفاده از وقفه هاست. برای اینکه میشه یه جور وقفه سیکلی ایجاد کرد تا تو هر بار وقفه کارهای لازم رو انجام بده.

        دیدگاه


          #5
          پاسخ : چظور می شه چند قسمت برنامه رو همزمان اجرا کرد؟؟؟

          به نظر من این کار شدنی نیست که در یک لحظه بشه 2 کار رو انجام داد..

          چون این کار با سرعت خیلی بالا داره انجام میشه به نظر میاد ...
          www.icesi.ir

          دیدگاه


            #6
            پاسخ : چظور می شه چند قسمت برنامه رو همزمان اجرا کرد؟؟؟

            نوشته اصلی توسط میلاد موسوی
            به نظر من این کار شدنی نیست که در یک لحظه بشه 2 کار رو انجام داد..

            چون این کار با سرعت خیلی بالا داره انجام میشه به نظر میاد ...
            با سلام
            چرا این امکان داره. در سیستم های تک پردازنده ای کار ها یا پروسه ها بین هم(inter leave) طوری اجرا می شن که انگار دارن هم زمان پیش میرن.
            ولی در سیستم های چند پردازنده ای عملا این کار انجام میشه و پروسه ها با هم همپوشانی(overlapping ) دارند.و روی هر پردازنده یک پروسه اجرا میشه.

            دیدگاه


              #7
              پاسخ : چظور می شه چند قسمت برنامه رو همزمان اجرا کرد؟؟؟

              ببینید من با نظر آقای موسوی موافقم. اینها همگی پشت سرهم هستن و چون با سرعت بالایی دارن انجام می شن ، به نظر میاد همزمان هستن.
              برنامه ی یک ساعت و دما رو اگه ممکنه بذارید. روش بحث بشه.
              کنکوری 90 دیروز،آ‌دانشجو مهندسی نرم افزار پلی تکنیک امروز!

              دیدگاه


                #8
                پاسخ : چظور می شه چند قسمت برنامه رو همزمان اجرا کرد؟؟؟

                شما هیچ وقت با AVR نمی تونید چند کار با هم انجام بدید. این کار یعنی پردازش موازی اطلاعات و برای انجام اون مجبورید از آی سی های عصبی استفاده کنید. البته با FPGA ها هم می شه تا حدی این کار ها را انجام داد ولی با AVR نمی تونید...

                البته همون طور که دوستان گفتند برای کارهای کوچیکی مثل ساعت و دما و این ها می تونید با کمی چشم پوشی از خطای زمانی ، با استفاده از وقفه از AVR جواب بگیرید. در AVR ها برنامه به صورت سریال و خط به خط اجرا می شه....
                از چارلی چاپلین پرسیدند خوشبخنی چیست ؟
                گفت : فاصله این بد بختی تا بد بختی دیگر !

                دیدگاه


                  #9
                  پاسخ : چظور می شه چند قسمت برنامه رو همزمان اجرا کرد؟؟؟

                  سوال رو با کلی سوال دیگه جواب میدین.

                  خوب یک تابع بنویسید تا در عمل ببینیم.
                  آخر بودن تنهائیست و پایان تنهایی ، خداست.

                  دیدگاه


                    #10
                    پاسخ : چظور می شه چند قسمت برنامه رو همزمان اجرا کرد؟؟؟

                    نوشته اصلی توسط solrobot
                    سوال رو با کلی سوال دیگه جواب میدین.

                    خوب یک تابع بنویسید تا در عمل ببینیم.
                    شما یه نگاه به تاریخ تاپیک میکردی!!!
                    سیستم های مولتی تسکینگ خیلی بیشتر از یه تابع هستند و برای فهمشون باید با ساختار هسته و دستورات اسمبلی آشنا باشید ولی در آخر همشون یه همچین چیزی میبینید:
                    create_task(&f1,f1,priority high)
                    create_task(&f2,f2,priority high)
                    start_schedule() ;
                    که ممکنه آرگومان ها یا اسم توابع با هم تفاوت داشته باشه.توی این سیستم دوتا تابع f1و f2 با هم اجرا میشند.
                    این تابع ها رو هر جور بنویسید باهم اجرا میشند.
                    اگه تازه کارید زیاد در مورد اینا کنجکاوی نکنید چون تموم دانسته هاتون رو به هم میریزه.
                    برای سوالی که اینجا مطرح بود گزینه ی بهتر ماشین وضعیته نه سیستم مولتی تسکینگ.مولتی تسکینگ برای کارهای پیچیده هست.
                    [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

                    دیدگاه


                      #11
                      پاسخ : چظور می شه چند قسمت برنامه رو همزمان اجرا کرد؟؟؟

                      البته جناب آقای بهاری درست میگن اما برای کسی که میخواد سریع و راحت جواب بگیره یک محیط multitask بنظر خیلی راحتتر میاد. اما خوب البته هر کدوم محسنات خودشون رو دارن.

                      دیدگاه


                        #12
                        پاسخ : چظور می شه چند قسمت برنامه رو همزمان اجرا کرد؟؟؟

                        شما می گین تاپیک قدیمیه ، خوب باشه ، مهم جوابیه که به سوال داده شده.
                        بله من تازه کارم. توقع دارم که یجوری دوستان جواب بدن که هرکی به این تاپیک سر می زنه یه چیزی دست گیرش بشه. اگه قرار بود هرکی هر علمی که داره برخ دیگران بکشه که دنیا اینقدر پیشرفت نمی کرد. من نرفتم چند تا تاپیک با عنوان این تاپیک بزنم. اومدم همینجا بحث کنم.

                        سوال من:

                        شما یک برنامه دارین بطور مثال تابلوی روان. حالا می خواین با همین برنامه (بسکام) که در حال اجرا هستش میکرو بطور همزمان چند برنامه دیگه هم پردازش کنه.اگر با وقفه ها به هر قسمت برنامه پرداخته بشه این کار به راحتی صورت میگیره . مثلا در میکرو ثانیه برنامه تابلو روان ، میکرو ثانیه بعدی استپر موتور ، میکرو ثانیه بعدی چک کردن وضعیت پین های ورودی میکرو. فرض هم بگیرین از یک atmega 8 داریم استفاده می کنیم. حالا ساختار این برنامه چه شکلیه؟ جایگاه وقفه ها کجاست؟
                        آخر بودن تنهائیست و پایان تنهایی ، خداست.

                        دیدگاه


                          #13
                          پاسخ : چظور می شه چند قسمت برنامه رو همزمان اجرا کرد؟؟؟

                          شما می گین تاپیک قدیمیه ، خوب باشه ، مهم جوابیه که به سوال داده شده.
                          منظور از اینکه تاپیک قدیمیه این که شما منتظر جواب از طرف دوستانی که قبلا پاسخ دادند نباشید. چون ممکنه یه عده از دوستان دیگه به این شکل فعالیت نداشته باشند.
                          بله من تازه کارم. توقع دارم که یجوری دوستان جواب بدن که هرکی به این تاپیک سر می زنه یه چیزی دست گیرش بشه. اگه قرار بود هرکی هر علمی که داره برخ دیگران بکشه که دنیا اینقدر پیشرفت نمی کرد. من نرفتم چند تا تاپیک با عنوان این تاپیک بزنم. اومدم همینجا بحث کنم.[
                          خوب توقع شما یه مقدار غیر معموله!!! چه طور ممکنه شخصی که فعلا داره خود میکرو رو یاد میگیره با خوندن چند تا پست همه چیز رو در مورد مولتی تسکینگ متوجه بشه؟ برای درک اینکه چطور وظایف مختلف روی CPUقرار میگیرند باید یه مقدار با ریجستر های پردازنده آشنا باشید. باز با این حال من یه توضیح خیلی خلاصه در این باره میدم.
                          برای انجام این کار ما به یه تایمر نیاز داریم تا بتونیم زمان تعویض وظایف رو به اطلاع پردازنده برسونیم. توی روتین وقفه ی تایمر باید یه سری ریجستر ها مثل ریجستر وضعیتSREG -ریجستر اشاره گر استکSP- خود استک و چند تا ریجستر دیگه(این ریجستر ها بستگی به نوع برنامه نویسی و-کامپایلر و پردازنده داره) رو در رم ذخیره کنیم و ریجستر های مربوط به وظیفه ی جدید رو توی رجیستر های پردازنده بنویسیم.بعد از خروج از روتین وقفه پردازنده ادامه ی وظیفه ی جدید رو انجام میده. خیلی نکات و جزییات دیگه ای برای این کار هست که نمیشه در اینجا مطرح کرد.
                          این ساده ترین تعریفی هست که میشه برای مولتی تسکینگ ارائه داد.
                          [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

                          دیدگاه


                            #14
                            پاسخ : چظور می شه چند قسمت برنامه رو همزمان اجرا کرد؟؟؟

                            آقا (یا خانم) محترم. بزرگترین مشکلی که برای شما پیش اومده اینه که تحلیل درستی از مشکلتون ارائه نکردین و این عدم تحلیل دقیق درست داره شما رو به بیراهه میکشونه. شما هیچ وقت نمیتونین در حالت کلی حتی در سیستم های چند پروسسوری در یک کوانتوم زمانی چند "کار" رو با هم انجام بدین. چرا؟ به چندین و چند دلیل. یکیش اینکه اصلا لفظ "کار" اینجا تعریف نشده. کار یعنی اجرای یک دستورالعمل؟ یا بقول خودتون "در میکرو ثانیه برنامه تابلو روان ، میکرو ثانیه بعدی استپر موتور ، میکرو ثانیه بعدی چک کردن وضعیت پین های ورودی میکرو" همین جا هم شما چند پردازش رو به عنوان کار مطرح کردین. (البته که این علت نشد. یکی از علل مهم در این ماشینها حتی ماشینهای SMP یا symmetrical multi-processor اینه که پروسسورها به منابع مشترکی دسترسی دارن که باز چون منابع مشترک هستن در نانو ثانیه هایی محتاج به هماهنگی زمانی برای دسترسی هستن و این خودش یعنی عدم اجرای "همزمان" همه "کار"ها.)

                            حالا بیاین یه جور دیگه بررسی کنین. کدی که شما مینویسین عمدتا به دو قسمت اساسی تفکیک میشه. یک سری قسمت ها دقیقا میکرو یا سیستم تون کاری برای انجام دادن داره. و در بعضی مواقع صبر میکنین. در این موارد هر وقت با توابعی مثل wait یا delay کار کنین بدونین که دارین وقت میکرو و خودتون رو حروم میکنین. از طرف دیگه هر عملی بایستی اینجوری تعبیر بشه که اگر این عمل در طی فلان میزان زمان انجام شد برای من قابل قبول هست یا نه؟ این زمانها که کنار هم چیده بشه مشخص میکنه که شما به چه سیستم نرم افزاری و سخت افزاری برای همزمانی احتیاج دارین. آیا باید یک هسته چند وظیفه گی multitask استفاده کرد یا به صورت وقفه ای کار کرد یا میشه با ماشین وضعیت کارو پیش برد؟ یا ترکیبی از همه اینها؟

                            مثلا شما اگه بخوایین با استپر کار کنین معمولا استپر های موجود در بازار با یک فرکانسی در حد یک تا 1.5 کیلو هرتز سریعتر کار نمیکنن. خوب میشه این استپ دادن رو در یک وقفه زمانی 1 میلی ثانیه انجام داد. برای راحتی کد اصلی هم حتی میشه یک مکانیسم کمکی در نظر گرفت که بهش بگیم به چه جهتی و چند تا و اون در وقفه مورد نطر کارش رو انجام میده.

                            از طرف دیگه یکسری کارها مثل پردازش اطلاعات برای ساختن فریم جدید برای ارسال روی تابلو روان رو میشه در لوپ اصلی برنامه انجام داد. این پردازش اگر وقفه هم بخوره خیلی مهم نیست. نهایتا میفهمین که میکروی کندی استفاده کردین و مشکل رو باید جور دیگه ای حل کنین. مثلا باید از double buffering استفاده بشه.....

                            اینا همش تکنیکه و قبل از من و شما هم خیلی ها به همین مشکلات برخوردن و حل شده. نکته مهم فقط تحلیل درست و حسابی مشکل و انتخاب درست تکنیک های مورد استفاده برای حل اونه.
                            (دیگه خودمم قاطی کردم)

                            دیدگاه


                              #15
                              پاسخ : چظور می شه چند قسمت برنامه رو همزمان اجرا کرد؟؟؟

                              ممنون از پاسختون.

                              خوب من متوجه این مطلب شدم که یه مقدار باید ریشه ای تر مطالعه کرد. :read:
                              به همین دلیل حر فها مو تیکه تیکه توضیح می دم. ریز ریز.
                              از مهندسین کسی هست Interrupts رو توضیح بده؟
                              این جوری فکر کنم راحت تر میشه پیش رفت.
                              آخر بودن تنهائیست و پایان تنهایی ، خداست.

                              دیدگاه

                              لطفا صبر کنید...
                              X