اطلاعیه

Collapse
No announcement yet.

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

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

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

    ممنون مهندس 6 ماه بیکارم (12 واحد دارم) :mrgreen: میخوام xmega و arm رو یاد بگیرم ممنون که نصف شبی جواب مارودادید خدا خیرت بده

    دیدگاه


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

      نوشته اصلی توسط reza javahery
      ممنون مهندس 6 ماه وقت دارم واحددارم) :mrgreen: میخوام xmega و arm رو یاد بگیرم ممنون که نصف شبی جواب مارودادید خدا خیرت بده
      خواهش میکنم

      خیلی خوبه
      پس قبلش باید سی یاد بگیرید

      راستی اینجوری که میگید xmega و arm یاد بگیرم ، یکم آدم را گیج میکنه . بگید میخوام با این دو خانواده از میکروکنترلرها آشنا بشم... یادگرفتنی نیست آشنا شدنیست ( کلا میکروکنترلرها از نظر یادگرفتن و... یه چیز ثابتند و مربوط به مباحث معماری کامپیوتر میشه ) ( همشون از ذات یکین ولی از نظر برخی خصوصیتها باهم متفاوتند یکی از این خصوصیت ها که برای بنده خیلی مهمه قیمتشونه :rolleyes: )

      باید ببنید نیازتون چیه.
      یک لینک بتون میدم ، برید بخونید ، منظورم را متوجه میشید:
      http://www.eca.ir/forum2/index.php?topic=82558.0

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

      ولی برید سی یاد بگیرید.
      سی

      راستی اگه رفتید سراغش بعد که یکم دیدتون بهتر شد ، یادی از ما و حرفهام هم بکنید.

      یه چیز که در وصف سی الان تو ذهنم اومد:
      در رابطه با میکروکنترلرها زبان های برنامه نویسی زیاد گسترده نیستند ، ولی برای پردازنده های موجود در PC ها ، زبان های مختلفی مطرح است.
      این مختلف بودن باعث درگیری ها و اختلاف سلیقه ها بین گروه برنامه نوسان شده.
      اکثر برنامه نویسها در ایران قبلا تو مد pascal بودن و الانم بیشتر #C و یواش یواش میره به سمت جاوا .
      در یک انجمن یک گفتمانی در همین رابطه بود و برنامه نویسها (بخصوص ایرانیها ) در رابطه با سی میگفتند ، سی قدیمی شده و بدرد نمیخوره و... ( البته این حرف ها نشان دهنده دید سطحی طرف است)
      یک super user فقط یه جمله کوتاه گفت و رفت : :mrgreen:
      "C is not for children"
      :mrgreen:

      اگر به اینکار یک دید شغلی دارید . باید خیلی در رابطه باش کار کنید.
      راه اندازی ماژول 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

        به به توضیحاتتون همیشه کامل و جامع هست من بر حسب علاقه شروع به کار با xmega کردم (البته با کمک دوستانی مثل شما سید جان) و علاقه شدید برای جدایی از بسکام دارم و به همین خاطر کدویژنرو شروع کردم و یاد گرفتم و بعد همه گفتند gcc و حالا تصمیم گرفتم با gcc کار کنم یک چیز در مورد iar َشنیدم که میتونه خانواده های pic & arm رو پشتیبانی کنه درسته؟ :eek:

        دیدگاه


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

          نوشته اصلی توسط reza javahery
          ...یک چیز در مورد iar َشنیدم که میتونه خانواده های pic & arm رو پشتیبانی کنه درسته؟ :eek:
          ه! نه فقط اینا! به جرات می تونم بگم هرچی تو بازار هست رو پشتیبانی میکنه! اینجا رو ببین:

          http://www.iar.com/en/Service-Center/Downloads/

          فقط موضوعی که هست اینه که کار کردن با IAR بچه بازی نیست. به قول استاد بنده جناب دیود پرنتیس یه کامپایلر 6 هزار دلاری واسه کارهای بچه بازی یا تفریح و سرگرمی نیست! یه کدنویس حرفه ای می خواد!

          دیدگاه


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

            rozeh جان به خدا اگه از من بپرسن چار فرانسه سایت کیه میگم rozeh جان . :mrgreen: :mrgreen:
            ولی iar یه کم تخیلیه باشه فعلا در پشت سر سید جان یواش یواش حرکت میکنیم ببینیم همین studio چی هست خودم به یه نتایجی رسیدم و یه سری کد ها رو پیدا کردم ممنون

            دیدگاه


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

              نوشته اصلی توسط reza javahery
              به به توضیحاتتون همیشه کامل و جامع هست من بر حسب علاقه شروع به کار با xmega کردم (البته با کمک دوستانی مثل شما سید جان) و علاقه شدید برای جدایی از بسکام دارم و به همین خاطر کدویژنرو شروع کردم و یاد گرفتم و بعد همه گفتند gcc و حالا تصمیم گرفتم با gcc کار کنم یک چیز در مورد iar َشنیدم که میتونه خانواده های pic & arm رو پشتیبانی کنه درسته؟ :eek:
              زیاد تو قید و بند کامپایلر نباشید ، اول سی یاد بگیرید. اگه خواستید از فیلیمهای استاد بازرگان استفاده کنید( که توصیه ی بنده هم همین است ) ، به دلیل اینکه آموزش سی برای PC بوده و فکر کنم از 6 ++visual c برای آموزش استفاده شده و این محیط خیلی شبیه Atmel Studio است .
              حالا چون Atmel Studio از gcc به عنوان کامپایلر استفاده میکنه . پس همون gcc توصیه میشود. ( چون در اینصورت میتونید از امکانات Atmel Studio استفاده کنید)
              نکته : به روابطی که گفتم توجه شود . شما بایستی فرق بین IDE(محیط برنامه نویسی) و کامپایلر را بدونید.

              در رابطه با IAR هم باید تو سایتش ببنید چه میکروهایی را ساپورت میکنه . ( ولی در کل بگم IAR خیلی شبیه gcc است و خیلی از کتابخونه های استانداردش با gcc مشترکه)( IAR یک کامپایلر گرون قیمت برای میکروکنترلر هاست و طبق جمله ی "هرچی پول بدی آش میخوری" باید یه تفاوت هایی با بقیه داشته باشه)

              راستی اگه میخواید با Atmel Studio کار کنید حتما پست اول این تاپیک را مو به مو بخونید. ( کلی گفته شده و مختص یک میکروی خاص نیست)

              ولی بازم میگم اول سی ....
              یعنی کامل مفاهیم را باید بگیرید، بعد برید سراغ کامپایلر خاص.
              راه اندازی ماژول 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

                سید جان من کدویژن رو یاد دارم ولی با رجیسترای atmel studio مشکل دارم مرجعی براش پیدا نمیشه :cry2:

                دیدگاه


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

                  نوشته اصلی توسط reza javahery
                  سید جان من کدویژن رو یاد دارم ولی با رجیسترای atmel studio مشکل دارم مرجعی براش پیدا نمیشه :cry2:
                  رجیستر ؟ Atmel Studio ؟ مگه اتمل استادیو رجیستر داره؟

                  اول سه تا تعریف زیر را بخونید و بعد منظورتون رو بهم بگید:

                  کامپایلر : یک مترجم است ( دیدید مترجما چیکار میکنند ؟ مثلا یک مترجم از زبان فارسی به چینی ترجمه میکنه) کامپایلر(مترجم) زبان سی یک برنامه است که دستورات نوشته شده به زبان سی را به اسمبلی و دستورات زبان ماشین یک پردازنده ترجمه میکند.(زبان مبدا : سی ، زبان مقصد : زبان ماشین پردازنده مورد نظرتون)
                  فکر نمیکنم این برنامه را تاحالا شما دیده باشید. مثال : gcc

                  IDE یا محیط برنامه نویسی: محیطی که داخلش شما درونش کدهای سی تون را می زنید. مثلا یکی عشقش میکشه تو notepad دستوراتش را مینویسه . این یعنی برای محیط برنامه نویسیش notepad را انتخاب کرده . ( مثال دیگه ش همین اتمل استادیو)

                  رجیستر : یک سری مکان برای ذخیره اطلاعات هستند که درون پردازنده یا i/o واقع اند. ( فکر کنم منظورتون رجیسترهای مربوط به i/o باشه) به تاپیک زیر مراجعه کنید:
                  http://www.eca.ir/forum2/index.php?topic=82558.0

                  شاید منظورتون دسترسی به رجیسترهای i/o میکروتون توسط برنامه نویسی در محیط اتمل استادیو باشه:
                  همینه؟
                  خوب این به کامپایلر برمیگرده .
                  یادتونه گفتید مثلا IAR چه میکروهایی را ساپورت میکنه؟ منم گفتم برید تو سایتش ببنید.

                  یکی از مسائلی که بشه تشخیص داد یک کامپایلر چه میکروهایی را ساپورت میکنه. همینه. یعنی ببنید با کامپایلر میتونید به رجیسترهای i/o چه میکروهایی دسترسی داشته باشید.
                  مثلا تو کدویژن شما با اینکلود کردن مثلا mega32.h میتونید از طریقی به رجیسترهای i/o میکروکنترلر مگا32 دسترسی داشته باشید.

                  چی؟ تو gcc و محیط اتمل استادیو چه جوریه؟ از طریق اینکلود کردن avr/io.h میتوانید به رجیسترهای i/o این خانواده میکروکنترلر دسترسی داشته باشید.(باید برید اول اتمل استادیو را نصب کنید تا متوجه بشید)

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

                  به لینک آخر موجود در امضام مراجعه کنید . پله پله برید جلو ، نمیشه یهو رفت تا تهش.
                  سی --- > اشنایی با محیط برنامه نویسی مورد نظر ----> آشنایی با میکروی مورد نظر



                  راه اندازی ماژول 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

                    نوشته اصلی توسط reza javahery
                    rozeh جان به خدا اگه از من بپرسن چار فرانسه سایت کیه میگم rozeh جان . :mrgreen: :mrgreen:
                    ولی iar یه کم تخیلیه باشه فعلا در پشت سر سید جان یواش یواش حرکت میکنیم ببینیم همین studio چی هست خودم به یه نتایجی رسیدم و یه سری کد ها رو پیدا کردم ممنون
                    ما خراب برقی ها خصوصا مشهدی های عزیز هستیم.
                    همون GCC بهتره. واسه خصوصا AVR همین GCC هم کافیه. لزومی نداره که اینجا باشی. من قبلا هم گفته بودم که جناب حسینی یه تاپیک عالی و جامع واسه GCC داره. چرا ازش استفاده نمیکنی؟ اینجا:


                    آموزش winavr و avrlib

                    نوشته اصلی توسط reza javahery
                    سید جان من کدویژن رو یاد دارم ولی با رجیسترای atmel studio مشکل دارم مرجعی براش پیدا نمیشه :cry2:
                    [color=brown][b]این از اون سوالایی هستش که یا کدنویس خوب نمیپرسه! :biggrin:
                    برو جایی که اتمل استودیو رو نصب کردی. یعنی توی فولدر atmel بعد برو به این آدرس:
                    AVRGCC>3.3.2.31>AVRToolchain>avr>inclu de>avr
                    خب اینجا همه اون چیزایی که می خوای هست. مثلا واسه ریجستر ها فایل:
                    io.h
                    رو باز بکن. توصیه میکنم قبلش notpad++ رو دانلود کن.
                    بعد دنبال هدر میکروت بگرد. مثلا واسه ATmega128 اینجوری نوشته:

                    کد:
                    #elif defined (__AVR_ATmega128__)
                    # include <avr/iom128.h>
                    خب حالا می فهمی که همه چیز توی iom128.h هستش. تو همین آدرس این هدر رو پیدا کن. خب حالا می بینی توش همه چیز هست. از جمله ریجستر ها. خوب به فایل نگاه کن.
                    توی این شاخه(فولدر AVR) خیلی چیزای دیگه هم هست که می تونی ببینی.
                    واسه کتابخونه ها هم می تونی همون جا همین طوری بررسیشون بکنی یا که بری این آدرس:


                    Library Reference

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

                    دیدگاه


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

                      سلام سید جان
                      وقتی با سریال کار میکردم خواستم یه رشته ای رو بفرستم ولی نشد
                      برنامم اینه
                      کد:
                      #include <avr/io.h>
                      #include <util/delay.h>
                      #include <stdio.h>
                      int main (void) {
                      	 UCSRA=0x00;
                      	 UCSRB=0x08;
                      	 UCSRC=0x86;
                      	 UBRRH=0x00;
                      	 UBRRL=0x33;
                      	while(1)
                      	{
                      	printf("str");
                      	_delay_ms(100);
                      	}
                      	
                      	
                      }
                      فکر کنم از اون printf هست
                      تکاور شدن جرات افزون کند.....هراس از دل مرد بیرون کند....


                      تا تکاور به تن زخمی خود جان دارد....مرز اسلام در این ملک نگهبان دارد.........

                      دیدگاه


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

                        نوشته اصلی توسط سعید دلشاد منور
                        سلام سید جان
                        وقتی با سریال کار میکردم خواستم یه رشته ای رو بفرستم ولی نشد
                        برنامم اینه
                        کد:
                        #include <avr/io.h>
                        #include <util/delay.h>
                        #include <stdio.h>
                        int main (void) {
                        	 UCSRA=0x00;
                        	 UCSRB=0x08;
                        	 UCSRC=0x86;
                        	 UBRRH=0x00;
                        	 UBRRL=0x33;
                        	while(1)
                        	{
                        	printf("str");
                        	_delay_ms(100);
                        	}
                        	
                        	
                        }
                        فکر کنم از اون printf هست
                        سلام

                        در رابطه با برنامه بالا......

                        اصلا بزارید اول یه چیزی بگم : شما که دیگه نباید اینجوری رجیسترها را مقداردهی کنید!!
                        پس اون شیفت و ... نحوه ی مقدار دهی رجیسترها که به خوانایی برنامه کمک میکنه چی شد؟ :icon_razz: :rolleyes: پست 10 همین تاپیک

                        مقداردهی رجیسترها باتوجه به دیتاشیت مگا 16 و مگا32 و... درسته(البته بهتره بگید چه میکرویی استفاده میکنید . تو gcc وقتی از هدر io استفاده میکنید ، چون دیگه با دیدن فایل اصلی برنامه نمیشه فهمید میکروتون چیه بهتره جلو اینکلود io یک کامنت بزارید و بگید مثلا MCU برابر فلان میکرو )
                        درضمن وقتی از delay استفاده میشه.... F_CPU فراموش نشه.
                        نکته : به وارنینگهایی که کامپایلر بتون میده توجه کنید. الان کامپایلر یه وارنینگ برای مشخص نکردن F_CPU حتما بتون داده.


                        خوب حالا بریم سراغ برنامه :
                        همون طور که گفتم ، رجیسترها درست مقداردهی شده اگر فرکانس کلاک سی پی یو روی 8 مگاهرتز تنظیم شده باشه ،با این مقادیر usart روی 9600bps تنظیم میشه. ( 8 بیتی - بدون پریتی - 1دونه stop bit - فعال سازی ارسال اطلاعات )
                        البته بهتره قبلش پین مربوط به ارسال اطلاعات خروجی بشه. ولی نشه هم فکر نکنم مشکلی پیش بیاد.

                        خوب در رابطه با printf : بله مشکل همینجاست. شما اگه بجاش بنویسید مثلا ;UDR=0xAA میبینید که درست کار میکنه .

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

                        سه گزینه پیش روتون میزارم:
                        1- برم ته تو printf رو در بیارم. ( خودم این گزینه را زیاد دوست ندارم :mrgreen: )

                        2- یه تابع براتون بنویسم که اینکار رو کنه.

                        3- بتون توضیح بدم که چجوری با وقفه رشته تون را بفرستید.( اینو خیلی دوست دارم چون این کار یک عمقی نگریه)


                        راستی الان یادم اومد : حتما قبل از انتخاب برید پست زیر را بخونید ، خیلی خوبه ( در همین رابطه است) :

                        http://www.eca.ir/forum2/index.php?topic=45733.msg488342#msg488342







                        راه اندازی ماژول 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

                          سلام

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

                          کد:
                          #define EEPROM_LOCATION (void *)37

                          دیدگاه


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

                            سلام

                            اینکه یک تابع به صورت static تعریف بشه چه تاثیر و کارکردی داره ؟

                            باتشکر .

                            کد:
                            static uchar  computeTemporaryChanges(void)

                            دیدگاه


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

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

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

                              کد:
                              #define EEPROM_LOCATION (void *)37
                              سلام

                              در رابطه با این کد:

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

                              مثلا برنامه نویس با همین کد به کامپایلر میگه :
                              آقای کامپایلر هرجا عبارت EEPROM-LOCATION دیدی جاش در همون نقطه از برنامه این رو بزار: 37(* void)

                              اون EEPROM-LOCATION که یک عبارته، فرقی نداره چی بزارید ، بزارید ALI . هرچی دلتون بخواد.

                              فقط باید بدونید 37(* void) چیه؟:

                              اول برای فهمیدن پرانتز را حذف کنید. پس میشه: 37

                              پس میشه هرجا EEPROM-LOCATION دیدی ، جاش عدد 37 رو بزار.

                              اون پرانتز چیه؟

                              اشاره گرها که یادتونه به یه جایی اشاره میکردند؟ 37(* void) یعنی 37 از نوع اشاره گر به یک بایت از حافظه است ( یعنی 37 عدد معمولی نیست و آدرسه)

                              با توجه به نحوه دیفاین معلومه: کسی که این رو دیفاین کرده میخواسته یه جوری باشه که هر وقت که خواست به خانه ی شماره 37 حافظه eeprom دسترسی پیدا کنه فقط بنویسه EEPROM-LOCATION

                              مثال : از طریق کد زیر و دیفاینی که شما قرار دادید میشه به خانه با آدرس 37 حافظه eeprom دسترسی داشت و مقدار آن را خواند و در متغییر c قرار داد:
                              کد:
                              #define EEPROM_LOCATION (void *)37
                              #include <avr/eeprom.h>
                              int main (void) 
                              {
                              	char c;
                              	c=eeprom_read_byte(EEPROM_LOCATION);
                              	while(1);
                              }
                              راه اندازی ماژول 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

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

                                اینکه یک تابع به صورت static تعریف بشه چه تاثیر و کارکردی داره ؟

                                باتشکر .

                                کد:
                                static uchar  computeTemporaryChanges(void)
                                قبل از توضیح در این باره ، من یک سوال دارم ازتون:

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

                                در رابطه با پیشوند static من قبلا توضیح دادم ولی اون مربوط به متغییر ها بود .
                                ولی اینجا با تابع طرفیم و تعریف تابع و کلا کاربردش یه چیز دیگه است.

                                وقتی در هنگام تعریف تابع از کلمه کلیدی static قبل از آن استفاده میکنیم ، یعنی تابع مورد نظر فقط در همین فایل تعریف شود و قابل دسترسی باشد.
                                بیشتر استفاده اش برای محدود کردن دسترسی به تابع است و همچنین با استاتیک کردن تابع در فایل مثلا file1.c شما میتوانید یک تابع با همون اسم در فایل مثلا file2.c تو پروژتون داشته باشید.

                                به عوان مثال پروژه شما دارای 2فایل با نام های file1.c و main.c باشد. که به واطه ی یک فایل هدر میتونید این دو فایل را با هم مربوط سازید.
                                حالا همین تابع (static uchar computeTemporaryChanges(void را در فایل file1.c تعریف میکنید.

                                حالا اگر داخل فایل main.c مثلا تابع main برنامه به شکل زیر نوشته شود:
                                کد:
                                int main (void) 
                                {
                                	unsigned char c;
                                	c = computeTemporaryChanges();
                                	while(1);
                                }
                                با کامپایل این برنامه میبینید که کامپایلر بتون ارور میده . میگه شما دسترسی به تابع computeTemporaryChanges ندارید .

                                حالا اگه کلمه کلیدی static را از پشت تابع بردارید ، برنامه بدون ارور کامپایل میشه.


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

                                دیدگاه

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