اطلاعیه

Collapse
No announcement yet.

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

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

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

    نوشته اصلی توسط aseok
    سلام

    بنده میخواستم 6 بیت اول از داده data را با شرط زیر ( منطق شرط با مشاهده عبارت قابل فهم است ) بررسی کنم ، آیا اینکار در اتمل استودیو صحیح است ؟

    باتشکر .


    کد:
    if ( ( temp_even % 2==1 ) && ( data & 0x0002==0 ) && (data & 0x0004==0) && (data & 0x0008==0) && (data & 0x0010==0) && (data & 0x0020==1 ) )
    این سوال دیگه مربوط به atmel studio یا کامپایلر های مختلف نمیشه و مربوط به خود زبان سی است.
    اول اینکه توصیه میکنم خودتون برید کامپایل و چک کنید .
    شرط این if شامل چندین شرط کوچکتر که یک ترکیب عطفی را با هم ساخته اند است. بهتر بود نوع متغییر های استفاده شده را می فرمودید. به عنوان مثال در قسمت اول temp_even باید حتما یک متغییر از نوع عدد صحیح باشد.(چون عملگر % باید حتما بین دو عملوند عدد صحیح قرار گیرد.)
    شرط ها به نظر همه درست است و مشکلی هم ندارد. و بدون ارور کامپایل میشه.

    ولی یک نکته مهم:
    یکم دقیق تر که نگاه کنیم به یک اشتباه محلک در شرط آخر پی میبریم. یعنی شرط زیر:
    (data & 0x0020==1 )
    جواب این شرط همیشه false است پس در نتیجه هیچ وقت بدنه ی if اجرا نمیشود.
    دلیل:
    در صورتی که بیت 5 متغییر دیتا یک باشد در این صورت جای شرط عبارت زیر قرار میگیرد:
    (0x0020==1 )
    واین یعنی:
    ( 1==32 )
    و این غلط است.

    برای درست چک شدن این شرط باید به صورت زیر نوشته شود:
    (data & 0x0020 )

    بهتره بقیه را هم به همین شکل بنویسیم ولی استثناً در این مثال فقط شرط آخر مشکل ایجاد میکرد:

    پس بهتره شرط را به شکل زیر بنویسید. (فرقیم نمیکنه از چه کامپایلری استفاده میکنید)
    کد:
    if ( (temp_even % 2) && !(data & 0x0002) && !(data & 0x0004) && !(data & 0x0008) && !(data & 0x0010) && (data & 0x0020) )
    راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
    کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
    نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
    http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
    انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

    دیدگاه


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

      خیلی متشکرم ، درست شد .

      temp_even و data از نوع int هستند .

      دیدگاه


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

        اگه یک بیت رو ست یا کلر کنیم موقعی که از تابع خارج بشیم به همون حالت قبل(حالت قبل از ورود به تابع) بر میگرده؟یا مقداری که تابع براش ست کرده میشه؟
        چه یافت آنــکه تــو را گم کرد وچه گم کرد آنـکه تــو را یافت.

        دیدگاه


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

          نوشته اصلی توسط صادق ابراهیمی
          اگه یک بیت رو ست یا کلر کنیم موقعی که از تابع خارج بشیم به همون حالت قبل(حالت قبل از ورود به تابع) بر میگرده؟یا مقداری که تابع براش ست کرده میشه؟
          کاش یه مثال بوسیله کد میزدید، من درست متوجه منظورتون نشدم.

          اگر منظورتون ست کردن یک بیت در رجیسترهای مربوط به میکرو است : باید بگم این رجیسترها برای مای برنامه نویس مثل یک سری متغییر سراسری میمونه که در جای مشخص از sram جای گرفته اند پس 1 و 0 کردنشون اصلا بستگی به داخل و خارج تابع نداره هرجایی 1 یا 0 کنیم انجام میشه و تا قبل از اینکه دوباره مقدار دهی نشن ، مقدار قبلی میمونه ( مثل متغییرهای سراسری )

          شایدم منظورتون رد کردن پارامتر به تابع باشه که بعضی از مواقع متغییری که به یک تابع رد میکنیم بعد از اجرای تابع تغییر میکنه و در برخی مواقع تغییر نمیکنه.

          مثال بزنید.
          راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
          کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
          نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
          http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
          انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

          دیدگاه


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

            مثلا
            1-یه برنامه خط به خط دستوراتش اجرا میشه و رجیستر x تو تابع مین ست میشه
            2-بعد برنامه وارد یه تابع و یا وقفه جدید میشه و رجیسترx کلر میشه
            حالا سوال اینجاست که هنگام خروج از مرحله 2 و ورود به تابع مین مقدار رجیستر چیه؟(ست یا کلر)
            کد:
            main(){
            
            set register
            function (){
            clear register
            }
            
            }

            چه یافت آنــکه تــو را گم کرد وچه گم کرد آنـکه تــو را یافت.

            دیدگاه


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

              نوشته اصلی توسط صادق ابراهیمی
              مثلا
              1-یه برنامه خط به خط دستوراتش اجرا میشه و رجیستر x تو تابع مین ست میشه
              2-بعد برنامه وارد یه تابع و یا وقفه جدید میشه و رجیسترx کلر میشه
              حالا سوال اینجاست که هنگام خروج از مرحله 2 و ورود به تابع مین مقدار رجیستر چیه؟(ست یا کلر)
              کد:
              main(){
              
              set register
              function (){
              clear register
              }
              
              }

              خوب پس جوابتون همونه که در پست قبل دادم:
              اگر منظورتون ست کردن یک بیت در رجیسترهای مربوط به میکرو است : باید بگم این رجیسترها برای مای برنامه نویس مثل یک سری متغییر سراسری میمونه که در جای مشخص از sram جای گرفته اند پس 1 و 0 کردنشون اصلا بستگی به داخل و خارج تابع نداره هرجایی 1 یا 0 کنیم انجام میشه و تا قبل از اینکه دوباره مقدار دهی نشن ، مقدار قبلی میمونه ( مثل متغییرهای سراسری )
              پس رجیستر کلیر میشه چون آخریت بار کلیر شده.
              راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
              کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
              نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
              http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
              انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

              دیدگاه


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

                تو یه سری از برنامه ها چنتا کلمه به چشمم خورده که نمیدونم چیه (کلمه کلیدیه ؟!!! استاندارده ؟!!!) مثلا
                کد:
                volatile unit8_t
                اگه ببینم میزارم
                چه یافت آنــکه تــو را گم کرد وچه گم کرد آنـکه تــو را یافت.

                دیدگاه


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

                  ببخشید من تازه وارد برنامه نویسی با کدویژن شدم می خواستم ببینم بهتره همون کدویژنو دنبال کنم یا اتمل ستدیو؟؟؟؟
                  کدومش واسه اینده بهتره؟؟؟؟
                  به جای اینکه جای کسی را بگیرید سعی کنید جای واقعیه خود را بیابید

                  TABRIZ

                  دیدگاه


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

                    نوشته اصلی توسط TABASOOMTZ
                    ببخشید من تازه وارد برنامه نویسی با کدویژن شدم می خواستم ببینم بهتره همون کدویژنو دنبال کنم یا اتمل ستدیو؟؟؟؟
                    کدومش واسه اینده بهتره؟؟؟؟
                    معلومه استودیو میدونی چرا غیر از حجم برنامه و اینکه دستت خیلی خیلی بازتره بعدا که خاستی با آرم کار کنی مشکل نداری
                    چه یافت آنــکه تــو را گم کرد وچه گم کرد آنـکه تــو را یافت.

                    دیدگاه


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

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

                      TABRIZ

                      دیدگاه


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

                        سلام

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

                        باتشکر .

                        a##b

                        دیدگاه


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

                          نوشته اصلی توسط صادق ابراهیمی
                          تو یه سری از برنامه ها چنتا کلمه به چشمم خورده که نمیدونم چیه (کلمه کلیدیه ؟!!! استاندارده ؟!!!) مثلا
                          کد:
                          volatile unit8_t
                          اگه ببینم میزارم
                          برای volatile
                          http://www.eca.ir/forum2/index.php?topic=67521.0
                          برای uint8_t
                          به نظرم در پستهای قبلی توضیح داده شده در غیر این صورت
                          http://www.eca.ir/forum2/index.php?topic=54475.msg345501#msg345501
                          گاهی افرادی به موفقیت های بزرگ می رسند، تنها به این دلیل ساده که نمی دانند کاری که به آن دست زده اند بسیار دشوار، بلکه غیر ممکن است.

                          دیدگاه


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

                            نوشته اصلی توسط صادق ابراهیمی
                            تو یه سری از برنامه ها چنتا کلمه به چشمم خورده که نمیدونم چیه (کلمه کلیدیه ؟!!! استاندارده ؟!!!) مثلا
                            کد:
                            volatile unit8_t
                            اگه ببینم میزارم
                            بله کلیدیه

                            در رابطه با بهینه سازی یا optimization شنیدید؟ کامپایلر خودش سر خود و بدون اطلاع برنامه نویس سعی میکنه که کد هایی که برنامه نویس مینویسه را بهینه کنه و بعضی از کدهای اضافی را پاک کنه.
                            برای مثال کد زیر را نگاه کنید:

                            کد:
                            int x;
                             
                            void function(void) 
                            {
                              x= 0;
                              while (x != 255);
                            }
                            خوب برای مثال من این کد را نوشتم ، کامپایلر میگه خوب x که قبل از ورود به وایل 0 شده و هیچوقت 255 نمیشه که از وایل بیاد بیرون پس این حلقه وایل یک حلقه بینهایته. پس میاد کد را به شکل زیر پتیمایز میکنه:

                            کد:
                            int x;
                             
                            void function(void) 
                            {
                              x= 0;
                              while (1);
                            }
                            ولی خوب من برنامه نویس نمیخوام اینجوری بشه چون مثلا یک وقفه در نظر گرفتم و داخل روتین اون وقفه مقدار x را تغییر میدهم و ممکنه به 255 برسه و اینطوری میخوام از تابع بکشه بیرون. ولی کامپایلر که نمیدونه و با پتیمایز کردن کلا کاسه کوزه را میزنه به هم.
                            حالا برای اینکه به کامپایلر بگیم که اینکار را نکنه باید متغییر را از نوع volatile اعلان کنیم.
                            راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
                            کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
                            نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
                            http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
                            انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

                            دیدگاه


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

                              نوشته اصلی توسط TABASOOMTZ
                              ببخشید می شه این نرم افزارو واسه دانلود بزارین؟؟؟
                              به پست اول این تاپیک مراجعه کنید.
                              راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
                              کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
                              نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
                              http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
                              انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

                              دیدگاه


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

                                نوشته اصلی توسط aseok
                                سلام

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

                                باتشکر .

                                a##b
                                وقتی از # استفاده شده یعنی این مربوط به پری پروسسور هاست. و در اونجا کاربرد داره.

                                عملگر ## باعث الحاق یا concatenate دو عملوند خود میشود .
                                برای مثال دیفاین زیر را در نظر بگیرید:

                                کد:
                                #define concat(a,b) a##b
                                حالا اگر به شبه تابع concat دو عدد بدهیم آنها را باهم مرج یا الحاق میکند:

                                یعنی کد زیر:
                                کد:
                                x=concat(12,5);
                                با کد زیر برابر است:

                                کد:
                                x= 125;


                                راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
                                کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
                                نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
                                http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
                                انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

                                دیدگاه

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