اطلاعیه

Collapse
No announcement yet.

مشکل اساسی با تولید فایل .eep در کدویژن

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

    مشکل اساسی با تولید فایل .eep در کدویژن

    با سلام.
    دوستان من توی پروژه ام نیاز داشتم که چند متغیر رو در محیط eeprom تعریف کنم.ولی بعد از اینکه برنامه رو کامپایل می کنم محتوای فایل .eep موجود در پوشه ی Exe خالیه.یعنی اینکه همیشه محتویات داخلش
    :00000001FF
    هستش.حتی اگه من 1000 تا متغیر در محیط برنامه هام و توابعم تعریف کنم و از شون در برنامم استفاده کنم باز هم محتوای این فایل بعد از کامپایل تغییرنمی کنه و ثابته.
    دوستان من برای اینکه این فایل همانند فایل hex و coff درست تولید بشه .باید چیکار کنم؟(حیاتی)
    اصلا خودتون برنامه نمونه ساده زیر روکامپایل کنید و محتویات فایل .eep رو چک کنید ببینید واسه شما هم کامپایلر دیتا رو بد تولید می کنه.
    ممنونم.
    کد:
    #include <mega8.h>
    eeprom signed char m0,m1,m2,m3,m4,m5,m6,m7,m8,m9,m10;
    void main(void)
      {
      m0=2;
      m1=3;
      m2=m0+m1;
      m3=2*m2;
      m4=m0+m3;
      m4+=5;
      m5=m4-m0;
      m6=m5;
      m7=m1+m2+m4+m5;
      m8=45-m6;
      m9=12;
      m10=25;
      while (1);
      }
    براي جوينده ي علم محدوديتي نيست. "ولو بالسين"

    #2
    پاسخ : مشکل اساسی با تولید فایل .eep در کدویژن

    شما به متغیرهات مقدار اولیه ندادی که؟!!!
    مثلا بنویس eeprom signed char m1=22;

    دیدگاه


      #3
      پاسخ : مشکل اساسی با تولید فایل .eep در کدویژن

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

      دیدگاه


        #4
        پاسخ : مشکل اساسی با تولید فایل .eep در کدویژن

        واقعا دستتون درد نکنه.
        با دادن مقدار به متغیرهام به جواب رسیدم.
        /******************************/
        نمی دونم این چه نکته ای واسه eeprom هستش که باید به متغبرهات مقدار بدی که فایل صحیح تولید بشه.در صورتی که متغیرهای حافظه ی sram , flash اینطور نیستند.
        ولی به هر حال ممنون.
        نکته ی خیلی خوبی بود.
        /******************************/
        براي جوينده ي علم محدوديتي نيست. "ولو بالسين"

        دیدگاه


          #5
          پاسخ : مشکل اساسی با تولید فایل .eep در کدویژن

          متغیرهای RAM بطور خودکار موقع تعریف پاک میشن. (کدویژن اینکارو میکنه و تو تنظیماتش هم فکر کنم میشه کنسلش کرد)

          دیدگاه


            #6
            پاسخ : مشکل اساسی با تولید فایل .eep در کدویژن

            نوشته اصلی توسط mojalan
            متغیرهای RAM بطور خودکار موقع تعریف پاک میشن. (کدویژن اینکارو میکنه و تو تنظیماتش هم فکر کنم میشه کنسلش کرد)
            بله همین طوره .
            در ادامه صحبتتون باید بگم:
            در رابطه با متغییر های داخل RAM :
            پاک شدن متغییرهای داخل رم بستگی داره که چطور اون متغییر را تعریف کرده باشید.
            در کل متغییرها را به صورت های زیر میشه تعریف کرد:
            static : که بعد از تعریف تا آخر برنامه دیگه از داخل رم پاک نمیشه و موندگاره.
            auto : حالت پیشفرضه و بعد از اتمام بلوکی که توش تعریف کردین خود به خود ازبین میره
            register : به کامپایلر توصیه میکنه که مقدارش را تو یکی از رجیسترهای همه منظوره cpu قرار بده(البته در صورت امکان)
            extern : بیشتر برای اعلان دیتا آبجکت در کلیه فایلهای پروژه بکار میره . که بعدا لینکر دیتا آبجکت ها را درجای مناسب خودشون قرار میده.

            البته در رابطه با تنظیمات کامپایلر: میشه گفت در کامپایلر های مختلف قسمتی داریم برای تعیین سطح optimization که با بالا بردن سطح اون کامپایلر تا جایی که ممکنه دیتاآبجکت ها و متغییر های اضافی را حذف میکنه. تا هم کمتر در آن واحد از رم استفاده بشه و هم برنامه سریع تر شه (البته بهینه سازی برای کد هم داریم که ربطی به اینجا نداره)
            راه اندازي ماژول 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 سفارش راه انداز ماژول هاي مختلف توسط اعضاي انجمن
            انشالله به زودي تاپيک ها به روز رساني خواهد شد،

            دیدگاه


              #7
              پاسخ : مشکل اساسی با تولید فایل .eep در کدویژن

              من هرموقع متغیر EEprom معرفی میکنم مقدار اولیه نمیدم ولی تا الان مشکل شما رو نداشتم!!

              دیدگاه


                #8
                پاسخ : مشکل اساسی با تولید فایل .eep در کدویژن

                نوشته اصلی توسط saeiddiod
                من هرموقع متغیر EEprom معرفی میکنم مقدار اولیه نمیدم ولی تا الان مشکل شما رو نداشتم!!
                بله همینطوره در اصل این یک مشکل برای ایشون نبوده و منحصرا اینجا و در میکرو تعیین نکردن مقدار اولیه باعث مشکل نمیشود.
                بزارید حالا که در رابطه با رم گفتم در رابطه با ROM هم یک توضیحاتی بدم.(البته با اجازه همه اساتید):
                اول اینکه همون طور که میدونید ROM مخفف کلمه Read Only Memory است یعنی حافظه فقط خواندنی ( که بوسیله یه دیکودر و یه سری فیوز ایجاد میشه) و موارد استفادش بیشتر در ذخیره firmware ها (که کدهای ثابتی هستند)درون آن است. پس وقتی ما میگیم حافظه فقط خواندنی در حالت معمول چیزی نمیتونیم درونش بریزیم و فقط میتونیم مقادیر را ازش بخونیم. ( مقادیری که هنگام ساخت در کارخانه بهش دادیم) اگر فرض کنیم که در میکرو ما کار او کارخونه را در هنگام کامپایل انجام میدیم پس اگر به ROM این مقادیر داده نشود ، این یعنی مشکل و ایراد .
                ولی خوب اینجا یه سوال پیش میاد :چرا اینجا در میکرو مقدار اولیه دادن مشکل بوجود نمی آورد؟
                به خاطر اینکه ROM موجود درون میکرو از نوع EEPROM یا Electrically Erasable Read Only Memory است که خواصیت این رام ها قابل پاک شدن و قابل برنامه ریزی مجدد آنها میباشد. پس ما بوسیله دستورات میتوانیم خانه های ROM میکرو را مقدار دهی کنیم. پس وقتی شما در هنگام کامپایل مقدار اولیه به رام نمیدید مقدار دهی بعدا و در هنگام اجرا توسط پردازنده میکرو قابل انجام است. و کاملا منطقی است که وقتی در برنامه شما مقدار اولیه به متغییر های از نوع eeprom ندادید(البته منحصرا در کدویژن است که دیتا آبجکت از نوع eeprom داریم و در c این معنی ندارد) ، هیچ مقداری درون فایل eep. نباید باشد.
                راه اندازي ماژول 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 سفارش راه انداز ماژول هاي مختلف توسط اعضاي انجمن
                انشالله به زودي تاپيک ها به روز رساني خواهد شد،

                دیدگاه


                  #9
                  پاسخ : مشکل اساسی با تولید فایل .eep در کدویژن

                  می دونید چیه؟
                  من تو هیچ جای برنامه مشکلی نداشتم.
                  اما نکته ای که من رو مشغول خودش کرده اینه که من مقدار دهی اولیه نکردم درست. اما تو برنامم که به همشون مقدار دادم.
                  مگر پیش فرض هر متغیری صفر نیست؟
                  چرا با اون که من تو برنامم ازشون استفاده کردم و مقدار دهی کردم. برنامم تولید نشده بود؟؟؟
                  براي جوينده ي علم محدوديتي نيست. "ولو بالسين"

                  دیدگاه


                    #10
                    پاسخ : مشکل اساسی با تولید فایل .eep در کدویژن

                    نوشته اصلی توسط m52r65
                    مگر پیش فرض هر متغیری صفر نیست؟
                    منم منظورم همین بود....اگه مقدار ندی میکرو خودش مقدار اولیه رو صفر در نظر میگیره.
                    احتمال داره بخاطر ورژن پایین کامپایلرت باشه

                    دیدگاه


                      #11
                      پاسخ : مشکل اساسی با تولید فایل .eep در کدویژن

                      ورژن کامپیالر من 2.05.3 هستش که فکر نمی کنم پایین باشه.البته نسخه ی پرتابله.
                      نمی دونم واقعا.
                      لطفا شما هم برنامه ی ساده ی بالا رو کامپایل کنید و به من اطلاع بدید می خوام مطمئن بشم که کامپایلر پرتابل من مشکل داره یانه؟
                      برنامه ی بالا رو من روی دو کامپیوتر کامپایل کردم و نتیجه یکی شد.
                      براي جوينده ي علم محدوديتي نيست. "ولو بالسين"

                      دیدگاه


                        #12
                        پاسخ : مشکل اساسی با تولید فایل .eep در کدویژن

                        نوشته اصلی توسط m52r65
                        می دونید چیه؟
                        من تو هیچ جای برنامه مشکلی نداشتم.
                        اما نکته ای که من رو مشغول خودش کرده اینه که من مقدار دهی اولیه نکردم درست. اما تو برنامم که به همشون مقدار دادم.
                        مگر پیش فرض هر متغیری صفر نیست؟
                        چرا با اون که من تو برنامم ازشون استفاده کردم و مقدار دهی کردم. برنامم تولید نشده بود؟؟؟
                        نخیر پیش فرض متغییر صفر نیست
                        من فقط تو کامپایلرهای زبان pascal دیدم که پیش فرض متغییر را صفر میگیرن.
                        پیش فرض متغییر هرچیزیه که قبلا توش بوده .
                        عرض کردم: 2 جور میتونید به eeprom مقدار بدید :
                        1- بوسیله پروگرمر: که اگر تو برنامه مقدار اولیه داده باشید که کامپایلر داخل فایل eep. میریزه و در هنگام پروگرام شدن میتونید داخل eeprom بریزید.
                        2- بوسیله کدهای برنامه : که اینکار موکول میشه به بعد از زمان پروگرام شدن و دستوراتی که نوشتید اینکار را میکنن. (هنگام اجرا)

                        مثلا کد زیر رانگاه کنید:
                        کد:
                        #include <mega8.h>
                        eeprom signed char m1=5,m2;
                        void main(void)
                        {
                          m2=8;
                        }
                        (فرض میکنیم سطح optimization کامپایلر رو 0 میکنیم.)
                        مقدار دهی به m1 همون حالت اول است و مقدار دهی به m2 حالت دوم
                        راه اندازي ماژول 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