اطلاعیه

Collapse
No announcement yet.

آموزش winavr و avrlib

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

    #76
    پاسخ : آموزش winavr و avrlib

    فکرکنم r رو باید بفرم volatile دیفاین کنی
    {خلاف قوانین - امضا ویرایش شد}

    دیدگاه


      #77
      پاسخ : آموزش winavr و avrlib

      نوشته اصلی توسط nanoware
      فکرکنم r رو باید بفرم volatile دیفاین کنی
      بله با volatile درست شد!
      بنظر میرسه کامپایلر برای بهینه سازی به توابع وقفه توجه نمیکنه!
      https://www.linkedin.com/in/mohammadhosseini69

      http://zakhar.blog.ir

      دیدگاه


        #78
        پاسخ : آموزش winavr و avrlib

        نوشته اصلی توسط محمد حسینی
        بله با volatile درست شد!
        بنظر میرسه کامپایلر برای بهینه سازی به توابع وقفه توجه نمیکنه!
        آیتم اول از FAQ ها را مطالعه کنید. بقیه موارد هم می تواند برای این تاپیک مفید باشد:

        http://www.nongnu.org/avr-libc/user-manual/FAQ.html
        اوژن: به معنای افکننده و شکست دهنده است
        دانایی، توانایی است-Knowledge is POWER
        برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
        وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
        قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
        اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
        ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

        دیدگاه


          #79
          پاسخ : آموزش winavr و avrlib

          سلام
          من میخوام با پروتکل spi بین دو تا میکرو که یکیشون با بسکام نوشته شده و یکیشون با winavr ارتباط برقرار کنم
          ولی با مشکل مواجه شدم

          میشه لینک چند تا از منابع انگلیسی خوب برای آموزش winavr رو بزارید اینجا؟؟
          اینارو خودم پیدا کردم:
          http://orangutan-lib.sourceforge.net
          http://www.4shared.com/file/58394115/46a0ea07/orangutan-lib-03.html

          اگر لطف کنید آموزش بعدیتون رو به پروتکل spi اختصاص بدید خیلی عالی میشه
          نــــ_ـــمـــ_ــــیــــ_ـــدونـــــ_ــم.....

          دیدگاه


            #80
            پاسخ : آموزش winavr و avrlib

            دمتون گرم آموزش ها بسیار عالیه
            من شروع کردم برنامه اولم نوشتم جواب گرفتم
            فقط یک سوالی
            تو این خط
            char *str = "Test LCD!";

            علامت * برای چیه ؟

            دیدگاه


              #81
              پاسخ : آموزش winavr و avrlib

              نوشته اصلی توسط mjs1990s
              سلام
              من میخوام با پروتکل spi بین دو تا میکرو که یکیشون با بسکام نوشته شده و یکیشون با winavr ارتباط برقرار کنم
              ولی با مشکل مواجه شدم
              avrlib کتابخونه واسه spi داره. امتحانش کردی؟
              نکات استفاده از کتابخونه ها گفته شده دیگه...

              نوشته اصلی توسط شم آبادی
              تو این خط
              char *str = "Test LCD!";

              علامت * برای چیه ؟
              * برای تعریف اشاره گر استفاده میشه.
              این کد اشاره گر به اول یک آرایه کارکتری (رشته کاراکتری) تعریف میکنه
              میتونی از [] هم استفاده کنی
              https://www.linkedin.com/in/mohammadhosseini69

              http://zakhar.blog.ir

              دیدگاه


                #82
                پاسخ : آموزش winavr و avrlib

                ولله این چند روزه من هر چی منتظر موندم نظری...جوابی...بدوبیراهی...تعریفی....یخدور!
                من نمیدونم چطوری ادامه بدم. پس یا همراهی کنین یا بذارین نکته هارو توضیح بدم.

                بعضی مواقع بنظر میاد اگه بشه مقدار یک متغیری رو که مکررا باهاش کار میشه در رجیستر ها قرار بدیم شاید سرعت عمل کدمون بیشتر بشه. این عمل رو در winavr میشه بصورت زیر انجام داد:


                register unsigned char counter asm("r3"


                منطقا این مورد استفاده درستیه اما در عمل ممکنه باعث بروز چند مشکل کوچیک بشه. اولا اگر رجیستری برای کاربرد خاصی غیر از اون که کامپایلر در نظر داره استفاده بشه عملا روال هدفمند تولید کد توسط کامپایلر رو بهم میزنه که میتونه باعث تولید کد غیر ضروری و اضافه بشه.
                از طرف دیگه چون رجیسترهای 16 الی 31 برای کارهای عمومی استفاده میشه شاید بهتر این باشه که از رجیسترهای 2 الی 15 برای این کار استفاده بشه. و در این صورت اگر این متغیر در روال وقفه تغییر داده بشه معلوم نیست در کدوم روال (مثلا جمع دو عدد اعشاری) داره استفاده میشه و مقدارش عوض میشه.
                خلاصتا توصیه میکنم از این مورد جز موارد خیلی خاص و داخل یک تابع استفاده نکنین.

                دیدگاه


                  #83
                  پاسخ : آموزش winavr و avrlib

                  یکی از موارد مهمی که من بارها باهاش دست به یخه شدم مسئله منطق های پایه هست. مثلا عموما عادت داریم که برای کار با uart از یک بافر برای ذخیره سازی اطلاعات دریافتی از سریال استفاده کنیم و در روال اصلی اطلاعات رو پردازش کنیم. این کار علاوه بر اونکه باعث کندی پردازش اولیه اطلاعات میشه میتونه در بعضی مواقع باعث بروز دردسرهای جنبی مثل عدم امکان پاسخ دهی مطلوب به سیستم دوم و یا مشکلاتی مثل power saving بشه.

                  معمولا من در اینگونه مواقع از ماشین حالت استفاده میکنم. مثلا در یک شبکه مبتنی بر rs485 روالی که برای وقفه سریال مینویسم اغلب عملیات مربوط به گرفتن یک فریم اطلاعاتی رو به همراه تشخیص خطا انجام میده و در پایان در صورتی که درخواست آماده پردازش بود مورد رو به روتین اصلی برای پردازش ارجاع میده. این عمل بصورت عادی فقط میتونه توسط محیط های چند برنامه ای تازه اونم با قدرت پایین انجام بشه.

                  اما البته این مسئله مورد منفیی هم داره و اون اینه که اگه از یک ابزاری برای تولید کد ماشین وضعیت استفاده نشه هر گونه تغییری در حالات این ماشین باعث کلی دردسر میشه. اگه خواستین از این روش استفاده کنین میتونین از VisualState کمپانی IAR برای طراحی و پیاده سازی ماشینهای متفاوت استفاده کنین. البته خودم کد نویسی خام رو ترجیح میدم.

                  از طرف دیگه برای پیاده سازی روالهای نسبتا پیچیده شاید محیط های multitask بنظر وسوسه انگیز بنظر بیاد ولی اگر سیستم از بابت حجم رم یا فلش در محدودیت شدیدی باشه باز هم استفاده از state machine یک راه حل بهینه و عالیه.

                  دیدگاه


                    #84
                    پاسخ : آموزش winavr و avrlib

                    نوشته اصلی توسط reza_agha
                    ولله این چند روزه من هر چی منتظر موندم نظری...جوابی...بدوبیراهی...تعریفی....یخدور!
                    من نمیدونم چطوری ادامه بدم. پس یا همراهی کنین یا بذارین نکته هارو توضیح بدم.
                    راستش من که افتادم تو خط arm، از طرفی هم درگیر پردازش تصویرم... اصلا دیگه فرصت نمیشه ...
                    با نکات اسمبلی در winavr خیلی موافقم. ادامه بده... ممنون

                    این pdf برای کسایی که مثل من از اسمبلی avr چیز زیادی نمیدونن. دستورات رو معرفی کرده
                    www.atmel.com/atmel/acrobat/doc1022.pdf
                    می تونه کمک کنه نکات آقا رضا رو بهتر بفهمین
                    https://www.linkedin.com/in/mohammadhosseini69

                    http://zakhar.blog.ir

                    دیدگاه


                      #85
                      پاسخ : آموزش winavr و avrlib

                      چه جالب منم یه مدتیه پردازش تصویر کتر می کنم و ARM رو شروع کردم!
                      خاصی بگو همکاری کنیم!

                      درباره عملگر <- اطلاعاتی دارید؟

                      { خلاف قوانین - پاک شد }

                      دیدگاه


                        #86
                        پاسخ : آموزش winavr و avrlib

                        نوشته اصلی توسط Mohpooria
                        درباره عملگر <- اطلاعاتی دارید؟
                        اگه اشاره گر به یه struct داشته باشی، برای دسترسی به یک عضو اون 2 کار میتونی بکنی :
                        1

                        (*my_ptr).member = value;

                        2 - استفاده از اپراتور <-

                        my_ptr->member = value;

                        البته بیشتر تو C++ برای class نویسی استفاده میشه
                        https://www.linkedin.com/in/mohammadhosseini69

                        http://zakhar.blog.ir

                        دیدگاه


                          #87
                          پاسخ : آموزش winavr و avrlib

                          سلام
                          من میخوام چند تا متغییر رو پشت سر هم با پروتکل spi از یه میکرو به میکرو دیگه انتقال بدم
                          یه متغییر رو میتونم انتقال بدم ولی بیشتر از یکی رو نمیتونم :angry:
                          میشه راهنمایی کنید :rolleyes:
                          نــــ_ـــمـــ_ــــیــــ_ـــدونـــــ_ــم.....

                          دیدگاه


                            #88
                            پاسخ : آموزش winavr و avrlib

                            من این دستور رو توی AVRStudio نوشتم ولی وقتی optimization رو روی O S- قرا میدم درست توی Simulator اجرا نمیشه ( یعنی اصلا اجرا نمیشه )
                            ولی وقی روی O 0- قرار میدم اجرا میشه :
                            for(j=0;j<5;j++)
                            asm("nop"
                            حالا باید چیکار کنم تا توی مود بهینه سازی هم کامپایل بشه ؟
                            فرق ما با جهان غرب در اینه که اونا هیچی نمیدونن! و تحقیق میکنند ولی ما همه چیزو می دونیم! و تحقیق برای ما معنی نداره!!!!!!!!!!!! .(از یه آدم اینکاره)

                            دیدگاه


                              #89
                              پاسخ : آموزش winavr و avrlib

                              باید بفرم
                              asm volatile("nop":;
                              بنویسی
                              ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html#ss5.4
                              {خلاف قوانین - امضا ویرایش شد}

                              دیدگاه


                                #90
                                پاسخ : آموزش winavr و avrlib

                                مثلا
                                for(i=0;i<3;i++)
                                asm volatile ("nop" // wait
                                رو که میزنم دیگه for رو اجرا نمیکنه به جاش سه تا asm("nop&quot میزنه ولی اگه for رو مثلا 20 تایی که بزنی for اجرا میشه .
                                یا مثلا یه for خالی رو کامپایل نمیکنه .
                                for(j=0;j<3;j++)
                                asm volatile ("nop"
                                13c: 00 00 nop
                                13e: 00 00 nop
                                140: 00 00 nop
                                فرق ما با جهان غرب در اینه که اونا هیچی نمیدونن! و تحقیق میکنند ولی ما همه چیزو می دونیم! و تحقیق برای ما معنی نداره!!!!!!!!!!!! .(از یه آدم اینکاره)

                                دیدگاه

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