اطلاعیه

Collapse
No announcement yet.

اطلاع یافتن برنامه کامپیوتری از وجود دیتای جدید در پورت سریال به روش اینتراپت

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

    اطلاع یافتن برنامه کامپیوتری از وجود دیتای جدید در پورت سریال به روش اینتراپت

    سلام
    در ارتباط سریال یه روش برای اینکه برنامه ی کامپیوتری متوجه شه که در بافر سریال اطلاعات جدید وجود داره اینه که دائما پورت سریال رو چک کنیم (روش سرکشی). آیا روشی وجود داره که برنامه ی کامپیوتری از طریق یک اینتراپت متوجه شه که در بافر پورت سریال اطلاعات جدید وجود داره و اونوقت بره اطلاعات رو بر داره؟

    مرسی

    #2
    پاسخ : اطلاع یافتن برنامه کامپیوتری از وجود دیتای جدید در پورت سریال به روش اینتراپت

    سلام

    http://www.eca.ir/forum2/index.php?topic=39919.0 :nerd:

    دیدگاه


      #3
      پاسخ : اطلاع یافتن برنامه کامپیوتری از وجود دیتای جدید در پورت سریال به روش اینتراپت

      موضوع یخده گیجه!
      اگر مسئله در هنگام دریافت اطلاعات از "پورت سریال" باشه خوب اینتراپت اینکارو میکنه. و این روش چه در dos و چه در Windows و در بقیه os ها جواب میده. ولی اگر منظور وقفه در اجرای برنامه ای در هنگام وجود اطلاعات در سریال پورت باشه باید گفت در سیستم عاملهایی مانند Windows و Linux با استفاده از Multitasking و Multithreading موضوع حل میشه چون اینتراپتها تحت اختیار os هستن. ولی تحت محیطهای عملیاتی ساده ای مانند dos یا میکروهای مرسوم نوشتن روتین وقفه براحتی امکانپذیره.
      خلاصه اینکه باید دقیقا مشکل و سیستم مورد استفاده و سخت افزار مشخص باشه تا بشه جواب بدردبخوری داد.

      دیدگاه


        #4
        پاسخ : اطلاع یافتن برنامه کامپیوتری از وجود دیتای جدید در پورت سریال به روش اینتراپت

        تصور کنید که قراره یه میکرو یک کاراکتر رو به پورت سریال بفرسته و یه برنامه ی کامپیوتری که مثلا با دلفی نوشته شده این کاراکتر رو از بافر ورودی پورت سریال برداشته و منتظر کاراکتر بعدی بشه. خوب برنامه ی کامپیوتری باید مدام پورت سریال رو چک کنه که آیا کاراکتر جدید روش قرار گرفته یا نه. مثلا فرض کنید اگه اطلاعات جدید هنوز نیومده و بافر خالیه، آنگاه buffer=-1 و اگر در بافر اطلاعات جدید وجود داره buffer<>-1
        پس در اینصورت باید داشته باشیم:
        repeat i:=buffer
        until i<>-1
        // i= new char

        یعنی مدام بافر رو چک کن تا اینکه کاراکتر جدید در پورت سریال بیادش. که البته اگه توجه کرده باشید CPU usage بشدت زیاد میشه.
        روش دیگه اینه که وقتی کاراکتر جدید از طرف میکرو روی پورت سریال اومد، یه اینتراپت ایجاد شه که از طریق اون اینتراپت برنامه ی کامپیوتری متوجه حضور کاراکتر جدید روی بافر پورت سریال بشه و فقط یک بار جهت برداشتن اون کاراکتر اقدام کنه.
        برنامه هایی مثل Hyper Terminal مسلما از همین روش استفاده میکنند.
        البته شاید روش های دیگه ای هم وجود داشته باشه که من ازشون اطلاعی نداشته باشم.
        از نظراتتون واقعا ممنونم ...

        دیدگاه


          #5
          پاسخ : اطلاع یافتن برنامه کامپیوتری از وجود دیتای جدید در پورت سریال به روش اینتراپت

          خوب پس مشخص شد شما میخوای تحت windows کار کنی. در این سیستم از وقفه برای تبادل اطلاعات در حد درایور استفاده میشه. ولی در برنامه یا باید از این روش مرسوم سرکشی استفاده بشه (همزمان) یا با استفاده از عملیات همپوشانی (غیر همزمان). ولی بهتره که یک thread برای اینکار تخصیص داده بشه. ایضا کد شما نبایستی با استفاده از مکانیسمی که مدام تعداد کاراکترهای موجود در بافر ورودی رو چک میکنه نوشته بشه چون وقت سیستم رو تلف میکنه. بایستی درخواست خواندن بکنه (حداقل با تایم اوت) تا در طی این زمان سیستم به کارهای دیگه اش هم برسه.

          میتونین برای امتحان به مطلع Overlapped IO در MSDN یک سری بزنین.

          دیدگاه

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