اطلاعیه

Collapse
No announcement yet.

avr با طعم شئی گرایی. c++ vs c

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

    avr با طعم شئی گرایی. c++ vs c

    سلام خدمت همه دوستان
    همانگونه که مطلع هستید با ظهور اتمل استادیو ضمینه برنامه نویسی c++ بر روی avr فراهم شده و همه به توانایی برنامه نویسی شئی گرا واقف هستند
    ولی سوال اینجاست که از نظر صرفه جویی در حافظه برنامه (,حافظه فلش) و حافظه موقت (sram) کدام سبک برنامه نویسی ارجح تر است ؟
    برنامه نویسی شئی گرا یا برنامه نویسی رویه ای

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

    #2
    پاسخ : avr با طعم شئی گرایی. c++ vs c

    برنامه نویسی شی گرا محصول اتمل استودیو نیست و در واقع حاصل کمپایلر AVR GCC هست.
    در رابطه با اینکه کدام ارجح تر است، این موضوع به پروژه شما بستگی دارد. طبیعتا در موارد ساده و کوچک ترجیح خاصی وجود ندارد. اما در پروژه هایی با کدنویسی طولانی استفاده از شی گرایی مزیت درک و توسعه بهتر کدها را فراهم میکند.
    نمونه واضح این مسئله را میتوانید در کتابخانه آردوینو مشاهده کنید.
    جدیدترین ویرایش توسط lachini; ۲۲:۴۰ ۱۳۹۵/۱۱/۰۶.

    نکات بسیار مهم در تهیه پروگرامر که متاسفانه فراموش میشود!

    دیدگاه


      #3
      پاسخ : avr با طعم شئی گرایی. c++ vs c

      نوشته اصلی توسط lachini نمایش پست ها
      برنامه نویسی شی گرا محصول اتمل استودیو نیست و در واقع حاصل کمپایلر AVR GCC هست.
      در رابطه با اینکه کدام ارجح تر است، این موضوع به پروژه شما بستگی دارد. طبیعتا در موارد ساده و کوچک ترجیح خاصی وجود ندارد. اما در پروژه هایی با کدنویسی طولانی استفاده از شی گرایی مزیت درک و توسعه بهتر کدها را فراهم میکند.
      نمونه واضح این مسئله را میتوانید در کتابخانه آردوینو مشاهده کنید.
      با تشکر از پاسخ شما
      من چنین جسارتی به gcc نکردم . منظورم منظورم امکان برنامه نویسی c++ برای avr بود.
      درباره قدرت و انعطاف c++ هرچه بگویم کم است و در اینکه از نظر مهندسی نرم افزار c++ به علت ویژگی های مانند شئ گرایی ، چند ریختی و وراثت بر c ارج تر است نیز شکی نیست،
      ولی سئوال بنده چیز دیگری است .
      با توجه به فضایی حافظه محدود avr که در برخی از مدل ها به چند بایت می رسد آیا مقول است از شئی گرایی استفاده کنیم.
      درواقع آیا زبان شئی گرایی حافظه بیشتری نسبت به زبان رویه اشغال می کنند.
      و موضوع دوم اینکه در c++ تمرکز بروی حفاظت از داده است ، در صورتی که در avr بیشتر داده ها به صورت ثبات های سخت افزاری می باشند.از این رو توابع سرگردان به راحتی می توانند مقدار ثبات ها را تغییر دهند و باعث بروز خطا منطقی در حین اجرای برنامه گردند.

      پ.ن :
      به نظر می رسد زبان آردوینو یه زبان مفسری است ( نظر شخصی به علت نوع دستورات ویژه ) و مقایسه آن با زبان c و c++ درست نیست .
      جدیدترین ویرایش توسط Esmail.dadkhah; ۰۰:۱۱ ۱۳۹۵/۱۱/۰۷.

      دیدگاه


        #4
        پاسخ : avr با طعم شئی گرایی. c++ vs c

        اتمل استودیو کمپایلر نیست و فقط یک محیط توسعه است.
        نکته بعدی نوع پروژه است، طبیعتا در میکرو های ضعیف به لحاظ حافظه انتظار نوشتن کدهای طولانی نیست. و بدنبال آن نوشتن کد شی گرا مفهومی ندارد.
        آردوینو هم زبان مفسری نیست! اگر به کتابخانه آن مراجعه فرمائید و یا در حین کمپایل دقت کنید متوجه خواهید شد که از کمپایلر AVR GCC استفاده کرده و کدهای کتابخانه با استفاده از شی گرایی نوشته شده است.
        بطور کلی مفهوم مفسر و کمپایلر تفاوت فاحشی با هم دارند، و بنده تابحال در مورد AVR با آن برخورد نکرده و نه شنیده ام. و بسیار دور از ذهن است.
        جدیدترین ویرایش توسط lachini; ۲۳:۴۲ ۱۳۹۵/۱۱/۰۶.

        نکات بسیار مهم در تهیه پروگرامر که متاسفانه فراموش میشود!

        دیدگاه


          #5
          پاسخ : avr با طعم شئی گرایی. c++ vs c

          نوشته اصلی توسط lachini نمایش پست ها
          اتمل استودیو کمپایلر نیست و فقط یک محیط توسعه است.
          نکته بعدی نوع پروژه است، طبیعتا در میکرو های ضعیف به لحاظ حافظه انتظار نوشتن کدهای طولانی نیست. و بدنبال آن نوشتن کد شی گرا مفهومی ندارد.
          آردوینو هم زبان مفسری نیست! اگر به کتابخانه آن مراجعه فرمائید و یا در حین کمپایل دقت کنید متوجه خواهید شد که از کمپایلر AVR GCC استفاده کرده و کدهای کتابخانه با استفاده از شی گرایی نوشته شده است.
          بطور کلی مفهوم مفسر و کمپایلر تفاوت فاحشی با هم دارند، و بنده تابحال در مورد AVR با آن برخورد نکرده و نه شنیده ام. و بسیار دور از ذهن است.
          ممنون آقای لاچینی
          پس به نظر شما برنامه نویسی شئی گرا حافظه بیشتری نسبت به برنامه نویسی رویه ای اشغال می کنه .
          پ.ن :
          در مورد زبان های مفسری در avr می توان به تنها نمونه یعنی بیسیک و برنامه مفسر بسکام اشاره کرد که کد بیسیک توسعه یافته را به اسمبلی ترجمه می کند.علت اجرای کند برنامه نسبت به سی از این امر نشئت می گیرد.
          پ.ن : در مورد لفظ کامپایلر برای اتمل استادیو اشتباه است از تذکر شما ممنون

          دیدگاه


            #6
            پاسخ : avr با طعم شئی گرایی. c++ vs c

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

            برای درک بهتر به مقاله زیر مراجعه کنید:

            نکات بسیار مهم در تهیه پروگرامر که متاسفانه فراموش میشود!

            دیدگاه


              #7
              پاسخ : avr با طعم شئی گرایی. c++ vs c

              آقای لاچینی به نظر می رسه که شما فقط به یکی از روش مفسرنویسی آشنا هستید.
              1- چندید روش برای زبان های مفسری استفاده می شوند که کاهی ترکیبی نیز می باشند.
              برای آشنایی بهتر با مفسرها به اینجا ( فارسی ) یا اینجا ( انگلیسی ) مراجعه کنید.
              2- زبان بیسیک به صورت ذاتی یک زبان مفسری است. وقتی شما می گوید بسکام یک کامپایلر است یعنی توسعه دهنده های زبان بیسیک یک دفعه مسیر خود را تغییر داده اند.
              3- به نظر می رسد که در بسکام ابتدا کد های بیسیک به کد های اسمبلی تبدیل و در مرحله دوم به وسیله اسمبلر به کد ماشین تبدیل شود.
              اگر دقت کنید وقتی کد را در بسکام کامپایل می کنید در کنار فایل هگز ماشین یک فایل حاوی کد های اسمبلی نیز است.
              -----------------------------------------------------
              بحث مترجم یا مفسر
              اگه اجازه بدید این بحث را به یک تاپیک دیگه منتقل کنیم
              -----------------------------------------------------
              و هنوز کسی نتوانسته با دلیل و مدرک ثابت کند که در AVR از لحاظ حافظه کدام بهتراست
              زبان سی یا سی پلاس پلاس
              c vs c++

              دیدگاه


                #8
                پاسخ : avr با طعم شئی گرایی. c++ vs c

                بنده چه هر چه عرض کردم باز هم شما اصرار به حرف خود دارید.
                پس لطفا به شرکت mcs electronic اطلاع بدهید واژه کمپایلر را از سایت رسمی و نرم افزار خود حذف کنند.
                توضیحات مندرج در سایت رسمی:
                BASCOM-AVR©*is the original*Windows BASIC COMPILER*for the*AVR*family.*It is designed to run on*XP/VISTA/WIN7 and WIN8

                لینک مطلب فوق جهت اطلاع رسانی شما به شرکت :

                نکات بسیار مهم در تهیه پروگرامر که متاسفانه فراموش میشود!

                دیدگاه


                  #9
                  پاسخ : avr با طعم شئی گرایی. c++ vs c

                  یعنی می شه از قابلیت class استفاده کرد؟
                  در غیر این صورن شی گرایی رو چی تعریف می کنین؟

                  دیدگاه


                    #10
                    پاسخ : avr با طعم شئی گرایی. c++ vs c

                    نوشته اصلی توسط vahid_22002 نمایش پست ها
                    یعنی می شه از قابلیت class استفاده کرد؟
                    در غیر این صورن شی گرایی رو چی تعریف می کنین؟
                    بله امکان پذیر هست و شما می*توانید کلاسی شامل متغیرها و توابع ایجاد کنید.

                    در مورد اینکه سی بهتر است یا c++؟

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

                    نکات بسیار مهم در تهیه پروگرامر که متاسفانه فراموش میشود!

                    دیدگاه


                      #11
                      پاسخ : avr با طعم شئی گرایی. c++ vs c

                      بنده چه هر چه عرض کردم باز هم شما اصرار به حرف خود دارید.
                      پس لطفا به شرکت mcs electronic اطلاع بدهید واژه کمپایلر را از سایت رسمی و نرم افزار خود حذف کنند.
                      توضیحات مندرج در سایت رسمی:
                      BASCOM-AVR©*is the original*Windows BASIC COMPILER*for the*AVR*family.*It is designed to run on*XP/VISTA/WIN7 and WIN8

                      لینک مطلب فوق جهت اطلاع رسانی شما به شرکت :
                      http://www.mcselec.com/index.php?opt...d=14&Itemid=41

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

                      لفظ*های زبان مفسر و زبان مترجم صرفاً به این معنا هستند که اساس پیاده*سازی یک زبان برنامه نویسی یک مفسر است یا یک مترجم؛ یک زبان سطح بالا زبانی است که مستقل از پیاده*سازی مشخصی است.

                      دیدگاه


                        #12
                        پاسخ : avr با طعم شئی گرایی. c++ vs c

                        نوشته اصلی توسط vahid_22002 نمایش پست ها
                        یعنی می شه از قابلیت class استفاده کرد؟
                        در غیر این صورن شی گرایی رو چی تعریف می کنین؟
                        همنطور که اقایی lachini فرمودند از تمام قابلیت های زبان c++ می توان برای برنامه ریزی avr استفاده کرد.
                        در مورد سوال دوم باید عرض کنم که شئی گرای یک مفهوم انتزاعی در برنامه نویسی است. همان طور که مطلع هستید با تعریف یک class شئی به وجود نمی آید . شئی در واقع مجموعه ای از داده ها و توابع ساختار یافته است.
                        بگذارید با یک معما شئی گرایی را توضیح بدهم .
                        غضنفر دانشجوی رشته نرم افزر است.روزی تصمیم می گیرد که به جنگل برود.فردای آن روز دوست غضنفر از او سوال می کند که "جنگل چگونه بود" ؟
                        غضنفر جواب می دهد "آنقدر درخت بود که جنگل را ندیدم"
                        به نظر شما غضنفر برنامه نویس "رویه ای" است یا برنامه نویس "شئی گرا"
                        پاسخ :
                        غضنفر برنامه نویس رویه است زیرا نمی توان مجموع واحد ها را به عنوان یک واحد ببیند.
                        در واقع برنامه نویس شئی گرایی نشئت گرفته از نوع نگاه انساهات که می توانند مجموعه ای از انسان ها را جامعه ، مجموع از قطرات آب را دریا ، مجموع از قطعات مکانیکی را خودرو ببینند.
                        برای اطلاعات بیشتر به کتاب برنامه نویسی به زبان c++دایتل-دایتل مراجعه کنید.

                        ----------------------------------------------------------------
                        باز هم سوال خود را دوباره طرح می کنم
                        1- آیا برنامه نویسی شئی گرا نسبت به برنامه نویسی رویه حافظه بیشتری طلب می کند.
                        2- با توجه به اینکه ثبات های سخت افزاری در avr در دسترس توابع سرگردان هستند آیا کپسوله کردن و شئی گرای در میکروکنترلر avr مفهموم دارد ؟

                        دیدگاه


                          #13
                          پاسخ : avr با طعم شئی گرایی. c++ vs c

                          سلام دوستان عزیز
                          پس از چندروز مطالعه و تحقیق درنهایت به لینکی از سایت محترم atmel بر خوردم که آب پاکی را روی دستم ریخت>
                          1- محیط توسعه اتمل استادیو هر چند از زبان c++ پشتیبانی می کند ولی ... از کتابخانه استاندارد c++ پشتیبانی نمی کند و ...
                          هرچند از کد های بازمانده از زبان c می توان در برنامه های c++استفاده کرد.
                          Basically yes, C++ is supported (assuming your compiler has been configured and compiled to support it, of course). Source files ending in .cc, .cpp or .C will automatically cause the compiler frontend to invoke the C++ compiler. Alternatively, the C++ compiler could be explicitly called by the name avr-c++.However, there's currently no support for libstdc++
                          2- در مورد میزان استفاده از حافظه ، که کدام سبک از برنامه نویسی ( شئی گرا یا رویه ای ) حافظه بیشتری طلب می کند فقط از کتاب دایتل - دایتل نقل قول می کنم. ( فصل 6 - ص 405 )

                          افراد مبتدی در برنامه نویسی شی گرا معمولا اظهار نگرانی می کنند که اشیاء ممکن است خیلی بزرگ شوند زیرا هم شامل داده ها و هم توابع هستند. این حرف منطقاٌ درست است یعنی برنامه نویس ممکن است اشیاء را به صورت مجموعه ای از داده ها و توابع ببیند اما از لحاظ فیزیکی این طور نیست.
                          نکته کارایی 3-6
                          اشیاء در واقع تنها حاوی داده ها هستند اعمال عملگرد sizeof روی نام یک رده یا شئی از آن رده فقط اندازه داده های رده را می هد.کامپایلر فقط یک کپی از توابع عضو رده را جدای از همه اشیاء آن رده ایجاد می کند . آنگاه همه اشیاء آن رده به طور مشترک از این کپی استفاده می کنند. البته بدیهی است که هر یک از اشیاء به کپی خود از داده های رده نیاز دارد زیرا این داده ها ممکن است در اشیاء مختلف ، متفاوت باشند. کد تابع ، غیر قابل تغییر ( به این کد ، کد بارگشتی یا رویه خالص نیز گفته می شود ) و در نتیجه همه اشیاء یک رده می توانند مشترکاً از آن استفاده کنند.
                          4- یکی بهترین امکان ( به نظر بنده ) در c++ حفاظت از داده ها است ولی در میکرو کنترلر avr بیشتر داده های به صورت ریجیستر های سخت افزاری هستند که هرکدام آدرس مشخصی دارند و هر تابع غیر عضو یا سرگردان می تواند به راحتی مقدار انها را تغییر دهد.
                          برای مثال فرض کنید که عمری را صرف نوشتن یک کتابخانه ارسال و دریافت usart می کنید. ولی شما نمی توان تضمین کنید با تعریف کتابخانه عملکرد واحد usart تحت سلطه " رده ها و توابع " شما هستند.ممکن است همکار باهوش شما برای اضافه کردن یک برنامه چشمک زن ساده ،به کل واحد usart را از کار بیندازد.برای اینکه به عمق فاجعه پی ببرید فرض کنید دستگاه شما در استان سیستان بلوچستان در یکی از خط های تولیدی مهم استان قرار دارد و برنامه چشمک را از طریق بوت لودر و usart بارگذاری کردید .

                          نتیجه گیری شخصی ( تا ثریا با C) نوشتن برنامه های با کلاس هنوز به ما نیومده
                          جدول زبان*های برنامه*نویسی IEEE که براساس 12 فاکتور و با استفاده از ده منبع تهیه شده است. ( برگرفته شده از zoomit.ir)
                          */سالار دومین رتبه را داره*/

                          دیدگاه


                            #14
                            پاسخ : avr با طعم شئی گرایی. c++ vs c

                            از دوستان کسی هست که تجربه برنامه نویسی شی گرا با c++ برای میکروکنترلر های avr داشته باشه؟ فکر نمیکنم انتخاب این روش برای میکروهای سری tiny معقول باشه. بنابراین سوالم بیشتر راجع به میکروهای atmega , xmege هست. البته شی گرایی رو تا حدی میشه با C هم پیاده کرد که به مراتب سخت تر از c++ میشه و خوانایی برنامه میاد پایین.
                            از اونجایی که c++ خیلی ویژگی های زیاد تری نسبت به c داره، به نظرتون از کدوم ویژگی ها بهتره استفاده بشه و از کدوم ویژگی ها بهتره استفاده نشه.

                            پ.ن: به نظر میاد توی انجمن بحث زیادی در این مورد انجام نشده (نتیجه جست و جو چیز خاصی بهم نداد)
                            پ.ن2: من تو برنامه نویسی c++ کاملا مبتدی هستم. ولی در مورد این موضوع زیاد شنیدم و خواستم نظر کسایی که واقعا از این تکنیک استفاده می کنن رو بدونم.
                            پ.ن3: هدفم از استفاده از شی گرایی، بالا بردن سرعت ساخت و توسعه برنامه، ویرایش و خوانایی هست، به شرطی که قرار نباشه هزینه زیادی بابت افزایش حجم برنامه یا کاهش سرعت بپردازم.
                            پ.ن4: من تصورم اینه که پیاده سازی منو و تنظیمات، به خصوص زمانی که برنامه در حال کار هست، به صورت شی گرا خیلی راحت تره.
                            پ.ن5: قبل از این چندین تاپیک از سایت avrfreaks رو نگاه کردم. ظاهرا بحث در مورد مزیت و معایبت c++ و به خصوص شی گرایی همیشه وجود داشته و همچنان وجود داره. ولی کمتر کسی هست برنامه نویسی به هر دو زبان رو به اندازه کافی انجام داده باشه که بتونه مقایسه خوبی بینشون انجام بده.
                            پ.ن6: من از atmel studio 7 و کامپایلر gcc استفاده می کنم.
                            جدیدترین ویرایش توسط a.rahami; ۱۷:۲۰ ۱۳۹۹/۰۸/۲۵. دلیل: تکمیل جزئیات

                            دیدگاه


                              #15
                              Re: avr با طعم شئی گرایی. c++ vs c

                              من هم یه توضیح مختصر بدم.
                              استفاده از c++ برای برنامه های بزرگ بسیار مفید، صرفه جو در زمان و
                              Memory saving هست. صد البته به مهارت برنامه نویس هم بستگی داره
                              چون جلوی تکرار رویه ها رو میگیره.
                              اما میتونه ضعف هم باشه، چون برای استفاده از یه امکان کوچیک برای یه کاری مجبور میشی گاهی یه شی جدید تعریف کنی و اگه کامپایلر خوب تنظیم نشده باشه(optimization) مصرف حافظه sram و flash رو میبره بالا.
                              ضمن اینکه در c کنترل روی تعریف واحد های حافظه به نسبت بیشتره و من خودم معمولا با حساسیت فوق العاده متغییر ها رو تعریف میکنم تا حجم کد بیاد پایین.
                              پس نتیجه اینکه تصمیم نهایی به سطح سواد برنامه نویس در مرحله ی اول و در مرحله ی دوم به سایز پروژه و تمراری بودن فرآیند هاش برمیکرده.

                              اونچه که قطعا میسه در موردش نظر داد اینه که زمان کد نویسی رو تو پروژه های بزرگ به شدت کاهش میده

                              دیدگاه

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