NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 3776 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 6 از 6

موضوع: انتظار برای آزاد شدن بافر سریال در rtx

  1. #1
    تازه وارد
    تاریخ عضویت
    Apr 2012
    نام
    محمد جواد بابایی
    نوشته ها
    3
    تشکر
    7
    تشکر شده 0 بار در 0 پست

    پیش فرض انتظار برای آزاد شدن بافر سریال در rtx

    سلام
    من در روش برنامه نویسی معمولی (بدون سیستم عامل) مثلا وقتی می خوام یک آرایه 30 بایتی رو به پورت سریال ارسال کنم اینطوری می نویسم:
    کد:
    void sendchar0(char c)
    {
        while (!(LPC_UART0->LSR & 0x20));
      LPC_UART0->THR = c;
    }
    
    
    for(i=0;i<30;i++)
      sendchar0(buffer[i]);
    حالا فرض کنید من می خوام برنامم رو با RTX بنویسم و این کار رو داخل یک تسک انجام بدم
    همونطور که می دونید ارسال شدن اطلاعات از پورت سریال بسته به Baud Rate، زمان مشخصی مصرف می کنه و میکرو مقدار زیادی از وقتش در
    کد:
    while (!(LPC_UART0->LSR & 0x20));
    تلف میشه
    می خوام بپرسم به نظر شما بهترین روشی که می شه اشغال بودن پریفرال توسط این تسک، یا تسک دیگه رو تشخیص داد و به کارهای دیگه رسید چیه؟
    ممنون

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نام
    Advertising world
    نوشته ها
    Many
     

  3. #2
    مدیر انجمن mzarkoob آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    مهدی زرکوب
    نوشته ها
    2,902
    تشکر
    1,202
    تشکر شده 2,317 بار در 1,273 پست

    پیش فرض

    سلام
    برای ارسال از سریال میکرو گیر می کنه در این حلقه while که فرمودید
    همان طور که برای دریافت که گیر نکنه از وقفه دریافت استفاده می کنید و اونو فعال می کنید برای ارسال هم می توان وقفه ارسال را فعال کرد
    بنابراین در برنامه شما یه متنی را باید بریزید در سریال و دیگه خودش تا کاراکتری را فرستاد وقفه میده و شما باید کاراکتر بعدی را بذارید ارسال بشه و در این مدت میکرو کارای دیگه را میکنه
    اگر تعداد کاراکترهای ارسالی زیاد باشه هی میکرو میره تو وقفه. در اینجا می توانید از DMA استفاده کنید

  4. کاربران : 3 تشکر کرده اند از شما mzarkoob برای ارسال این پست سودمند:


  5. #3
    تازه وارد
    تاریخ عضویت
    Apr 2012
    نام
    محمد جواد بابایی
    نوشته ها
    3
    تشکر
    7
    تشکر شده 0 بار در 0 پست

    پیش فرض

    ممنون از راهنمایی شما
    این DMA رو که به نظر میرسه باید بزودی تو برنامه بزارم. شما اگر مرجع مناسب و روان برای این موضوع سراغ داشتی با ما به اشتراک بزاری چند برابر ممنون میشیم
    حالا یک سوال دیگه برای من بوجود اومده و اون اینکه مثلا من می خوام یک جمله 30 کاراکتری رو در یک تسک از طریق پورت سریال ارسال کنم. بعد از ارسال 14 بایت بافر پر میشه و من به طریقی به سراغ تسک دیگه ای میرم که اتفاقا اونجا هم قراره اطلاعاتی به همون پورت سریال ارسال بشه
    اینجا برای عدم تداخل چه کارهایی میشه کرد؟
    مثلا در یک تسک می خوایم جمله 12345678 رو ارسال کنیم و در تسک دیگه ای abcdef رو می خوایم ارسال کنیم و وقتی قابلیت سویچ بین تسکها وجود داشته باشه ممکنه اون طرف جمله 123ab4c5def678 دریافت بشه
    تونستم منظورم رو برسونم؟ برای پیشگیری از چنین اتفاقی چه باید کرد؟
    سوال سوم اینکه اگر یک پریفرال توسط تسکی اشغال شده باشه و بعد تسکی فعال بشه که به همون پریفرال نیاز داشته باشه و اولویت بیشتری هم داشته باشه چکار باید کرد
    بازم ممنون

  6. #4
    مدیر انجمن
    تاریخ عضویت
    Dec 2009
    نام
    غلامحسن منصوری
    نوشته ها
    359
    تشکر
    408
    تشکر شده 819 بار در 248 پست

    پیش فرض

    نقل قول نوشته اصلی توسط m2babaey نمایش پست ها
    ممنون از راهنمایی شما
    این DMA رو که به نظر میرسه باید بزودی تو برنامه بزارم. شما اگر مرجع مناسب و روان برای این موضوع سراغ داشتی با ما به اشتراک بزاری چند برابر ممنون میشیم
    حالا یک سوال دیگه برای من بوجود اومده و اون اینکه مثلا من می خوام یک جمله 30 کاراکتری رو در یک تسک از طریق پورت سریال ارسال کنم. بعد از ارسال 14 بایت بافر پر میشه و من به طریقی به سراغ تسک دیگه ای میرم که اتفاقا اونجا هم قراره اطلاعاتی به همون پورت سریال ارسال بشه
    اینجا برای عدم تداخل چه کارهایی میشه کرد؟
    مثلا در یک تسک می خوایم جمله 12345678 رو ارسال کنیم و در تسک دیگه ای abcdef رو می خوایم ارسال کنیم و وقتی قابلیت سویچ بین تسکها وجود داشته باشه ممکنه اون طرف جمله 123ab4c5def678 دریافت بشه
    تونستم منظورم رو برسونم؟ برای پیشگیری از چنین اتفاقی چه باید کرد؟
    سوال سوم اینکه اگر یک پریفرال توسط تسکی اشغال شده باشه و بعد تسکی فعال بشه که به همون پریفرال نیاز داشته باشه و اولویت بیشتری هم داشته باشه چکار باید کرد
    بازم ممنون
    سلام.
    باید از mutex استفاده کنید . اولین تسکی که به uart دسترسی پیدا می کنه mutex رو در اختیار میگیره و بقیه تسکها وقتی می خوان با این پریفرال کار کنند mutex رو درخواست می کنند و به wait میرن. تسکی که mutex رو در اختیار داره پس از اتمام کارش با uart، سریعا mutex رو آزاد می کنه و سپس اولین تسکی که در اولویت بوده و برای mutex به wait رفته بوده mutex رو میگیره و از wait خارج میشه...

    درباره DMA من هم شدیدا دنبالشم اگه موفق شدید خواهشا به ما هم بگین
    ممنونم

  7. کاربران : 2 تشکر کرده اند از شما mansoory برای ارسال این پست سودمند:


  8. #5
    مدیرکل انجمنها agape آواتار ها
    تاریخ عضویت
    Feb 2009
    نام
    Zeus
    نوشته ها
    1,235
    تشکر
    139
    تشکر شده 2,209 بار در 846 پست

    پیش فرض

    فکر میکنم برای این دیوایس سمافور هم بد نباشه ، البته نمیدونم که rtx سمافرو رو پشتیبانی میکنه یا نه

  9. کاربران : 3 تشکر کرده اند از شما agape برای ارسال این پست سودمند:


  10. #6
    مدیر انجمن
    تاریخ عضویت
    Dec 2009
    نام
    غلامحسن منصوری
    نوشته ها
    359
    تشکر
    408
    تشکر شده 819 بار در 248 پست

    پیش فرض

    نقل قول نوشته اصلی توسط agape نمایش پست ها
    فکر میکنم برای این دیوایس سمافور هم بد نباشه ، البته نمیدونم که rtx سمافرو رو پشتیبانی میکنه یا نه
    بله پشتیبانی میکنه. اگه ممکنه یکم بیشتر توضیح بدین که از سمافور چطوری میشه برای uart استفاده کنیم. یعنی امکانش هست که در آن واحد مثلا 4 تا تسک با uart کار کنند؟

  11. تشکرها از این نوشته :


مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •