اطلاعیه

Collapse
No announcement yet.

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

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

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

    ببخشید بنده میخواستم 12 بیت اول از data را در بسته های 6 بیتی ارسال کنم ، یک راه که به نظرم اومد از طریق polling ( سرکشی ) بود که هنگام خالی شدن بافر ارسال ، 6 بیت دوم را قرار بده :
    کد:
    while(!UDRE);
    		 
    	 UDR = (char)(angle) ;
    	 
    	 while(!UDRE);
    	 
    	 UDR = (char)(angle / 64) ;
    خب یک راه دیگر هم استفاده از وقفه های مربوط به بافر و شیفت رجیستر هست ، لطفا این دو روش رو از جنبه های مختلف بررسی فرمایید .

    باتشکر .

    دیدگاه


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

      نوشته اصلی توسط aseok
      ببخشید بنده میخواستم 12 بیت اول از data را در بسته های 6 بیتی ارسال کنم ، یک راه که به نظرم اومد از طریق polling ( سرکشی ) بود که هنگام خالی شدن بافر ارسال ، 6 بیت دوم را قرار بده :
      کد:
      while(!UDRE);
      		 
      	 UDR = (char)(angle) ;
      	 
      	 while(!UDRE);
      	 
      	 UDR = (char)(angle / 64) ;
      خب یک راه دیگر هم استفاده از وقفه های مربوط به بافر و شیفت رجیستر هست ، لطفا این دو روش رو از جنبه های مختلف بررسی فرمایید .

      باتشکر .
      قبلا این دو روش در همین تاپیک و همچنین پست زیر مقایسه شدند:
      http://www.eca.ir/forum2/index.php?topic=45733.msg488342#msg488342


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

      برای اینکه با استفاده از وقفه دوتا 6 بیتی را با استاندارد 6 بیتی بفرستید باید state بندی کنید ، یعنی تو state اول 6 بیت اول و در state دوم 6 بیت دوم . (هربار که وقفه میخورید یک state میرید جلو.)

      یک درس تو رشته کامپیوتر هست به نام "نظریه زبان ها و ماشین ها " یه جورایی تئوری همینه. یعنی میایم مساله را state بندی میکنیم و برای حل اون از state machine استفاده میکنیم.
      (چقدر گفتم state )
      راه اندازی ماژول 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 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
      انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

      دیدگاه


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

        سلام
        ببخشید 2 سوال :
        1 ) برای مثال وقتی که میکرو در حال ارسال داده به نمایشگر باشه و وقفه ای روی بده ، چه اتفاقی میفته ؟

        2 ) هنگام ایجاد پروژه جدید در اتمل استودیو ، امکان انتخاب بین زبان های C و C++ وجود داره ، تفاوت میان ایندو چیه ؟

        باتشکر .

        دیدگاه


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

          نوشته اصلی توسط aseok
          سلام
          ببخشید 2 سوال :
          1 ) برای مثال وقتی که میکرو در حال ارسال داده به نمایشگر باشه و وقفه ای روی بده ، چه اتفاقی میفته ؟

          2 ) هنگام ایجاد پروژه جدید در اتمل استودیو ، امکان انتخاب بین زبان های C و C++ وجود داره ، تفاوت میان ایندو چیه ؟

          باتشکر .
          سلام

          1)
          بایستی همیشه هواستون به وقفه باشه .
          تو برنامه مثلا داره کاری انجام میشه( مثلا چیزی رو السیدی نوشته میشه) یهو یه وقفه صورت میگیره . خوب الان پردازنده کار فعلی (نوشتن رو السیدی ) را رها میکنه و میره روتین اون وقفه ( ISR ) اجرا میکنه.
          حالا اگه تو روتین یه جوری باشه که یه چیزی رو السیدی نوشته بشه چی میشه؟
          اره - کلا قاتی پاتی رو السیدی نوشته میشه.
          کلا یک مبحث تو برنامه نویسی هست به نام " Multi-threading" یا چند نخی . به این صورت که کدها موازی باهم اجرا میشن. اینجا باید حواسمون باشه که اجرای اینا موازی باهم در برنامه اختلال ایجاد نکنه. به این عمل موازی بودن انحصار متقابل میگن که یک روشش استفاده از سمافورهاست که در پست های قبلی این تاپیک بهش اشاره شده. یک روش دیگش که سخت افزاریه "غیر فعال کردن وقفه ها" است.
          ما تو میکرو خیلی سطح پایین (در سطح سخت افزار ) برنامه نویسی میکنیم. پس میایم خودمون multi thread ایجاد میکنیم.
          چه جوری ؟
          ساده است. با استفاده از همین وقفه ها . البته درصورتی که وقفه خوردن خیلی منظم و در یک برهه زمانی مشخص همیشه اتفاق بیفتد.
          گفتم خیلی منظم . یاد چی افتادید؟ چی انقدر تو میکرو منظمه؟ اره "تایمرها"
          با استفاده از تایمرها میشه مولتی ترد ایجاد کرد . هر مسیر کد (ترد - نخ) همون isr وقفه تایمر و همچنین حلقه بینهایت تابع main است.
          اوه از مبحث دور نشیم...
          ما فهمیدیم با استفاده از وقفه میشه موازی چند کار را انجام داد. پس بایستی فقط هواسمون باشه این کارهای موازی روی کار هم اختلال ایجاد نکنند.(مثل السیدیه که همه چیز را قر و قاتی نشون میداد)

          یک نکته ی مهم هم بگم که تا میتونید روتین وقفه را جوری بنویسید که سریع اجرا شه و سریع return کنه. در کل جایز نیست از حلقه های طولانی و delay ها در روتین وقفه استفاده بشه.

          وقتی یک وقفه را فعال سازی میکنید ، باید همیشه انتظار داشته باشید که امکان داره اون وقفه وسط اجرای کدتون به اصطلاح trigger بشه و پردازنده را از مسیر کد خارج کنه و ببره به مسیر روتین اون وقفه.



          2)
          سی که میدونیم چیه پس ++C را بررسی میکنیم:

          سی پلاس پلاس همون سی هست که یه سری تغییر جزئی و امکانات جدید بهش اضافه شده. ولی مهمترین چیز که به اون اضافه شده مبحث شی گرایی ( Object Oriented ) است.
          شی گرایی تو برنامه نویسی چیه؟
          من بش میگم یک نعمت. تو پروژه های سنگین فوق العاده کار را برای برنامه نویس راحت میکنه. و یک دید خوب به برنامه نویس میده.

          شی گرایی یعنی همه چیز را شی ببنیم. و در اینصورت فکر برنامه نویسی به دنیای واقعی نزدیک تر میشه.

          من با یک مثال شی گرایی را توضیح میدم:
          شما یک شی فرض کنید .
          من مثلا یک ماشین پراید را در نظر میگیرم.(همچنین اینو در نظر میگیرم این یک ماشینه و برای حمل و نقل افراد به این ور اونوره ، نه حمل به سوی قبرستان )

          این ماشین پراید یک شی از کلاسی (گروه - دسته ) است که از کلاس اتومبیل ها ارث بری میکند .
          خود اتومبیل از کلاس وسایل حمل و نقل ارث بری میکند.
          توجه کنید که مترو و هواپیما و اتوبوس و قطار و ... هم از کلاس وسایل حمل و نقل ارث بری میکنند.
          ماشین پیکان یا پژو یا... (با فرض اینکه اینکه شرکت هاشون فقط یک ماشین میسازند ) از کلاس اتومبیل ارث بری میکنند و اتومبیل از کلاس وسایل حمل و نقل.

          توجه کنید که شما نمیتونید از کلاس وسایل حمل و نقل شی بسازید هم چنین نمیتونید از کلاس اتومبیل شی بسازید . ولی میتونید از کلاس ماشین پراید ارث بری کنید.
          به اصلاح به کلاس هایی که نمیشه ازشون شی ساخت و اگه بسازیم تو واقعیت نیست و یه چی چرتی است، میگن کلاس های انتزاعی (abstract class )

          حالا این شی ما ( که از کلاس ماشین پرایده) شامل چه چیزایی میشه.
          کلا به دو دسته تقسیم میشه :
          الف) دیتا آبجکت ها و به اصطلاح attribute ها یا data members
          ب) متد ها یا همون member function ها

          اینا چی هستند؟
          ببنید ماشین پراید (شی مون) چیزایی مثل بوق -فرمون - موتور - اتاق - شاسی - کلاج - ترمز - گاز و ... داره . به اینا میگن همون دیتا ممبرها که یک سری دیتا آبجکتند. اینا خصوصیت یک شی را نشون میدند. به خاطر همین بشون میگن attribute

          حالا این ماشین پراید میتونه حرکت کنه . گاز میخوره. میشه ترمز گرفت . میشه بوق زد باش. استارت میخوره و...
          حس میکننید فرق اینا با darta members چیه؟
          اینا یک عملی انجام میدن . مثلا عمل حرکت کردن و.. به خاطر همین بشون میگن متد و در دسته ی member function ها هستند.
          البته خیلی از این خصوصیات و متد ها از کلاس های بالاتر به ارث برده میشه ، مثلا ذات حرکت کردن تو کلاس وسایل حمل و نقل است . مگه میشه یک وسیله ی حمل و نقل حرکت نکنه.؟
          یا مثلا یک متد هست که میشه سوار اون وسیله ی حمل نقل بشیم . اینا ذات اون کلاس وسایل حمل و نقله و هر کلاس ازش ارث ببره این متد هم ارث بری میشه. مثلا خر هم میشه روش سوار شد و حرکت میکنه.


          حالا بریم سراغ کد نویسی :
          استراکچر تو سی یادتونه؟
          یک دیتا آبجکت ساختاری بود که شامل یک سری عنصر بود که خودشون دیتا آبجکت بودند.
          میشه گفت استراکچر ( struct ) یه نوع کلاس ( class ) است که در این کلاس هیچ متدی یا member functionی وجود نداره. یعنی یه پراید که هیچ کار نمیکنه و فقط میشه اون رو دید.

          یک مثال :
          کد:
          class pride
          {
          	unsigned char charkh;
          	unsigned char boogh;
          	unsigned char motor;
          	int gaz;
          	float tormoz;
          	
          
          	void boogh_bezan();
          	void harkat_kon(int x , int y); // x, y mokhtasate hadaf
          	void start();
          };
          می بینید که attribute ها همون دیتا آبجکت ها هستند و متد ها یا member function ها هم یک سری تابع ( function ) هستند.

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

          البته در برنامه نویسی برای میکرو اصلا نیاز نیست از شی گرایی استفاده بشه . چون برنامه نویسی شی گرا یک مقدار از نظر حجم کد تولیدی و... زیاده و میکرو کلا هم پردازنده ضعیف داره هم حجم کم حافظه . بیشتر برای برنامه نویسی desktop استفاده میشه . ( خودم هم برای برنامه نویسی رو کامپیوتر از زبان ++C و شی گرایی استفاده میکنم.)


          راه اندازی ماژول 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 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
          انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

          دیدگاه


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

            تشکر از توضیحاتتون ، در واقع منظورم این بود که بنده به طور عادی گزینه c executable را انتخاب میکنم ، تفاوتش با ++C از لحاظ syntax و غیره در کد نویسی میکرو چیه ؟

            باتشکر .

            دیدگاه


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

              نوشته اصلی توسط RubeuS
              حالا که تاپیک به صورت خوبی پیش رفته ، جاداره یه سری نکته بگم:

              1- همیشه اینو گفتم : هیچ وقت خودتون را به کامپایلر و محیط برنامه نویسی محدود نکنید . هر کدام یک ویژگی هایی دارند.
              من خودم الان در پروژه های خیلی مهمم هم از کدویژن استفاده میکنم . ممکنه در یک پروژه از چند کامپایلر استفاده کنم.
              مثلا کدویژن به نسبت کدهای بهینه تر از نظر سایز ایجاد میکند. (نسبت به gcc در حالت سایز پتیمایز)
              سلام آقای مرتضوی....من یه تازه کار هستم(تازه وارد دنیای میکرو کنترلر شدم ) ولی از اونجایی که قبلا با محیط ویژوال استودیو کار کردم باعث شد تا اتمل استودیو رو به کدویژن ترجیح بدم و سعی کنم بیام سمت اتمل استودیو....ولی شما میفرمایید که کدویژن کدهای کم حجم تری تولید میکنه oo:...الان من واقعا گیج شدم...یعنی یه کامپایلر که کرک هم شده!!! از یه کامپایلر قدرتمند(بالاخره لینوکسه دیگه !) کدهای بهینه تری تولید میکنه؟

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

              www.intelart.ir


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

              دیدگاه


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

                نوشته اصلی توسط punisher.x64
                سلام آقای مرتضوی....من یه تازه کار هستم(تازه وارد دنیای میکرو کنترلر شدم ) ولی از اونجایی که قبلا با محیط ویژوال استودیو کار کردم باعث شد تا اتمل استودیو رو به کدویژن ترجیح بدم و سعی کنم بیام سمت اتمل استودیو....ولی شما میفرمایید که کدویژن کدهای کم حجم تری تولید میکنه oo:...الان من واقعا گیج شدم...یعنی یه کامپایلر که کرک هم شده!!! از یه کامپایلر قدرتمند(بالاخره لینوکسه دیگه !) کدهای بهینه تری تولید میکنه؟

                میشه یه توضیح مختصر در مورد برتری ها و ضعف اتمل استودیو در مقابل کدویژن بدین؟
                ولی آخرش ویژوال استودیو یه چیز دیگه ست...واقعا کدنویسی باهاش لذت بخشه... :mrgreen:
                با تشکر
                ببخشید که دخالت میکنم
                کسی نگفته کدویژن بده اینم یه کامپایلره میگیم کد ویزارد کدویژن ابزار مناسبی نیست کما این که کار خیلی از دانشجویان عزیز رو به نحو احسنت انجام میده.
                پ.ن
                با توجه به مشاهدات قبلی اینجور پست ها کلا موضوع بحث رو به انحراف میکشه
                خواهشا از اینجور بحسا نشه بهتره
                چه یافت آنــکه تــو را گم کرد وچه گم کرد آنـکه تــو را یافت.

                دیدگاه


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

                  نوشته اصلی توسط aseok
                  تشکر از توضیحاتتون ، در واقع منظورم این بود که بنده به طور عادی گزینه c executable را انتخاب میکنم ، تفاوتش با ++C از لحاظ syntax و غیره در کد نویسی میکرو چیه ؟

                  باتشکر .

                  زبان ++C یک زبان ارتقا یافته ی C است. از نظر اینکه شما تو اون محیط با زبان c بنویسید فرقی نمیکنه و میشه . چون ++C چیزی کمتر از c نداره . فقط یک سری امکانات بیشتری داره. برا میکرو بهتره همون C را انتخاب کنید. برنامه های میکرو باید سریع تر و کم حجم تر باشه و بهتره از c استفاده بشه.

                  مثل میکرو کرنل سیستم عامل ها که تقریبا همه با سی نوشته میشه. چون حجم کد کمتر و کد سریع تره.

                  راه اندازی ماژول 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 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
                  انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

                  دیدگاه


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

                    نوشته اصلی توسط punisher.x64
                    سلام آقای مرتضوی....من یه تازه کار هستم(تازه وارد دنیای میکرو کنترلر شدم ) ولی از اونجایی که قبلا با محیط ویژوال استودیو کار کردم باعث شد تا اتمل استودیو رو به کدویژن ترجیح بدم و سعی کنم بیام سمت اتمل استودیو....ولی شما میفرمایید که کدویژن کدهای کم حجم تری تولید میکنه oo:...الان من واقعا گیج شدم...یعنی یه کامپایلر که کرک هم شده!!! از یه کامپایلر قدرتمند(بالاخره لینوکسه دیگه !) کدهای بهینه تری تولید میکنه؟

                    میشه یه توضیح مختصر در مورد برتری ها و ضعف اتمل استودیو در مقابل کدویژن بدین؟
                    ولی آخرش ویژوال استودیو یه چیز دیگه ست...واقعا کدنویسی باهاش لذت بخشه... :mrgreen:
                    با تشکر
                    سلام.
                    بله من هنوز میگم . Visual Studio جز عجایبه . کلا نمیشه کامپیوترم روشن باشه و VS اجرا نباشه.

                    visual studio یک قابلیت داره که میشه اون را تغییرش داد و add in و... بهش اضافه کرد و منو بهش اضافه کرد و...( مثل VAssistX و...) یا میشه کلا یه تغییر بزرگ توش داد مثل همین Atmel Studio که همون visual studio هست که تغییرش دادند.
                    من هم به شما توصیه میکنم با همین atmel studio شروع کنید.

                    در رابطه با اون حرفی که زدم: که کدویژن کدهای با سایز کمتری تولید میکند. بله من اینو تو عمل دیدم. از نظر سرعت برنامه اگه اینطور نباشه ولی از نظر حجم کد بنده یک کتابخانه مشابه را در هر دو محیط کامپایل کردم و مقایسه کردم.هر دو را روی بهینه سازی از نظر سایز گذاشتم.

                    البته کمتر دیدم حافظه فلش به این راحتیا پر بشه مگه اینکه آرایه های بزرگ تو فلش ذخیره سازی بشه.

                    ولی یه چیز بتون میگم ، پیش خودمون باشه: اتمل استادیو هنوز باگ زیاد داره. ولی user friendly که داره از همه چیز بهتره. تو پروژه های بزرگ واقعا کمک میکنه.
                    البته کدویژن هم باگ داره . جدیدترین ورژنش هم باگ داره. به عنوان مثال من یاده چندوقت پیش چند تا دیفاین نوشتم (البته دیفاین ها یه مقدار غیر منطقی بود) میدونید عکس العمل کدویژن چی بود؟
                    کلا کرش کرد و کشید بیرون ( kill ) :rolleyes: :rolleyes:

                    در هر صورت دستور فرمودند این بحث ادامه دار نشه و ما اطاعت امر میکنیم.(باید هم اینطور باشه . کلا اینگونه مباحث انتها نداره)

                    راه اندازی ماژول 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 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
                    انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

                    دیدگاه


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

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

                      فقط یه سوال :
                      بعضی از توابع که ساختار ساده ای دارند رو میشه با دیفاین پیاده سازیش کرد...این کار به نظرتون مزیت خاصی داره؟
                      ممنون :smile:
                      تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                      www.intelart.ir


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

                      دیدگاه


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

                        نوشته اصلی توسط punisher.x64
                        بله حق با شماست...البته من جوابمو از فرمایشات شما پیدا کردم...ممنون

                        فقط یه سوال :
                        بعضی از توابع که ساختار ساده ای دارند رو میشه با دیفاین پیاده سازیش کرد...این کار به نظرتون مزیت خاصی داره؟
                        ممنون :smile:
                        خواهش میکنم

                        سوال بسیار زیبایی پرسیده شد:

                        جوابش اینه که بله میشه.

                        ولی یه تفاوت های اساسی با هم دارند:

                        مزیت اینکار : افزایش سرعت برنامه.
                        عیب اینکار : افزایش حجم برنامه .که به تعداد فراخوانی های دیفاین مورد نظر(من بهش میگم شبه تابع) بستگی داره و ارتباط مستقیم دارند.

                        تقریبا معلومه چرا اینطوره . این شبه توابع میان دقیقا جایی که از اسمشون استفاده میشن کپی میشن پس دیگه تابع واقعی نیستند که یک آدرسی در حافظه داشته باشند و با فراخوانیشون آدرس بازگشت سیو بشه و پرش به آدرس تابع رخ بده و بعد از تموم شدن بازگشت به آدرس سیو شده داشته باشیم . پس دیگه اینکارهای اضافه نیاز نیست و به شکل سریال و پشت سرهم کد ها اجرا میشه.
                        ولی خوب حالا فرض کنید 1000 بار این شبه تابع تو برنامه صدا زده بشه . اونوقت چی میشه؟
                        اوه اوه اوه. اگه طول دستورات و تعداد دستوراتش هم زیاد باشه که دیگه اوه اوه اوه اوه اوه. نمایی حجم کد بالا میره.
                        فکر کنم میشد با یک پیشوند گذاشتن قبل از توابع اینکار رو کرد. که یعنی به کامپایلر بگیم این تابع را جاییی که call شده بریز و دقیقا مثل همون شبه تابع ها عمل کن.
                        فکر میکنم اون پیشوند inline بود ولی مطمئن نیستم ، باید تحقیق کنم.
                        راه اندازی ماژول 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 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
                        انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

                        دیدگاه


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

                          سلام

                          فرض کنید میکرو در حال ارتباط سریال با یک حسگر است بدین معنی که با ارسال پالس های ساعت به حسگر ، داده های مربوطه را دریافت میکند .
                          اگر هنگامیکه پالس ساعت در وضعیت بالا قرار دارد یک وقفه روی دهد ، از لحاظ دریافت داده مربوط به این پالس چه روی میدهد ؟ آیا این پالس تا بازگشت وقفه در همین وضعیت باقی میماند تا داده مربوطه دریافت شود ؟

                          باتشکر .

                          دیدگاه


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

                            فکر کنم میشد با یک پیشوند گذاشتن قبل از توابع اینکار رو کرد. که یعنی به کامپایلر بگیم این تابع را جاییی که call شده بریز و دقیقا مثل همون شبه تابع ها عمل کن.
                            فکر میکنم اون پیشوند inline بود ولی مطمئن نیستم ، باید تحقیق کنم.
                            بله دقیقا همون inline هستش...الان یادم اومد...ترم 2 ++C داشتیم! :mrgreen:

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

                            فقط یه مساله دیگه...شما واسه مقدار دادن به رجیستر ها از شیف دادن بیت های رجیستر به چپ و راست استفاده میکنید و پیشنهادتون هم استفاده از این روشه اونم به خاطر افزایش خوانایی برنامه....اینطور مقدار دادن به رجیستر ها تفاوتی در حجم یا سرعت نسبت یه مقدار دهی مستقیم داره؟
                            اگه فرقی نداره یه برنامه کوچک و پرتابل بنویسیم تا با دادن مقدار رجیستر رشته مورد نظر ما رو تولید کنه...یا مثلا بیت های هر رجیستر رو نشون بده و با کلیک کردن روی بیت ها مقدارش رو 0 یا 1 کنه و بعد کد لازم برای زیان سی رو تولید کنه...چون استفاده از شیفت دادن برای مقدار دهی یکمی سخته(زمان و تایپ) ولی از طرفی باید هر بار مقدار هگزاد رو به باینری تبدیل کنم و با رجیستر مطابقت بدم تا ببینم تنظیماتش چطوریه؟
                            به نظرتون نوشتن برنامه ای که همچین کاری بکنه فایده داره؟اگه اینطوره که بنویسمش تا هم خودم راحت بشم هم اعضای انجمن!
                            شرمنده اگه سوالام زیادن!
                            تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                            www.intelart.ir


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

                            دیدگاه


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

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

                              فرض کنید میکرو در حال ارتباط سریال با یک حسگر است بدین معنی که با ارسال پالس های ساعت به حسگر ، داده های مربوطه را دریافت میکند .
                              اگر هنگامیکه پالس ساعت در وضعیت بالا قرار دارد یک وقفه روی دهد ، از لحاظ دریافت داده مربوط به این پالس چه روی میدهد ؟ آیا این پالس تا بازگشت وقفه در همین وضعیت باقی میماند تا داده مربوطه دریافت شود ؟

                              باتشکر .
                              سلام
                              ببنید وقتی میگید پالس ساعت میدید به حسگر یعنی پروتوکل ارتباطی تون به احتمال زیاد spi است ولی فرقی نمیکنه . هرچی که باشه usart و.. چون اینها یک ماژول سخت افزاری درون میکرو هستند و به پردازنده کاری ندارند. (پردازنده هم خودش یه جورایی یه ماژول سخت افزاری جدا هست) . پس بدون توجه به cpu کار خودشون را ادامه میدند.
                              ببنید cpu دستور به این ماژول ها میده و اینها بدون اینکه کاری با cpu داشته باشند دیتا را میفرستند و کار خودشون را میکنند و بعد از موفقیت در ارسال یا دریافت یا... یک پرچم بالا میبرند و در صورتی که امکان وقفه دادن وجود داشته باشه به cpu وقفه میدند.
                              پس در حین ارسال دیگه کاری به پردازنده ندارند.
                              (البته اگه این پروتکل های ارسال نرم افزاری پیاده سازی بشه ، اون قضیه اش فرق داره و کامل به cpu بستگی داره)

                              من فکر میکنم منظورتون همون اینترفیس های سخت افزاری میکرو باشه و در این صورت یه کلام :
                              نه به کارشون ادامه میدند و کاری به وقفه و پردازنده و ... ندارند.
                              راه اندازی ماژول 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 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
                              انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

                              دیدگاه


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

                                نوشته اصلی توسط punisher.x64
                                بله دقیقا همون inline هستش...الان یادم اومد...ترم 2 ++C داشتیم! :mrgreen:

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

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

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