اطلاعیه

Collapse
No announcement yet.

مشکل در زیر وقفه اتمل استادیو atmel studio

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

    مشکل در زیر وقفه اتمل استادیو atmel studio

    سلام دوستان من یک برنامه ی ساده نوشتم تا این مشکلم را با شما در میان بزارم
    در حالت اول برنامه کار می کند و پورت خروجی شمارش می کند




    اما در حالت زیر PORT تغییر نمی کند

    اصالا مقدار رجیستر RR از صفر زیاد تر نمی شود
    جدیدترین ویرایش توسط antipa; ۱۳:۱۹ ۱۳۹۶/۰۴/۱۸.

    #2
    پاسخ : مشکل در زیر وقفه اتمل استادیو atmel studio

    سلام کسی راه حلی برای این مشکل پیشنهاد نمیده ؟

    دیدگاه


      #3
      پاسخ : مشکل در زیر وقفه اتمل استادیو atmel studio

      نوشته اصلی توسط antipa نمایش پست ها
      سلام دوستان من یک برنامه ی ساده نوشتم تا این مشکلم را با شما در میان بزارم
      در حالت اول برنامه کار می کند و پورت خروجی شمارش می کند
      سلام
      در برنامه دوم ، در خط تعریف متغیر rr کلمه ی کلیدی volatile رو اضافه کنید.


      volatile unsigned char rr;


      لطفا بگید درست شد یا نه ؟

      دیدگاه


        #4
        پاسخ : مشکل در زیر وقفه اتمل استادیو atmel studio

        نوشته اصلی توسط dark star نمایش پست ها
        در خط تعریف متغیر rr کلمه ی کلیدی volatile رو اضافه کنید
        سلام درست شددد داره کار می کنه خیلی ممنونم
        ممنونم از راهنماییت
        نمی دونی چه چه کمک بزرگی بهم کردی - تشکر
        دیگه لازم نیست برناممو تو اتمل بنویسم و بعد برم تو کد ویژن کمپایل کنم -
        دستت درد نکنه دادش

        دلیل: ادغام دو پست برای جلوگیری از اسپم

        چرا برنامه ی بالا جواب نمی داد ؟
        من که متغییر ها را عمومی تعریف کرده بودم
        اصلا این کلمه یی که اضافه کردیم چه معنی دارد ؟

        دیدگاه


          #5
          پاسخ : مشکل در زیر وقفه اتمل استادیو atmel studio

          نوشته اصلی توسط antipa نمایش پست ها
          من که متغییر ها را عمومی تعریف کرده بودم
          اصلا این کلمه یی که اضافه کردیم چه معنی دارد ؟
          عمومی تعریف کردن به به اسکوپ و اینکه کجا می تونید به این متغیر مستقیما دسترسی داشته باشید و ... مربوط میشه که مطمئنم خودتون میدونید.

          Volatile بودن نشون میده که ممکنه مقدار یک متغیر بین دو بار دسترسی برنامه در حالت عادی، توسط یه پردازش ثانویه (مثل وقفه ) عوض بشه. در نتیجه کامپایلر باید کد اسمبلی رو طوری فراهم کنه که متغیر قبل از هر دسترسی توی کد اصلی ( main ) چک بشه. ممکنه کامپایلر در تلاش باشه در راستای یک بهینه سازی کد (optimizing ) مقدار یک متغیر رو آپدیت ( دوباره از SRAM نخونه زیرا که فکر میکنه مقدار صحیح رو در رجیستر ** داره ) نکنه. با این کلمه کلیدی به کامپایلر هشدار میدیم برای این متغیر خاص، باید چرخه ی کامل خواندن و پردازش اجرا بشه.

          دلیل اینکه در اتمل استودیو کد شما طوری که می خواستید کار نمی کرد و در کد ویژن به درستی کار میکرد ، هم همین قضیه ی بهینه سازی های مختلف کامپایلر های این دو محیط بود.

          برای بیشتر نگا ه کنید به :

          دیدگاه


            #6
            پاسخ : مشکل در زیر وقفه اتمل استادیو atmel studio

            نوشته اصلی توسط dark star نمایش پست ها
            دوباره از SRAM نخونه زیرا که فکر میکنه مقدار صحیح رو در رجیستر ** داره
            گرفتم مشکل کار کجا بوده
            پس کمپایلر اتمل استادیو واسه اینکه به حساب سرعت برنامه رو ببره بالا میاد متغیر یی که تعریف کردیم را از sram بر میداره میبره و می ریزه تو یکی از رجیستر ها و هی اون رجیسترو چک می کنه ناغافل از این که اون متغییری که تو sram بوده داره تغییر می کنه ! پس ما در عمل تو برنامه جواب نمی گرفتیم .... عجب
            امــــا بعضی موقع ها که جواب می گرفتم شاید به این دلیل بوده: چون برنامه چون طولانی بوده بنابر این همه ی رجیستر های میکرو درگیر بوده و در نتیجه کمپایلر واسه تست حلقه مجبور بوده اطلاعاتو از sram لود کنه ، خیلی مسخرس .... میدونی چند ماه وقتمو این موضوع ساده گرفت : ( چقدر برنامه هامو هی خط به خط چک می کردم .... ، کور شدم
            می شه optimizing اتمل استادیو را دستکاری کرد که از این خود شیرنی ها نکنه ! یا اصلا برای تولید کد از هسته ی کد ویژن استفاده کنیم ؟!
            یه سوال دیگه فکر کنم در زیر وقفه ها ، متغییر هایی که استفاده می کنیم بهتر است از نوع رجیستر باشه .... درسته ؟ دیگه به مشکل بالا بر نمی خوریم
            البته شاید اگه رجیستر های میکرو را درگیر متغییر ها کنیم سرعت اجرای برنامه به شدت بیاد پایین .....

            دیدگاه


              #7
              پاسخ : مشکل در زیر وقفه اتمل استادیو atmel studio

              نوشته اصلی توسط antipa نمایش پست ها
              گرفتم مشکل کار کجا بوده
              پس کمپایلر اتمل استادیو واسه اینکه به حساب سرعت برنامه رو ببره بالا میاد متغیر یی که تعریف کردیم را از sram بر میداره میبره و می ریزه تو یکی از رجیستر ها و هی اون رجیسترو چک می کنه ناغافل از این که اون متغییری که تو sram بوده داره تغییر می کنه ! پس ما در عمل تو برنامه جواب نمی گرفتیم .... عجب
              امــــا بعضی موقع ها که جواب می گرفتم شاید به این دلیل بوده: چون برنامه چون طولانی بوده بنابر این همه ی رجیستر های میکرو درگیر بوده و در نتیجه کمپایلر واسه تست حلقه مجبور بوده اطلاعاتو از sram لود کنه ، خیلی مسخرس .... میدونی چند ماه وقتمو این موضوع ساده گرفت : ( چقدر برنامه هامو هی خط به خط چک می کردم .... ، کور شدم
              می شه optimizing اتمل استادیو را دستکاری کرد که از این خود شیرنی ها نکنه ! یا اصلا برای تولید کد از هسته ی کد ویژن استفاده کنیم ؟!
              یه سوال دیگه فکر کنم در زیر وقفه ها ، متغییر هایی که استفاده می کنیم بهتر است از نوع رجیستر باشه .... درسته ؟ دیگه به مشکل بالا بر نمی خوریم
              البته شاید اگه رجیستر های میکرو را درگیر متغییر ها کنیم سرعت اجرای برنامه به شدت بیاد پایین .....
              واحد پردازش فقط با رجیستر ها کار میکنه، شما هر متغیری هر جایی تعریف کنی، موقعی که میخواید کاریش کنید ( ضربش کنید، جمعش کنید، منها کنید، مقایسه کنید و .... اون متغیر توی یک رجیستر لود میشه.
              وقتی هم یک متغیر رو توی اون یکی کپی می کنید، باز اول اون متغیر کپی میشه توی یک رجیستر ، بعد اون رجیستر کپی میشه توی ادرس جدید داخل SRAM .

              میشه کامپایلر رو دستکاری کرد؟ بله، البته که میشه. اما فعلا فکر میکنم از همون کلمه ی کلیدی Volatile استفاده کنید بهتره، بعدا سرچ کنید ببینید تنظیمات این کامپایلر ( GCC برای اتمل استودیو ) چیه.


              نوشته اصلی توسط antipa نمایش پست ها
              متغییر هایی که استفاده می کنیم بهتر است از نوع رجیستر باشه .... درسته ؟ دیگه به مشکل بالا بر نمی خوریم
              اگر متغیر در SRAM باشه، فقط یک مرحله لود کردن از SRAM و ذخیره کردن تغییر در SRAM اضافه میشه، ( در بعضی مواقع یکی از این دو مرحله شاید نباشه . )
              تغییر سرعت اینطور نیست که برنامه بخوابه زمین و هنگ کنه.
              ولی تعداد رجیستر ها خیلی کمه، و در خیلی موارد شما به چیزی بیشتر از اونا احتیاج دارید،
              خلاصه که مشکلی نیست.

              دیدگاه


                #8
                پاسخ : مشکل در زیر وقفه اتمل استادیو atmel studio

                نوشته اصلی توسط dark star نمایش پست ها
                خلاصه که مشکلی نیست
                ممنون جوابم گرفتم و مسئله حل شد
                فک کنم شما در زمینه ی ارتباط میکرو با کامپیوتر از طریق پورت usb اطلاعاتی دارید
                می شه یه خورده توضیح بدید
                مثلا چطور یک برنامه ی گرافیکی ساده درست کنیم (تو کامیپیوتر ) و از طریق پورت usb به میکرو که( سخت افزار usb دارد ) وصل بشیم و مثلا یک پورت را یک کنیم ؟
                البته من با گرافیک کامپیوتر به طور کامل آشنایی دارم و به و به راحتی هر برنامه ی گرافیکی را مینویسم ولی مشکلم انتقال اطلاعات از کامپیوتر به بیرون است حالا چه با پورت COM سریال یا پورت USB
                پس دو تا سوال : چطور اطلاعات را از طریق پورت کام از کامپیوتر به بیرون بفرستیم و سوال دوم چطور اطلاعاتو تو میکرو که دارای پورت USB هست بگیریم و پردازش کنیم ؟

                دیدگاه


                  #9
                  پاسخ : مشکل در زیر وقفه اتمل استادیو atmel studio

                  نوشته اصلی توسط antipa نمایش پست ها
                  ممنون جوابم گرفتم و مسئله حل شد
                  فک کنم شما در زمینه ی ارتباط میکرو با کامپیوتر از طریق پورت usb اطلاعاتی دارید
                  می شه یه خورده توضیح بدید
                  مثلا چطور یک برنامه ی گرافیکی ساده درست کنیم (تو کامیپیوتر ) و از طریق پورت usb به میکرو که( سخت افزار usb دارد ) وصل بشیم و مثلا یک پورت را یک کنیم ؟
                  البته من با گرافیک کامپیوتر به طور کامل آشنایی دارم و به و به راحتی هر برنامه ی گرافیکی را مینویسم ولی مشکلم انتقال اطلاعات از کامپیوتر به بیرون است حالا چه با پورت COM سریال یا پورت USB
                  پس دو تا سوال : چطور اطلاعات را از طریق پورت کام از کامپیوتر به بیرون بفرستیم و سوال دوم چطور اطلاعاتو تو میکرو که دارای پورت USB هست بگیریم و پردازش کنیم ؟
                  سلام
                  آموزش زیر رو دانلود کن نحوه استفاده از پورت سریال در c# رو به صورت کامل به همراه مثال توضیح داده:

                  دیدگاه


                    #10
                    پاسخ : مشکل در زیر وقفه اتمل استادیو atmel studio

                    نوشته اصلی توسط M3R-E نمایش پست ها
                    آموزش زیر رو دانلود کن نحوه استفاده از پورت سریال در c# رو به صورت کامل به همراه مثال توضیح داده:
                    بسیار بسیار از شما ممنونم به خاطر معرفی این کتاب - دانلود کردم و چندبخش اول را خواندم - خیلی خوب و روان توضیح دادن بودند جا داره یک تشکر هم از نویسندش بکنیم
                    در اولین فرصت نرم افزار ویژال استادیو را تهیه و آموزش های این کتاب را دنبال می کنم . به احتمال زیاد به جواب بگیرم ....
                    البته من برنامه های گرافیکی که می نوشتم ساده بود و با نرم افزار dev cpp کارم را می افتاد - ولی الان مثل این که باید کوچ کنم به C# و حتما تجربه ی خوبی خواهد بود ....

                    دیدگاه

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