اطلاعیه

Collapse
No announcement yet.

کوچ کردن از کدویژن به AtmelStudio

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

    پاسخ : کوچ کردن از کدویژن به AtmelStudio

    سلام ، در خط زیر منظور از int16_t چیست ؟ با typedef اشنا هستم ، متوجه عملکردش در اینجا نمیشم.
    کد:
    degree = (uint16_t)pgm_read_byte_near(degree_lookup + count)*2;

    دیدگاه


      پاسخ : کوچ کردن از کدویژن به AtmelStudio

      نوشته اصلی توسط Reza.bahrami
      سلام ، در خط زیر منظور از int16_t چیست ؟ با typedef اشنا هستم ، متوجه عملکردش در اینجا نمیشم.
      کد:
      degree = (uint16_t)pgm_read_byte_near(degree_lookup + count)*2;
      سلام داداش
      هر گاه چند متغیر با هم عملیات محاسباتی انجام میدن که نتیجه ، یک مقدار که مد نطر ما نیست میشه از این روش استفاده میکنیم.
      مثلا دو تا int رو با هم ضرب میکنیم و خودمون هم میدونیم که هیچ وقت حاصل این ضرب توی اینجا بیشتر از 255 نمیشه اما اگر حاصل ضرب دوتا int رو ما مستقیم بریزیم توی یک char موقع کامپایل به همون اخطار میده که شما دارین یه مقدار بزرگ رو توی یک متغیر کوجیک میریزین چون کامپایلر از این که حاصل ضرب ما هیچ وقت بزرگتر از 255 نمیشه خبر نداره پس اینجا میایم یه char رو توی پرانتز میزاریم و قبل ضرب اون دوتا int قرارش میدیم اینجوری به کامپایلر میفهمونیم که همیشه تو فقط به اندازه char از lowbyte این حاصل ضرب رو در نظر بگیر.
      کد:
      int x,y;
      char res;
      x=2;
      y=120;
      res=((char)x*y);
      درمورد این خط دستوری که شما گذاشتین:
      اون uint16_t که توی پرانتزه میگه که از حاصل عملیات خواندن از حافظه فلش به ادرس degree_lookup +2 و سپس ضرب مقدار خوانده شده در 2 فقط مقدار unsigned int رو بریز توی degree
      توجه:دقت کن که اگر حاصل عملیات به فرض بشه unsigned long int این کار باعث برگردوندن فقط قسمت unsigned int میشه و بقیه قسمت ها حذف میشه
      با ماشین حساب ویندوز 7 توی حالت programmer میتونی با نوشتن مقادیر word و بعد زدن دکمه byte و دوباره word ببینی دقیقا چه اتفاقی داره میفته

      داریم به آخرای ماه رمضون نزدیک میشه چقدر بد
      همه برای ظهور آخرین منجی دعا کنین
      ای خدا ، من باید از نظر علم از همه برتر باشم، تا مبادا که دشمنان مرا از این راه طعنه زنند. باید به آن سنگدلانی که علم را بهانه کرده و به دیگران فخر میآ*فروشند، ثابت کنم که خاک پای من هم نخواهند شد. باید همه آن تیره دلان مغرور و متکبر را به زانو در آورم، آنگاه خود خاضع ترین و افتاده ترین مرد روی زمین باشم.
      شهید دکتر مصطفی چمران
      اللهم صل علی محمد و ال محمد و عجل فرجهم
      ; C is not for children

      دیدگاه


        پاسخ : کوچ کردن از کدویژن به AtmelStudio

        عرض سلام و ادب
        چطور میتونم یک پروژه اتمل استودیو که با C نوشته شده رو به خروجی اسمبلی تبدیل کنم؟
        اینکه دیباگ کنم و بعدش Disassembly رو ببینم رو میدونم...ولی خب اونجا مشکلی ک هست اینه که کلی باید ویرایش بشه...آدرس قبل دستورات باید حذف بشه و ...

        راهی نیست که یه خروجی شسته رفته اسمبلی بده بهم؟

        با تشکر
        تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

        www.intelart.ir


        ساخت کنترلر دما PID فازی با AVR [آموزشی]

        دیدگاه


          پاسخ : کوچ کردن از کدویژن به AtmelStudio

          از فایل خروجی با پسوند lss. استفاده کنید. در حالت Debug سورس برنامه هم نشان داده می شود و در حالت Release خیر.
          گاهی افرادی به موفقیت های بزرگ می رسند، تنها به این دلیل ساده که نمی دانند کاری که به آن دست زده اند بسیار دشوار، بلکه غیر ممکن است.

          دیدگاه


            پاسخ : کوچ کردن از کدویژن به AtmelStudio

            نوشته اصلی توسط Hamed Gh
            از فایل خروجی با پسوند lss. استفاده کنید. در حالت Debug سورس برنامه هم نشان داده می شود و در حالت Release خیر.
            دوست عزیز سلام
            اینطوری که شما می فرمایید درسته که خروجی اسمبلی میده ولی ابتدای هر خط شماره دستور رو میذاره که اینطوری اگه کپی بشه باز باید دوباره این شماره ها برداشته بشه...
            مگه اینکه از برنامه های ادیت متن استفاده کنم و اون شماره ها رو بردارم...من فکر کردم میشه کاری کرد که کل پروژه رو به اسمبلی تبدیل کنه ...
            نمیشه فلگ یا دستور دیگه ای به دستورات کامپایلر اضافه کرد که اسمبلی رو هم بده؟
            در نهایت تمام دستورات که باید به اسمبلی ترجمه بشند...
            تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

            www.intelart.ir


            ساخت کنترلر دما PID فازی با AVR [آموزشی]

            دیدگاه


              پاسخ : کوچ کردن از کدویژن به AtmelStudio

              اگر درست متوجه شده باشم، هدف این هست که از کدهای تولید شده در جای دیگری استفاده کنید. در این صورت فلگی وجود دارد به صورت S- که اگر به کامپایلر اضافه شود کدها رو ترجمه می کند اما کامپایل نمی کند. این مورد رو با یک پروژه کوچک تست کردم و نتیجه این شد که هر چند عملیات کامپایل با Error مواجه شد اما در فایل خروجی با پسوند o. سورس کد اسمبلی ایجاد شد که فقط شامل کدهای فایل main پروژه بود و برای توابعی که در سورس های دیگر پروژه قرار داشتند فقط دستور call نشان داده شد. برای این کار در مسیر زیر فلگ رو اضافه کنید.
              Toolchain -> AVR/GNU C Compiler -> Misc... -> Other flags
              در حالت Disassembly در بالای کدها گزینه هایی برای عدم نمایش عبارات اضافی هست اما باز عبارات بعد دستورها باقی می مانند.
              گاهی افرادی به موفقیت های بزرگ می رسند، تنها به این دلیل ساده که نمی دانند کاری که به آن دست زده اند بسیار دشوار، بلکه غیر ممکن است.

              دیدگاه


                پاسخ : کوچ کردن از کدویژن به AtmelStudio

                نوشته اصلی توسط Hamed Gh
                اگر درست متوجه شده باشم، هدف این هست که از کدهای تولید شده در جای دیگری استفاده کنید. در این صورت فلگی وجود دارد به صورت S- که اگر به کامپایلر اضافه شود کدها رو ترجمه می کند اما کامپایل نمی کند. این مورد رو با یک پروژه کوچک تست کردم و نتیجه این شد که هر چند عملیات کامپایل با Error مواجه شد اما در فایل خروجی با پسوند o. سورس کد اسمبلی ایجاد شد که فقط شامل کدهای فایل main پروژه بود و برای توابعی که در سورس های دیگر پروژه قرار داشتند فقط دستور call نشان داده شد. برای این کار در مسیر زیر فلگ رو اضافه کنید.
                Toolchain -> AVR/GNU C Compiler -> Misc... -> Other flags
                در حالت Disassembly در بالای کدها گزینه هایی برای عدم نمایش عبارات اضافی هست اما باز عبارات بعد دستورها باقی می مانند.
                بله دوست عزیزم


                دقیقا همینه
                ولی من فکر میکردم میشه کاری کرد که کل پروژه رو به اسمبلی تبدیل کنه...اینطور ک شما میفرمایید فقط فایل Main ترجمه میشه...
                اگه تمام توابع رو به main منتقل کنم درست نمیشه؟
                تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                www.intelart.ir


                ساخت کنترلر دما PID فازی با AVR [آموزشی]

                دیدگاه


                  پاسخ : کوچ کردن از کدویژن به AtmelStudio

                  اگه تمام توابع رو به main منتقل کنم درست نمیشه؟
                  روال کار کامپایلر در حالت عادی به این صورت هست که سورس هارو به صورت جداگانه کامپایل و در نهایت به یکدیگر لینک می کند پس به احتمال زیاد این کار جواب خواهد داد.
                  گاهی افرادی به موفقیت های بزرگ می رسند، تنها به این دلیل ساده که نمی دانند کاری که به آن دست زده اند بسیار دشوار، بلکه غیر ممکن است.

                  دیدگاه


                    پاسخ : کوچ کردن از کدویژن به AtmelStudio

                    نوشته اصلی توسط Hamed Gh
                    روال کار کامپایلر در حالت عادی به این صورت هست که سورس هارو به صورت جداگانه کامپایل و در نهایت به یکدیگر لینک می کند پس به احتمال زیاد این کار جواب خواهد داد.
                    پس من چک میکنم..اگه مشکلی بود باز مزاحمتون میشم...
                    متشکرم دوست عزیز
                    تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                    www.intelart.ir


                    ساخت کنترلر دما PID فازی با AVR [آموزشی]

                    دیدگاه


                      پاسخ : کوچ کردن از کدویژن به AtmelStudio

                      سلام به همه
                      ***********
                      توجه مهم: دوستانی که این پست رو میخونن حتما پست بعد از من که جناب Hamed Gh گذاشتن رو هم بخونن توضیحات ایشون کاملتره
                      ***********
                      برای برگشت از توابع یا سابروتین ها میشه از دو دستور زیر استفاده کرد:
                      [code=c]return;[/code]
                      یا
                      [code=c]reti();[/code]
                      حالا این دوتا چه فرقی با هم دارن؟
                      توی دستور
                      [code=c]return;[/code]
                      فقط از سابروتینی که هستیم برمیگردیم
                      اما دستور زیر
                      [code=c]reti();[/code]
                      به غیر از برگشتن از سابروتین وقفه سراسری رو هم فعال میکنه و البته تنها برای روتین وقفه هایی که با صفت ISR_NAKED هستن قابل نوشتن و در غیر اینصورت پرش به جاهای نا مشخص خواهید داشت
                      چرا؟
                      دلیل:
                      از دستور
                      [code=c]return;[/code]
                      باید در سابروتین هایی که غیر از وقفه ها هستن استفاده بشه(غیر از ISR ها) و از دستور
                      [code=c]reti();[/code]
                      باید درهنگامی که قصد برگشت از سابروتین وقفه ها رو داریم (از ISR ها) استفاده کنیم. (توجه مهم: این دستور ;()reti تنها برای روتین وقفه هایی که با صفت ISR_NAKED هستن قابل نوشتن و در غیر اینصورت پرش به جاهای نا مشخص خواهید داشت)
                      بازم چرا؟
                      دلیل:
                      دلیل این موضوع اینه که هنگامی که وقفه سراسری فعاله و وقفه ای رخ میده زمانی که میکرو از خط برنامه به ISR (سابروتین) وقفه مربوطه پرش میکنه در ابتدا به طور خود کار وقفه سراسری رو غیر فعال میکنه و برای همین هنگام برگشت باید از دستور
                      [code=c]reti();[/code]
                      استفاده کنیم تا دوباره وقفه سراسری فعال بشه
                      --------------

                      (توجه مهم: این دستور ;()reti تنها برای روتین وقفه هایی که با صفت ISR_NAKED هستن قابل نوشتن و در غیر اینصورت پرش به جاهای نا مشخص خواهید داشت)
                      --------------
                      به HELP خود نرم افزار Atmel Studio 6 توجه کنین:
                      Macro reti
                      کد:
                      #define reti()

                      Returns from an interrupt routine, enabling global interrupts. This should be the last command executed before leaving an ISR defined with the ISR_NAKED attribute.

                      This macro actually compiles into a single line of assembly, so there is no function call overhead.
                      ای خدا ، من باید از نظر علم از همه برتر باشم، تا مبادا که دشمنان مرا از این راه طعنه زنند. باید به آن سنگدلانی که علم را بهانه کرده و به دیگران فخر میآ*فروشند، ثابت کنم که خاک پای من هم نخواهند شد. باید همه آن تیره دلان مغرور و متکبر را به زانو در آورم، آنگاه خود خاضع ترین و افتاده ترین مرد روی زمین باشم.
                      شهید دکتر مصطفی چمران
                      اللهم صل علی محمد و ال محمد و عجل فرجهم
                      ; C is not for children

                      دیدگاه


                        پاسخ : کوچ کردن از کدویژن به AtmelStudio

                        نوشته اصلی توسط مهدی رهی
                        به HELP خود نرم افزار Atmel Studio 6 توجه کنین:
                        Macro reti
                        کد:
                        #define reti()

                        Returns from an interrupt routine, enabling global interrupts. This should be the last command executed before leaving an ISR defined with the ISR_NAKED attribute.

                        This macro actually compiles into a single line of assembly, so there is no function call overhead.
                        در حالت عادی نیازی به نوشتن این کد نیست چرا که کامپایلر آن را قرار خواهد داد اما طبق متن نقل قول شده زمانی که روتین وقفه دارای صفت ISR_NAKED هست باید این دستور را آخرین دستور روتین وقفه قرار دهیم تا بتوانیم به آدرس قبلی کدهای درحال اجرا برگردیم. اما ISR_NAKED چیست؟ اگر به کدهای خروجی کامپایلر دقت کنید در ابتدا و انتهای روتین وقفه یک سری کدهای push , pop مشاهده می کنید که حتما با عملکردشان آشنا هستید. با تعریف روتین وقفه به صورت NAKED این کدها تولید نمی شوند و برنامه نویس باید به آن دقت داشته باشد و بنا به نیاز آنها را قرار دهد. reti هم یکی از آنهاست که کد اسمبلی جهت خروج از روتین وقفه هست.
                        گاهی افرادی به موفقیت های بزرگ می رسند، تنها به این دلیل ساده که نمی دانند کاری که به آن دست زده اند بسیار دشوار، بلکه غیر ممکن است.

                        دیدگاه


                          پاسخ : کوچ کردن از کدویژن به AtmelStudio

                          سلام دوستان. ممنون از عزیزانی که این تایپک رو درست کردند. خیلی از محیطش خوشم اومد.
                          الان میخوام که کتابخونه آقای کی نژاد برای LCD کارکتری رو اینجا هم داشته باشم. این تابع ارور میده و نمیشه. به نظرتون مشکل از کجاست:
                          [code=c]void LCDStringFlash(static const uint8_t *data PROGMEM);[/code]
                          توی کتابخونه اصلی به این شکل بوده که برای کدویژن نوشته شده بود:
                          [code=c]void LCDStringFlash(char flash *data);[/code]
                          ---------
                          .
                          .
                          ...........

                          دیدگاه


                            پاسخ : کوچ کردن از کدویژن به AtmelStudio

                            نمونه کد و خطای ایجاد شده را قرار دهید.

                            گاهی افرادی به موفقیت های بزرگ می رسند، تنها به این دلیل ساده که نمی دانند کاری که به آن دست زده اند بسیار دشوار، بلکه غیر ممکن است.

                            دیدگاه


                              پاسخ : کوچ کردن از کدویژن به AtmelStudio

                              نوشته اصلی توسط Hamed Gh
                              نمونه کد و خطای ایجاد شده را قرار دهید.
                              نمونه کد که همون تابعی هست که تو پست قبلی اشاره کردم.
                              این هم اروری که میده :
                              [code=c]Error 1 storage class specified for parameter[/code]
                              ---------
                              .
                              .
                              ...........

                              دیدگاه


                                پاسخ : کوچ کردن از کدویژن به AtmelStudio

                                توابع دسترسی به حافظه فلش در اتمل استدیو کمی متقاوت با کدویژنه و دلیل ارور هم فکر کنم همین باشه.

                                در پست های اول سید در این باره توضیحاتی رو ارائه دادن که توصیه می کنم اونا رو بخونید...
                                موفق باشید
                                چرا ناراحتی پاتریک!
                                + امروز ی بچه دیدم سرچهارراه گل میفروخت
                                - از دیدنش ناراحت شدی؟
                                + نه
                                پس چی ناراحتت کرده
                                + اینکه دیدن اینجور بچه ها انقدر واسم عادی شده که دیگه ناراحتم نمیکنه
                                ------------------------------------------------------------------------------------------------------
                                تاحالا فکر کردی بیسواد کیه؟- بی سواد یعنی کسی که نمیتونه ذهنیاتش رو عملی کنه!
                                ------------------------------------------------------------------------------------------------------
                                محصولات

                                دیدگاه

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