اطلاعیه

Collapse
No announcement yet.

مشکل هنگ بعد از چند بار دریافت 300 تا 800 بایت ازuart0 و ارسال به uart1 در ATmega 128

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

    مشکل هنگ بعد از چند بار دریافت 300 تا 800 بایت ازuart0 و ارسال به uart1 در ATmega 128

    دوستان خسته نباشید.
    یه پروژه سنگین رو انجام دادم فقط مونده آخرین قسمتش و واقعا توش موندم و خسته شدم. پروژه با بسکام نوشنه شده.
    این قسمت پروژه یک مدار هستش که از مگا 128 و ESP8266 تشکیل شده که با uart1 به ماژول وای فای وصله و با Uart1 از طریق MAX232 به یه پرینتر حرارتی سامسونگ سریال.
    این مدار به یک نرم افزار به عنوان کلاینت وصل میشه و تو شرایطی دیتای پرینت برای مدار ارسال میشه که میتونه 300 تا 800 بایت باشه. خوب من با فرستادن کلمه پرینت و مکث 30 میلی ثانیه ای دیتای پرینت رو هم میفرستم. سمت میکرو بعد دریافت کلمه پرینت یک منغییر رو یک میکنم و به قسمت دریافت دیتا میرم. با شرط هایی دیتای کدهای اول AT Command ماژول رو نادیده میگیرم و بعد بایت به بایت با تاخیر 800 میکرو ثانیه بایت دریافتی رو به Uart0 ارسال میکنم.
    اما مشکل اینجاست با وجود کارکرد مناسب بعد چندین بار دریافت دیتای پرینتر میکرو میره واسه خودش! HWstack و SWstack و frame size هم تغییر دادم و حتی تا 1024 هم بردم ولی فقط تعدا بیشتری چاپ میده و بعد هنگ مینه. باودریت های مختلف رو هم تست کردم برای اتصال به وای فای ولی باز با کمی تغییر مشکل پا برجاست.
    [FONT=Yekan]Stream:[/FONT] Do
    [FONT=Yekan] If Ischarwaiting(#2) = 1 Then[/FONT]


    Do
    A = Inkey(#2)


    If Stream_data = 0 Then
    Mystr = Mystr + Chr(a)
    Waitms 2
    Else
    Waitus 800
    If A = &H1B Then 9charfix = 1
    If 9charfix = 1 Then Printbin #1 , A




    If Ischarwaiting(#2) = 0 Then

    Stream_data = 0
    9charfix = 0
    Clear Serialin1


    End If
    End If
    Loop Until Ischarwaiting(#2) = 0
    '---------------------------------------
    If Instr(mystr , "Print") <> 0 Then
    [FONT=Yekan] Stream_data = 1[/FONT]
    [FONT=Yekan] Goto Stream[/FONT]

    End If


    این قسمتی از کد هستش. حتی بافر سریال رو هم خالی میکنم باز فرقی نداره حتی خط ارسال به uart0 رو هم بر میدارم باز هنگ میکنه. توی چرخه دریافت کاری باید بکنم؟
    جدیدترین ویرایش توسط mshadanpoor; ۱۶:۳۵ ۱۳۹۶/۰۸/۲۰.

    #2
    پاسخ : مشکل هنگ بعد از چند بار دریافت 300 تا 800 بایت ازuart0 و ارسال به uart1 در ATmega 128

    سلام
    مقدار بافر دریافت رو چند بایت قرار دادین؟

    دیدگاه


      #3
      پاسخ : مشکل هنگ بعد از چند بار دریافت 300 تا 800 بایت ازuart0 و ارسال به uart1 در ATmega 128

      نوشته اصلی توسط M3R-E نمایش پست ها
      سلام
      مقدار بافر دریافت رو چند بایت قرار دادین؟
      نهایتش یعنی 254

      دیدگاه


        #4
        پاسخ : مشکل هنگ بعد از چند بار دریافت 300 تا 800 بایت ازuart0 و ارسال به uart1 در ATmega 128

        نوشته اصلی توسط mshadanpoor نمایش پست ها
        نهایتش یعنی 254
        امکانش هست که دیتای ارسالی رو به چند قسمت مثلا 200 بایتی تقسیم کنید و ارسال کنید؟
        متغیر mystr چند بایتی هست؟ 800 بایت؟

        دیدگاه


          #5
          پاسخ : مشکل هنگ بعد از چند بار دریافت 300 تا 800 بایت ازuart0 و ارسال به uart1 در ATmega 128

          نوشته اصلی توسط M3R-E نمایش پست ها
          امکانش هست که دیتای ارسالی رو به چند قسمت مثلا 200 بایتی تقسیم کنید و ارسال کنید؟
          متغیر mystr چند بایتی هست؟ 800 بایت؟
          با سلام عرض معذرت بخاطر مطرح کردن سوال و دیر پاسخ دادن به راهنمایی دوست عزیزمون.
          متغیر mystr متغیری هست که بایت های بافر تا وقتی که مال پرینت نباشن توش ذخیره و بعد آنالیز و پاسخ داده میشن که برای ارتباط با ماژول وای فای و نرم افزار سرور هست. که عالی هم کار میکنن.
          راستش این چند قسمت کردن رو انجام دادم ولی فرقی نداشت! البته اوضاع بدتر هم شد چون برای هر قسمت کدهای AT Command هم اضافه میشد و حذف اونها هم چند خط کد اضافه میکرد و دیگه هگز اول هر پارت هم دیگه یونیک نبود که این کد ها رو اضافه میکرد. در ضمن وقتی حتی تا 15 بار همه چیز درست عمل میکرد فکر کردم ایراد جای دیگه باشه. جالبه بعد دریافت هر پارت بافر رو هم پاک میکردم ولی .....
          در نهایت در قسمتی که چک میکنم که استرینگ پرینت اومده یا نه در صورت درست بودن شرط یه لوپ نوشتم که بعد پاک کردن بافر تا در بافر بایتی وجود نداشته باشه تو لوپ صبر کنه بعد بره به محل خوندن دیتای پرینت. دلیلش هم این بود که با مانیتور کردن دیتای ورودی ماژول دیدم گاها تا 1ثانیه دیتا با تاخیر دریافت میشد و همه چیز به هم میریخت. درضمن یه تاخیر 30ms بین ارسال استرینگ پرینت و دیتای پرینت توسط سرور گذاشته بودم که با افزایشش به 70اوضاع به طرز شگفت انگیزی بهتر شد.
          با تمام این اوصاف به 600پرینت هم رسیدم ولی باز گهگاه هنگ رو دارم.
          اگر چیزی به ذهنتون میرسه ممنون میشم راهنماییم کنید.

          دیدگاه

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