اطلاعیه

Collapse
No announcement yet.

ارسال آرایه 1600 بایتی توسط UDP

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

    ارسال آرایه 1600 بایتی توسط UDP

    سلام دوستان
    کسی تجربه کار با پروتکل اترنت و مخصوصا udp برای ارسال یک آرایه 1600 بایتی از میکروکنترلر به سرور(رایانه) را دارد؟

    #2
    پاسخ : ارسال آرایه 1600 بایتی توسط UDP

    نوشته اصلی توسط REZZA_DEHGHAN98 نمایش پست ها
    سلام دوستان
    کسی تجربه کار با پروتکل اترنت و مخصوصا udp برای ارسال یک آرایه 1600 بایتی از میکروکنترلر به سرور(رایانه) را دارد؟
    سلام
    مشکلتون باهاش چیه؟

    دیدگاه


      #3
      پاسخ : ارسال آرایه 1600 بایتی توسط UDP

      نوشته اصلی توسط hossein.m98 نمایش پست ها
      سلام
      مشکلتون باهاش چیه؟
      سلام من به تازگی شروع کردم برای کار بر روی این پروژه ....
      من توانسته ام به میکرو کنترلر از طریق udp داده ارسال کنم و یک led روی میکرو را روشن کنم اما در دریافت داده از میکروکنترلر به مشکل خورده ام.
      نمونه کد خاصی یا آموزش خاصی مد نظرتون نیست؟

      دیدگاه


        #4
        پاسخ : ارسال آرایه 1600 بایتی توسط UDP

        نوشته اصلی توسط REZZA_DEHGHAN98 نمایش پست ها
        سلام من به تازگی شروع کردم برای کار بر روی این پروژه ....
        من توانسته ام به میکرو کنترلر از طریق udp داده ارسال کنم و یک led روی میکرو را روشن کنم اما در دریافت داده از میکروکنترلر به مشکل خورده ام.
        نمونه کد خاصی یا آموزش خاصی مد نظرتون نیست؟
        ببینید گام اول برای جواب گرفتن از انجمنی مثل اینجا اینه که دقیقا مشکلتون رو تشریح کنید که پاسخ دهنده بفهمه مشکل کجاس. شما نه گفتید میکروکنترلرتون چیه، نه گفتید از چه قطعات جانبی یا استک شبکه استفاده کردید و نه گفتید با کدوم ابزار بیلد کار میکنید. نتیجتا نه میشه گفت مشکل کجا میتونه باشه، نه میشه راهنمایی کرد. فقط میتونم بگم یه جای کارتون حتما ایراد داره!!!
        اگر اولین بارتون هست که با IP دارید کار میکنید، بهتره قبلش در مورد معماری اینترنت، لایه های اون و این که کدوم پروتکل ها در کدوم لایه ها قرار دارن و کارکردشون چیه (نه لزوما به صورت دقیق)، IP Address چیه و پورت چیه مطالعه کنید، بعد دست به کد بشید. احتمالا سعی دارید یک ارتباط دو طرفه بین کامپیوتر و میکروکنترلر برقرار کنید؛ برای این کار میتونید از نرم*افزار هرکول استفاده کنید برای تست هاتون و ارسال و دریفات پکت های TCP و UDP. البته این نرم*افزار مشکلاتی توی بافر کردن داده های بزرگ داره ولی کار راه اندازه. برای مانیتور کردن شبکه هم از نرم*افزار Wireshark میتونید استفاده کنید که ببینید داده هایی که میکروکنترلر میفرسته اصلا به کامپیوتر شما میرسه و به پورت مورد نظر میره یا نه؛ البته کار کردن با Wireshark خودش تجربه احتیاج داره ولی اونقدرا هم نباید گنگ باشه.

        دیدگاه


          #5
          پاسخ : ارسال آرایه 1600 بایتی توسط UDP

          نوشته اصلی توسط hossein.m98 نمایش پست ها
          ببینید گام اول برای جواب گرفتن از انجمنی مثل اینجا اینه که دقیقا مشکلتون رو تشریح کنید که پاسخ دهنده بفهمه مشکل کجاس. شما نه گفتید میکروکنترلرتون چیه، نه گفتید از چه قطعات جانبی یا استک شبکه استفاده کردید و نه گفتید با کدوم ابزار بیلد کار میکنید. نتیجتا نه میشه گفت مشکل کجا میتونه باشه، نه میشه راهنمایی کرد. فقط میتونم بگم یه جای کارتون حتما ایراد داره!!!
          اگر اولین بارتون هست که با IP دارید کار میکنید، بهتره قبلش در مورد معماری اینترنت، لایه های اون و این که کدوم پروتکل ها در کدوم لایه ها قرار دارن و کارکردشون چیه (نه لزوما به صورت دقیق)، IP Address چیه و پورت چیه مطالعه کنید، بعد دست به کد بشید. احتمالا سعی دارید یک ارتباط دو طرفه بین کامپیوتر و میکروکنترلر برقرار کنید؛ برای این کار میتونید از نرم*افزار هرکول استفاده کنید برای تست هاتون و ارسال و دریفات پکت های TCP و UDP. البته این نرم*افزار مشکلاتی توی بافر کردن داده های بزرگ داره ولی کار راه اندازه. برای مانیتور کردن شبکه هم از نرم*افزار Wireshark میتونید استفاده کنید که ببینید داده هایی که میکروکنترلر میفرسته اصلا به کامپیوتر شما میرسه و به پورت مورد نظر میره یا نه؛ البته کار کردن با Wireshark خودش تجربه احتیاج داره ولی اونقدرا هم نباید گنگ باشه.

          سلام وقتتون بخیر .....حق با شماست و این به خاطر کم تجربگی من در استفاده از این طور انجمن هاست.
          من از میکروکنترلر stm32f767 و آیسی lan8720a و ارتباط udp استفاده میکنم .
          تنظیمات کانفیگ نرم افزار cube mx را به درستی انجام داده ام و توانسته ام یک led روی برد را از طریق ارتباط ethernet و با استفاده از نرم افزار هرکولس ,روشن و خاموش کنم.
          من تا 1319 بایت رو به طور صحیح ارسال کردم
          مشکل من در ارسال آرایه بزرگتر هست مثلا 1600 بایتی
          در ادامه دو قسمت از کد که مربوط به send data و while(1) هست آورده ام. اسم آرایه array هست و تمام درایه های آن با کاراکتر 'A' پر شده است.


          void MY_UdpSendData(void)
          {
          struct pbuf *p;

          while(array[i]=='A')
          {
          i++;
          BufferSize++;
          }

          p = pbuf_alloc(PBUF_TRANSPORT, BufferSize, PBUF_RAM);
          pbuf_take(p, array, sizeof(array[0])*BufferSize);
          udp_send(udp_send_pcb, p);
          pbuf_free(p);

          }
          /// در ادامه

          while (1)
          {
          MX_LWIP_Process();
          cntr++;
          if(cntr > 200000)
          {
          cntr=0;
          MY_UdpSendData();

          }


          }
          جدیدترین ویرایش توسط REZZA_DEHGHAN98; ۱۲:۱۰ ۱۴۰۱/۰۲/۰۶.

          دیدگاه


            #6
            پاسخ : ارسال آرایه 1600 بایتی توسط UDP

            نوشته اصلی توسط REZZA_DEHGHAN98 نمایش پست ها
            سلام وقتتون بخیر .....حق با شماست و این به خاطر کم تجربگی من در استفاده از این طور انجمن هاست.
            من از میکروکنترلر stm32f767 و آیسی lan8720a و ارتباط udp استفاده میکنم .
            تنظیمات کانفیگ نرم افزار cube mx را به درستی انجام داده ام و توانسته ام یک led روی برد را از طریق ارتباط ethernet و با استفاده از نرم افزار هرکولس ,روشن و خاموش کنم.
            من تا 1319 بایت رو به طور صحیح ارسال کردم
            مشکل من در ارسال آرایه بزرگتر هست مثلا 1600 بایتی
            در ادامه دو قسمت از کد که مربوط به send data و while(1) هست آورده ام. اسم آرایه array هست و تمام درایه های آن با کاراکتر 'A' پر شده است.


            void MY_UdpSendData(void)
            {
            struct pbuf *p;

            while(array[i]=='A')
            {
            i++;
            BufferSize++;
            }

            p = pbuf_alloc(PBUF_TRANSPORT, BufferSize, PBUF_RAM);
            pbuf_take(p, array, sizeof(array[0])*BufferSize);
            udp_send(udp_send_pcb, p);
            pbuf_free(p);

            }
            /// در ادامه

            while (1)
            {
            MX_LWIP_Process();
            cntr++;
            if(cntr > 200000)
            {
            cntr=0;
            MY_UdpSendData();

            }


            }
            سلام مجدد
            ببینید این مشکلی که شما دارید و این اعدادی که اعلام کردید خیلی شبیه به کوچک بودن بافرهای لایه پایینی هستش که باعث میشه پکت های بزرگ به پکت های کوچکتری که داخل بافرها جا بشن، تقسیم و بعد ارسال بشن. این موارد عموما با فعال کردن IP fragmentation حل میشن؛ یعنی با استفاده از این قابلیت، پکت های تقسیم شده به طور خودکار توسط استک شبکه شماره گذاری میشن و توی گیرنده، بعد از دریافت به شکل مرتب توسط استک شبکه اسمبل میشن. اگر IP fragmentation فعال نباشه، پکت ها تقسیم میشن، اما به خاطر عدم شماره گذاری مناسب، گیرنده نمیتونه توالی اون ها رو تشخیص بده و در نتیجه نمیتونه سرهمشون کنه.
            توی کانفیگ های پروژه داخل CubeMX بگردید، احتمال داره IP fragmentation رو برای LWIP غیر فعال بوده باشه که باید فعال بشه.

            دیدگاه


              #7
              پاسخ : ارسال آرایه 1600 بایتی توسط UDP

              نوشته اصلی توسط hossein.m98 نمایش پست ها
              سلام مجدد
              ببینید این مشکلی که شما دارید و این اعدادی که اعلام کردید خیلی شبیه به کوچک بودن بافرهای لایه پایینی هستش که باعث میشه پکت های بزرگ به پکت های کوچکتری که داخل بافرها جا بشن، تقسیم و بعد ارسال بشن. این موارد عموما با فعال کردن IP fragmentation حل میشن؛ یعنی با استفاده از این قابلیت، پکت های تقسیم شده به طور خودکار توسط استک شبکه شماره گذاری میشن و توی گیرنده، بعد از دریافت به شکل مرتب توسط استک شبکه اسمبل میشن. اگر IP fragmentation فعال نباشه، پکت ها تقسیم میشن، اما به خاطر عدم شماره گذاری مناسب، گیرنده نمیتونه توالی اون ها رو تشخیص بده و در نتیجه نمیتونه سرهمشون کنه.
              توی کانفیگ های پروژه داخل CubeMX بگردید، احتمال داره IP fragmentation رو برای LWIP غیر فعال بوده باشه که باید فعال بشه.

              ممنون خیلی تشکر از راهنماییتون
              ببخشید من هرچی کانفیگ های مربوط به lwip و ethernet در نرم افزار CubeMX رو جست و جو کردم چیزی به اسم IP fragmentation ندیدم ...میشه بگید کدام قسمتش هست؟

              دیدگاه


                #8
                پاسخ : ارسال آرایه 1600 بایتی توسط UDP

                نوشته اصلی توسط REZZA_DEHGHAN98 نمایش پست ها
                ممنون خیلی تشکر از راهنماییتون
                ببخشید من هرچی کانفیگ های مربوط به lwip و ethernet در نرم افزار CubeMX رو جست و جو کردم چیزی به اسم IP fragmentation ندیدم ...میشه بگید کدام قسمتش هست؟
                یک مقداری کانفیگ کردن استک شبکه مشکله. شاید لازم باشه خیلی باهاش ور برید تا به جواب دلخواه برسید.
                برای فعال کردن این آپشن، باید توی تنظیمات LWIP وارد Key Options بشید و تیک Show Advanced Parameters رو بزنید. حالا باید بگردید دنبال دو گزینه IP_FRAG و IP_REASSEMBLY و فعالشون کنید تا IP fragmentation برای ارسال و دریافت فعال بشه. من زیاد با LWIP روی STM32 درگیر نبودم ولی از یکی از همکارها که تجربه بیشتری دارن، در این مورد پرسیدم، گفتن که اگر توی تنظیمات ETH یا LWIP هم فیلد Checksum Computation دیدید روی Software تنظیمش کنید.
                برای اطمینان از صحت عملکرد IP fragmentation هم میتونید از نرم افزار Wireshark استفاده کنید. کافیه کارت شبکه مورد نظر رو مانتیور و IP میکروکنترلر رو فیلتر کنید که تنها پکت های بین میکروکنترلر و کامپیوتر رو نشون بده. اینطوری میتونید صحت ارتباط رو بررسی کنید.

                دیدگاه


                  #9
                  پاسخ : ارسال آرایه 1600 بایتی توسط UDP

                  نوشته اصلی توسط hossein.m98 نمایش پست ها
                  یک مقداری کانفیگ کردن استک شبکه مشکله. شاید لازم باشه خیلی باهاش ور برید تا به جواب دلخواه برسید.
                  برای فعال کردن این آپشن، باید توی تنظیمات LWIP وارد Key Options بشید و تیک Show Advanced Parameters رو بزنید. حالا باید بگردید دنبال دو گزینه IP_FRAG و IP_REASSEMBLY و فعالشون کنید تا IP fragmentation برای ارسال و دریافت فعال بشه. من زیاد با LWIP روی STM32 درگیر نبودم ولی از یکی از همکارها که تجربه بیشتری دارن، در این مورد پرسیدم، گفتن که اگر توی تنظیمات ETH یا LWIP هم فیلد Checksum Computation دیدید روی Software تنظیمش کنید.
                  برای اطمینان از صحت عملکرد IP fragmentation هم میتونید از نرم افزار Wireshark استفاده کنید. کافیه کارت شبکه مورد نظر رو مانتیور و IP میکروکنترلر رو فیلتر کنید که تنها پکت های بین میکروکنترلر و کامپیوتر رو نشون بده. اینطوری میتونید صحت ارتباط رو بررسی کنید.

                  خیلی ممنون
                  دستتون درد نکنه
                  مشکل از جایی دیگه هست
                  IP_FRAG و IP_REASSEMBLY فعال بودن
                  ممنون که زحمت کشیدید

                  دیدگاه


                    #10
                    پاسخ : ارسال آرایه 1600 بایتی توسط UDP

                    نوشته اصلی توسط REZZA_DEHGHAN98 نمایش پست ها
                    خیلی ممنون
                    دستتون درد نکنه
                    مشکل از جایی دیگه هست
                    IP_FRAG و IP_REASSEMBLY فعال بودن
                    ممنون که زحمت کشیدید
                    بهترین راه اینه با wireshark پکت ها رو چک کنید.

                    دیدگاه

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