اطلاعیه

Collapse
No announcement yet.

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

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

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

    من تا حالا ++C کار نکردم ولی فکر کنم مشکل شما مربوط به کلاس برنامتون میشه
    در static class نمیشه از new استفاده کرد
    امام علی (علیه السلام) : الزکات العلم نشرهُ/ زکات علم نشر آن است

    دیدگاه


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

      نوشته اصلی توسط Abbas Sarami
      من تا حالا ++C کار نکردم ولی فکر کنم مشکل شما مربوط به کلاس برنامتون میشه
      در static class نمیشه از new استفاده کرد
      من اصلا کلاس تعریف نکردم دوست عزیز...قصدم اینه که یه آرایه تعریف کنم ولی اندیس یا تعداد اعضای اون آرایه توسط کاربر تعیین میشه...
      تنها مشکلم اینه که این کلمه کلیدی تو تابع main شناخته شده ست ولی تو لایبرری نمیشناستش! :angry:
      تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

      www.intelart.ir


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

      دیدگاه


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

        برای اطلاعات عمومی خودم میپرسم :mrgreen: :
        آیا تابع main درون class ایجاد میشه یا نه (کلاس اصلی برنامه)؟
        امام علی (علیه السلام) : الزکات العلم نشرهُ/ زکات علم نشر آن است

        دیدگاه


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

          نوشته اصلی توسط Abbas Sarami
          برای اطلاعات عمومی خودم میپرسم :mrgreen: :
          آیا تابع main درون class ایجاد میشه یا نه (کلاس اصلی برنامه)؟
          والا تاجایی ک میدونم اصلا objective programming یا همون برنامه نویسی شئ گرا ک از کلاس ها داخلش استفاده میشه فقط تو ++C قابل استفاده ست و زبان C شئ گرایی نداره.
          کلاس برنامه هم توی #C استفاده میشه که کلا بیسش شئ گرایی هست و شما محبورید ک همه چی رو داخل کلاس برنامه تون تعریف کنید ولی سی و سی++ اینطور نیست.
          تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

          www.intelart.ir


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

          دیدگاه


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

            نوشته اصلی توسط punisher.x64

            یه سوال دیگه هم دارم :

            من یه پروژه از نوع ++C تعریف کردم و میخوام داخل یکی از فایل های لایبرری یه متغیر آرایه دینامیک تعریف کنم
            اینطوری :

            کد:
            volatile unsigned char *XX;
            
            ----
            ----
            
            ----
            
            XX=new unsigned char[5]
            مشکلی که دارم اینه که به کلمه new گیر میده میگه تعریف نشده.در صورتی که اگه داخل خود تابع main اینطوری تعریف کنم مشکلی نداره.
            ببخشید اگه سوالام زیاد شد...
            سلام. ببینید وقتی می نویسید new در واقع دارید که دستور اجرایی می نویسد. اینکه شما می خواهید قبل از main بنویسید مثل این می مونه که مثلا قبل از تابع main بنویسید DDRA=255 مطمئنا چنین کدی قبل از تابع main تعریف شده نیست. چون نیاز به پردازش داره.

            دیدگاه


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

              نوشته اصلی توسط sadeghmojtabaei
              سلام. ببینید وقتی می نویسید new در واقع دارید که دستور اجرایی می نویسد. اینکه شما می خواهید قبل از main بنویسید مثل این می مونه که مثلا قبل از تابع main بنویسید DDRA=255 مطمئنا چنین کدی قبل از تابع main تعریف شده نیست. چون نیاز به پردازش داره.
              والا فکر نکنم اینطوری باشه.DDRA وقتی تعریف نشده ست که هدرفایلش اینکلود نشده باشه...وقتی اینکلود شد شما بعد از اون هرجا دوست دارید ازش استفاده کنید...مثل وقتایی که لایبرری مینویسیم و توش از DDRa و امثال اون استفاده میکنیم و کاملا هم شناخته شده هستند...
              مشکل من اینه که new فقط توی تابع main شناخته میشه...
              تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

              www.intelart.ir


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

              دیدگاه


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

                عملگر new و delete در اتمل استودیو به دلیل محدود بودن فضای حافظه رم میکروکنترلر به صورت پیش فرض غیر فعال هست به همین خاطر موقع کامپایل خطای تعریف نشده بودن داریم. اینکه در مورد شما در صورت استفاده داخل تابع main خطایی نشان نداده جای سوال هست که احتمالا شما کتابخانه ++C رو پدیت کردید یا خودتون کدش رو نوشتید.

                نکته بعدی اینکه هدف از ایجاد فضای آزاد با استفاده از new این هست که تابع مورد نظر برای انجام عملیات خاص خودش از این فضا استفاده کرده و بعد از انجام عملیات باید این فضا رو به سیستم برگرداند که احتمالا دلیل اینکه استفاده از new در داخل تابع main مشکلی بوجود نیاورده به خاطر این هست که باید فقط داخل توابع از آن استفاده کرد.

                این لینک شاید مشکلتون رو حل کنه
                http://jaxcoder.com/Projects.aspx?id=788781549

                ولی به طور کلی در میکرو کنترلرهای مخصوصا 8 بیتی استفاده از ++C به دلیل حجم کد بیشتر و سرعت اجرای کندتر خیلی منطقی نیست اما اگر حساسیت زمانی و سرعت اجرا مهم نیست و یا برای میکروهای 32 بیتی می شه از قابلیت های ++C که در همان سایت بالا بهش اشاره شده در برنامه نویسی استفاده کرد.

                در مورد مقداردهی به رجیسترها این کار داخل تابع main انجام می شه و موقع استفاده از کتابخانه ها در صورت نیاز باز هم از داخل تابع main فراخوانی میشن به عنوان مثال وقتی از کتابخانه lcd استفاده می کنیم ابتدای تابع main تابع lcd init رو فراخوانی می کنیم.





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

                دیدگاه


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

                  نوشته اصلی توسط Hamed Gh
                  عملگر new و delete در اتمل استودیو به دلیل محدود بودن فضای حافظه رم میکروکنترلر به صورت پیش فرض غیر فعال هست به همین خاطر موقع کامپایل خطای تعریف نشده بودن داریم. اینکه در مورد شما در صورت استفاده داخل تابع main خطایی نشان نداده جای سوال هست که احتمالا شما کتابخانه ++C رو پدیت کردید یا خودتون کدش رو نوشتید.

                  نکته بعدی اینکه هدف از ایجاد فضای آزاد با استفاده از new این هست که تابع مورد نظر برای انجام عملیات خاص خودش از این فضا استفاده کرده و بعد از انجام عملیات باید این فضا رو به سیستم برگرداند که احتمالا دلیل اینکه استفاده از new در داخل تابع main مشکلی بوجود نیاورده به خاطر این هست که باید فقط داخل توابع از آن استفاده کرد.

                  این لینک شاید مشکلتون رو حل کنه
                  http://jaxcoder.com/Projects.aspx?id=788781549

                  ولی به طور کلی در میکرو کنترلرهای مخصوصا 8 بیتی استفاده از ++C به دلیل حجم کد بیشتر و سرعت اجرای کندتر خیلی منطقی نیست اما اگر حساسیت زمانی و سرعت اجرا مهم نیست و یا برای میکروهای 32 بیتی می شه از قابلیت های ++C که در همان سایت بالا بهش اشاره شده در برنامه نویسی استفاده کرد.

                  در مورد مقداردهی به رجیسترها این کار داخل تابع main انجام می شه و موقع استفاده از کتابخانه ها در صورت نیاز باز هم از داخل تابع main فراخوانی میشن به عنوان مثال وقتی از کتابخانه lcd استفاده می کنیم ابتدای تابع main تابع lcd init رو فراخوانی می کنیم.
                  خیلی ممنون بابت پاسخ کاملتون...پس اینطور که شما میفرمایید استفاده از new و delete غیر منطقیه...
                  من نمیدونستم استفاده از ++C اینقدر حجم کد رو بالا میبره...
                  یه برنامه هست که دارم روش کار میکنم.امشب که کامپایلش کردم دیدم 4 کیلو جا گرفته...اصلا ماتم برده بود...پروژه رو عوض کردم از C استفاده کردم شد 700 بایت...

                  یه سوال دیگه.بعضی از دوستان میگن کد ویژن کدهای بهینه تری از نظر سایز کد تولید میکنه...حقیقت داره؟
                  با تشکر
                  تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                  www.intelart.ir


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

                  دیدگاه


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

                    من درباره پشتیبانی avr از این موارد اطلاعی ندارم ولی در این حد می دانم که اگر شما حتی داخل visual studio و با زبان c++ یا c# کدی که در بالا گذاشتید را بنویسید خطا خواهید داشت چون این دستور حتما باید داخل یک تابع نوشته شود حالا تابع main یا توابع دیگه. البته سوالی که برای من ایجاد شد اینه که آیا new قبل از main داخل تابع دیگه هست و کار نمیده؟ یا داخل هیچ تابعی نیست؟

                    دیدگاه


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

                      نوشته اصلی توسط sadeghmojtabaei
                      من درباره پشتیبانی avr از این موارد اطلاعی ندارم ولی در این حد می دانم که اگر شما حتی داخل visual studio و با زبان c++ یا c# کدی که در بالا گذاشتید را بنویسید خطا خواهید داشت چون این دستور حتما باید داخل یک تابع نوشته شود حالا تابع main یا توابع دیگه. البته سوالی که برای من ایجاد شد اینه که آیا new قبل از main داخل تابع دیگه هست و کار نمیده؟ یا داخل هیچ تابعی نیست؟
                      داخل ++C اینو امتحان کردم...داخل بدنه اصلی یک کلاس اینو نوشتم و کامپایل هم شد...
                      داخل اتمل استودیو فقط توی تابع main میشه ازش استفاده کرد و توی توابع دیگه ناشناخته ست...
                      البته به حجم کد توجه نکرده بودم ...استفاده ازش واسه میکروهای 8بیتی خیلی به صرفه نیست.حجم کد رو خیلی میبره بالا...5 برابر حجم کدم زیاد میشد وقتی از ++C استفاده میکردم...
                      تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                      www.intelart.ir


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

                      دیدگاه


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

                        نوشته اصلی توسط punisher.x64
                        پس اینطور که شما میفرمایید استفاده از new و delete غیر منطقیه...
                        معادل این دستورات در زبان C توابع malloc و free هستند که قابل استفاده هم هستند ولی به هر حال باید محدودیتهای یک میکروکنترلر رو در نظر داشته باشید. در این رابطه در Help اتمل استودیو در قسمت AVR libc -> Memory Areas and Using malloc توضیحات لازم داده شده.

                        نوشته اصلی توسط punisher.x64
                        یه سوال دیگه.بعضی از دوستان میگن کد ویژن کدهای بهینه تری از نظر سایز کد تولید میکنه...حقیقت داره؟
                        با تشکر
                        کامپایلری مناسب هست که ضمن حجم کد خروجی کمتر سرعت و دقت و پایداری بالاتری هم داشته باشد. اگر در کدویژن سایز بهینه تر باشد مواردی مثل دقت و پایداری کدها در آن کم اهمیت تر هستند مخصوصا اینکه در ایران کسی از نسخه اورجینال استفاده نمیکند. اما در GCC این به تجربه و مهارت برنامه نویس برمیگردد که طوری برنامه بنویسد که مشکلی ایجاد نکند و سایز کد بهینه تر باشد. مطمئنا در یک پروژه دارای ارزش تجاری سایز کد نسبت به سرعت و دقت خیلی مورد توجه نیست و این مورد موقعی حساس هست که مثلا برای mega8 کد خروجی مثلا 8.1 کیلو باشد که یک برنامه نویس خوب راه حلهایی برای آن پیدا میکند.
                        این موارد رو باید در کدهای یکسان در هر دو محیط و در شرایط یکسان و با رعایت اصول برنامه نویسی مورد قضاوت قرار داد.

                        منظور از اصول برنامه نویسی مواردی هست که در فایل زیر به همراه مثال آورده شده:
                        www.atmel.com/images/doc8453.pdf

                        این لینک هم مفید هست
                        http://www.eca.ir/forum2/index.php?topic=41450.msg242440#msg242440
                        گاهی افرادی به موفقیت های بزرگ می رسند، تنها به این دلیل ساده که نمی دانند کاری که به آن دست زده اند بسیار دشوار، بلکه غیر ممکن است.

                        دیدگاه


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

                          با سلام خدمت دوستان
                          در اتمل استودیو نحوه کار با eeprom از جمله تعریف متغیر، مقدار دهی و خواندن از اون به چه نحویه
                          با تشکر./
                          .The best question deserves a better answer
                          =-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=
                          «پناه»می برم «به خدا»
                          از عـیبی که ، «امروز» در خود می بینم، و «دیروز» «دیگران را» به خاطر، «هـمان عیـب» ملامت کرده ام.
                          محتاط باشیم، در «سرزنش» و «قضاوت کردن دیگران». وقتی نه از «دیروز او» خبر داریم و نه از "فردای خودمان" .

                          دیدگاه


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

                            نوشته اصلی توسط Hamed Gh
                            معادل این دستورات در زبان C توابع malloc و free هستند که قابل استفاده هم هستند ولی به هر حال باید محدودیتهای یک میکروکنترلر رو در نظر داشته باشید. در این رابطه در Help اتمل استودیو در قسمت AVR libc -> Memory Areas and Using malloc توضیحات لازم داده شده.
                            کامپایلری مناسب هست که ضمن حجم کد خروجی کمتر سرعت و دقت و پایداری بالاتری هم داشته باشد. اگر در کدویژن سایز بهینه تر باشد مواردی مثل دقت و پایداری کدها در آن کم اهمیت تر هستند مخصوصا اینکه در ایران کسی از نسخه اورجینال استفاده نمیکند. اما در GCC این به تجربه و مهارت برنامه نویس برمیگردد که طوری برنامه بنویسد که مشکلی ایجاد نکند و سایز کد بهینه تر باشد. مطمئنا در یک پروژه دارای ارزش تجاری سایز کد نسبت به سرعت و دقت خیلی مورد توجه نیست و این مورد موقعی حساس هست که مثلا برای mega8 کد خروجی مثلا 8.1 کیلو باشد که یک برنامه نویس خوب راه حلهایی برای آن پیدا میکند.
                            این موارد رو باید در کدهای یکسان در هر دو محیط و در شرایط یکسان و با رعایت اصول برنامه نویسی مورد قضاوت قرار داد.

                            منظور از اصول برنامه نویسی مواردی هست که در فایل زیر به همراه مثال آورده شده:
                            www.atmel.com/images/doc8453.pdf

                            این لینک هم مفید هست
                            http://www.eca.ir/forum2/index.php?topic=41450.msg242440#msg242440
                            خیلی ممنون بابت فایل...خیلی جالب بود...
                            اون تاپیک رو هم خوندم...به این نتیجه رسیدم که واسه من همون اتمل استودیو بهترینه! :wow:

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

                            www.intelart.ir


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

                            دیدگاه


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

                              نوشته اصلی توسط •.´™ مَسِِــــح`.•
                              با سلام خدمت دوستان
                              در اتمل استودیو نحوه کار با eeprom از جمله تعریف متغیر، مقدار دهی و خواندن از اون به چه نحویه
                              با تشکر./
                              از این فایل استفاده کنید.
                              http://deans-avr-tutorials.googlecode.com/svn/trunk/EEPROM/Output/EEPROM.pdf

                              دیدگاه


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

                                سلام دوستان
                                میشه بگید با این وارنینگ چکار باید بکنم؟


                                با اینکه F_CPU رو دیفاین میکنم ولی بعضی وقتا این وارنینگ میاد...دوباره که کامپایل میکنم دیگه وارنینگ نمیده...کلا باید دو حالت باشه دیگه : یا وارنینگ بده یا نده نه اینکه بعضی وقتا بیاد و بعضی وقتا نه...
                                ممنون میشم اگه راهنمایی کنید...
                                تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                                www.intelart.ir


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

                                دیدگاه

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