اطلاعیه

Collapse
No announcement yet.

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

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

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

    گفتم الان باید بشینم یک تابع برا اینکار بنویسم.
    مثلا یه تابع به اسم ftoa که همون کار را کنه .

    خوب اگه اینجوریه شما میتونید به شکل زیر عمل کنید:
    الان نیازمون اینه که یک عدد float را تو یک رشته بریزیم.(به عنوان مثال با دقت 2 رقم اعشار)
    میشه بصورت زیر عمل کرد:

    کد:
    #include <stdio.h>
    int main(void)
    {
    	char str[10];
    	int td1,td2;
    	float f=1.2;
    	td1=(int)f;
    	td2=(int)(f*100)%100;
    	sprintf(str,"%d.%d",td1,td2);
    	while(1);
    }
    یعنی اول برنامه دوتا متغییر عدد صحیح اعلان کرد ( مثلا اینجا من td1 و td2 را تعریف کردم)
    بعد قبل از اینکه از sprintf استفاده کنم ، عدد اعشاریمون(اینجا f ) را به دو قسمت تقسیم میکنیم. قسمت صحیح ریخته میشه تو td1 و قسمت اعشار ریخته میشه تو td2 .
    بعد مقدایر را به sprintf میدیم.

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

    دیدگاه


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

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

      خوب اگه اینجوریه شما میتونید به شکل زیر عمل کنید:
      الان نیازمون اینه که یک عدد float را تو یک رشته بریزیم.(به عنوان مثال با دقت 2 رقم اعشار)
      میشه بصورت زیر عمل کرد:

      کد:
      #include <stdio.h>
      int main(void)
      {
      	char str[10];
      	int td1,td2;
      	float f=1.2;
      	td1=(int)f;
      	td2=(int)(f*100)%100;
      	sprintf(str,"%d.%d",td1,td2);
      	while(1);
      }
      یعنی اول برنامه دوتا متغییر عدد صحیح اعلان کرد ( مثلا اینجا من td1 و td2 را تعریف کردم)
      بعد قبل از اینکه از sprintf استفاده کنم ، عدد اعشاریمون(اینجا f ) را به دو قسمت تقسیم میکنیم. قسمت صحیح ریخته میشه تو td1 و قسمت اعشار ریخته میشه تو td2 .
      بعد مقدایر را به sprintf میدیم.

      البته راستش من خودم زیاد از این روش خوشم نیومد.(نمیدونم چرا ! کلا به دلم نمیچسبه. شاید به خاطر اینکه متغییر زیادی تعریف شده)
      راستشو بخواین کمی پیچیده شد.خب اگه تابع نوشته بشه ساده تر میشه؟
      تکاور شدن جرات افزون کند.....هراس از دل مرد بیرون کند....


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

      دیدگاه


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

        نوشته اصلی توسط سعید دلشاد منور
        راستشو بخواین کمی پیچیده شد.خب اگه تابع نوشته بشه ساده تر میشه؟
        راستش وقت نشد کامل تابع را بنویسم.

        ولی خوب یک هدر نوشتم براتون .. خیلی عالیه.
        دیگه بجای اینکلود کردن stdlib.h اگه این هدر را اینکلود کنید ، میتونید به همه ی توابع stdlib دسترسی داشته باشید + یک تابع ftoa :
        http://mortazavi91.persiangig.com/Codes/ftoa_stdlib.rar
        از زیپ خارج کنید و داخل پوشه پروژه تون کپی کنید.
        این تابع فقط دو پارامتر میگیره که پارامتر اول یک عدد اعشاری( float ) است و پارامتر دوم یک رشته است. و عدد اعشاری را با 2 رقم دقت داخل رشته میریزه.

        مثال:
        کد:
        #include "ftoa_stdlib.h"
        
        int main(void)
        {
        	char str[10];
        	float f=-123.57;
        	ftoa(f,str);
        	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 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
        انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

        دیدگاه


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

          نوشته اصلی توسط RubeuS
          سلام، برای اینکه راحتتر به جواب برسیم، و همچنین درکل بتونید راحت تر با السیدی کاراکتری کارکنید ، به لینک زیر رفته و کتابخونه ی مربوط به السیدی کاراکتری را که در پست اول موجود است ، دانلود کنید ( به همراه pdf آموزشی)
          http://www.eca.ir/forum2/index.php?topic=82130.0

          بعد میریم سراغ اینها:
          1- حجم زیاد اشغال شده
          2- اون برنامه ای که خواسته بودید

          توجه : فرقی نمیکنه از کدوم کتابخونه استفاده میکنید ، در هر دوحالت کدهای اضافه ای تولید میشه. که بعد از اقدام شما ، به علت آن و راه رفع آن میپردازیم.
          خیلی خوب بود. مو به مو انجام دادم و میشه گفت یکمی دستم اومد که چیکار باید کرد.بازم از راهنمایی خوب و تاپیک مفیدتون تشکر میکنم.
          کد نوشته شده حدود 2.5 درصد از میکرو مگا 32 رو اشغال کرد که در مقایسه با کد 5.6 درصدی من خیلی بهتر بود .آیا با این وجود بازم میشه حجمش رو کمتر کرد؟اصلا چرا کد من حجم بالاتری تولید کرد و کد شما کمتر؟اگر میشه لطفا توضیح بدید.
          در آخر اگر اون قسمت شمارنده رو با تاخیر توی حلقه و نمایش روی LCD رو هم بنویسید ممنون میشم.راستش تو دستورات برای نمایش روی lcd فقط میشه کاراکتر و string نمایش داد .خیلی باهاش کلنجار رفتم ولی آخرش متوجه نشدم چطور متغیرم رو به این دو تا تبدیل کنم.

          با تشکر

          دیدگاه


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

            نوشته اصلی توسط nanocycle
            خیلی خوب بود. مو به مو انجام دادم و میشه گفت یکمی دستم اومد که چیکار باید کرد.بازم از راهنمایی خوب و تاپیک مفیدتون تشکر میکنم.
            کد نوشته شده حدود 2.5 درصد از میکرو مگا 32 رو اشغال کرد که در مقایسه با کد 5.6 درصدی من خیلی بهتر بود .آیا با این وجود بازم میشه حجمش رو کمتر کرد؟اصلا چرا کد من حجم بالاتری تولید کرد و کد شما کمتر؟اگر میشه لطفا توضیح بدید.
            در آخر اگر اون قسمت شمارنده رو با تاخیر توی حلقه و نمایش روی LCD رو هم بنویسید ممنون میشم.راستش تو دستورات برای نمایش روی lcd فقط میشه کاراکتر و string نمایش داد .خیلی باهاش کلنجار رفتم ولی آخرش متوجه نشدم چطور متغیرم رو به این دو تا تبدیل کنم.

            با تشکر
            خواهش میکنم


            میشه یکم حجم کد را کاهش داد . بعدا اگه خواستید توضیح میدم.

            برای متغییر پست زیر را بخونید.
            http://www.eca.ir/forum2/index.php?topic=82130.msg501111#msg501111

            برای استفاده از تاخیر مشخص میتونید از توابع زیر استفاده کنید:

            کد:
            _delay_ms(n);
            _delay_us(n);

            مثال :
            دستور زیر تاخیر 100 میلی ثانیه ایجاد میکند:

            کد:
            _delay_ms(100);
            دستور زیر تاخیر 100 میکرو ثانیه ایجاد میکند:

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

            دیدگاه


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

              نوشته اصلی توسط RubeuS
              راستش وقت نشد کامل تابع را بنویسم.

              ولی خوب یک هدر نوشتم براتون .. خیلی عالیه.
              دیگه بجای اینکلود کردن stdlib.h اگه این هدر را اینکلود کنید ، میتونید به همه ی توابع stdlib دسترسی داشته باشید + یک تابع ftoa :
              http://mortazavi91.persiangig.com/Codes/ftoa_stdlib.rar
              از زیپ خارج کنید و داخل پوشه پروژه تون کپی کنید.
              این تابع فقط دو پارامتر میگیره که پارامتر اول یک عدد اعشاری( float ) است و پارامتر دوم یک رشته است. و عدد اعشاری را با 2 رقم دقت داخل رشته میریزه.

              مثال:
              کد:
              #include "ftoa_stdlib.h"
              
              int main(void)
              {
              	char str[10];
              	float f=-123.57;
              	ftoa(f,str);
              	while(1);
              }
              خیلی ممنون مهندس.من شرمندت هستم.این تابع فقط میتونه با دقت 2 رقم تبدیل کنه؟ اگه بخوایم بیشتر باشه چیکار میشه کرد؟
              تکاور شدن جرات افزون کند.....هراس از دل مرد بیرون کند....


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

              دیدگاه


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

                نوشته اصلی توسط سعید دلشاد منور
                خیلی ممنون مهندس.من شرمندت هستم.این تابع فقط میتونه با دقت 2 رقم تبدیل کنه؟ اگه بخوایم بیشتر باشه چیکار میشه کرد؟
                خواهش میکنم.

                دوباره دانلود کنید.

                ایندفعه 3تا پارامتر میگیره . که باید پارامتر وسطی را یا 0 یا 1 یا 2 یا 3 یا 4 بدید. و میتونید اینجوری دقت اعشار را مشخص کنید/


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

                دیدگاه


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

                  سلام

                  ببخشید کارکرد این عملگر چیه ؟

                  باتشکر .

                  کد:
                  a->b

                  دیدگاه


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

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

                    ببخشید کارکرد این عملگر چیه ؟

                    باتشکر .

                    کد:
                    a->b
                    ببنید امکان داره بعضی عملگرها چند کاربرد مختلف را داشته باشند و بسته به جای استفاده از آنها یک عمل خاص انجام دهند.
                    در رابطه با این عملگر ، من الان چیزی که در ذهنم هست یک عمل بخصوص میباشد . (باید در برنامه دیده شود) البته شاید فقط همین عمل که تو ذهنمه را انجام دهد ( میگم ... باید تو برنامه دید)
                    (البته تو زبان ++C در مبحث شی گرایی هم کاربرد داره که نیاز نیست بدونید ، چون تو میکرو بیشتر با C سرو کار داریم)

                    بریم سراغ کاربرد <-- :

                    مطمئنا کسی که با نرم افزار سروکار داشته باشه و با ساختمان داده هایی مثل لیست پیوندی (شنیدید؟) کارکرده باشه ، حتما با این عملگر آشناست.

                    کاربردش یکم مفصله.

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

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

                    خوب پس فهمیدیم دیتا آبجکت یک ظرفه :
                    حالا ما دو دسته دیتا آبجکت داریم:

                    1- دیتا آبجکت های اولیه و ساده: همون int و char و float و double و مشتقاتشون که میدونید چی هستن دیگه.


                    2- دیتا آبجکت های ساختاری : این دیتا آبجکت ها از کنار هم اومدن یک تعداد دیتا آبجکت دیگه بوجود میان.
                    مثال : اگه گفتید....
                    اره - همون : آرایه . آرایه از یک سری دیتا آبجکت هم نوع بوجود میاد.
                    یعنی یک تعداد char یا یک تعداد int کنار هم میان و یک آرایه را بوجود میارن.

                    خوب الان یک سوال تو ذهنتون بوجود نیومد؟
                    اگه بخوایم یک دیتا آبجکتی داشته باشیم که عنصرهاش هم نوع نباشند چی؟ چیکار کنیم؟
                    اینجاست که مفهوم یک دیتا آبجکت ساختاری به نام استراکچر بوجود میاد .


                    استراکچر: که تو سی با struct نشونش میدن.(تو برنامه ها دیدیدش؟ البته من که خیلی کم دیدم ، اکثرا تو برنامه های میکرو اینچیزا استفاده نمیشه و خیلی ساده و ابتدایی نوشته میشه) ( البته یه دور که برنامه نویسی پیشرفته پاس کنید ، کامل دستتون میاد (تو کامپیوتر خیلی باش سروکار داریم))

                    الان باید بدونید کاربردش چیه .

                    به عنوان مثال ما میخوایم یک دیتا آبجکتی داشته باشیم که شامل 1 متغییر int و یک متغییر float و یک آرایه ی 10 تایی از char ، باشه . ( تعجب نکنید ، اره میشه عنصر یک دیتا آبجکت ساختاری یک دیتا آبجکت ساختاری دیگه باشه)
                    برای اینکار تو c به شکل زیر ایجادش میکنیم:
                    کد:
                    struct MyStruct
                    {
                    	int i;
                    	float f;
                    	char str[10];	
                    };
                    دیدید چه راحته؟
                    فقط باید به یک نکته توجه بشه : با نوشتن این کدها ، حافظه ای گرفته نمیشه.

                    ا یعنی چی؟ خوب به چه دردی میخوره؟ حالا چیکار کنبم که حافظه برای این دیتا آبجکتمون اختصاص داده بشه ؟

                    خوب کاری نداره .دیدید مثلا تو یه جای برنامه مینویسید ;int n ؟ بعد یک دیتا آبجکت از نوع عدد صحیح ( 2 بایت) با نام n اعلان میشه(بهش حافظه داده میشه)؟
                    اینجا هم همین کار رو کنید ولی به جای کلمه ی کلیدی int از struct MyStruct استفاده کنید.
                    مثال:
                    کد:
                    struct MyStruct
                    {
                    	int i;
                    	float f;
                    	char str[10];	
                    };
                    int main(void)
                    {
                    	struct MyStruct n;
                    	while(1);
                    }
                    الان داخل main برنامه یک دیتا آبجکت همون جور که میخواستیم ساخته شد ( با نام n )
                    حالا یه چیز جالب:
                    سوال : اندازه ی این دیتا آبجکت ( n ) چقدره؟ ( چند بایت)
                    جواب : حساب میکنیم...
                    یک int داریم پس تا اینجا 2 بایت ، یک float داریم که خودش 4 بایته ، پس روهم میشه 6 بایت . یک آرایه 10 بایتی داریم ،
                    پس کلا میشه 16 بایت.

                    برای دسترسی به یک عنصر خاص از استراکچرمون باید از عملگر . (نقطه) استفاده کنیم.
                    به عنوان مثال:
                    خوب کد زیر را نگاه کنید.( راحت متوجه قضیه میشید)
                    کد:
                    struct MyStruct
                    {
                    	int i;
                    	float f;
                    	char str[10];	
                    };
                    int main(void)
                    {
                    	struct MyStruct n;
                    	n.i=100;
                    	n.f = 1.66;
                    	n.str[0]='C';
                    	
                    	while(1);
                    }
                    فکر کنم خودش گویا باشه و نیاز به توضیح نداره . فقط بگم که :
                    تو عنصر i مقدار 100 ریختیم ( عدد صحیح)
                    تو عنصر f مقدار 1.66 ریختیم ( عدد اعشاری)
                    تو عنصر با اندیس 0 آرایه str کد اسکی کاراکتر 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

                      شروع میکنم یک مختصری از اشاره گرها بگم و در آخر به عملگر <-- می پردازم:

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

                      اشاره گر در سی یک دیتا آبجکتیه که به یک دیتا آبجکته دیگه اشاره میکنه.
                      قابل فهمه؟ نه؟ باشه یجور دیگه میگم:
                      با توجه به پست قبلم با دیتا آبجکت ها که دیگه مشکلی ندارید؟
                      خوب این ظرفها اصلش کجا بودند؟
                      اره در حافظه.
                      خوب پس تو حافظه اند. ولی چجوری بشون میتونیم دسترسی پیدا کنیم؟
                      دیدیم که هر دیتا آبجکتی یک نام برا خودش داره که موقع اعلان، برنامه نویس اون رو مشخص میکنه مثلا ;int n میگه نام دیتا آبجکت n باشه.
                      ولی خوب این نام برا راحتیه برنامه نویسه و یک قرداده بین برنامه نویس و کامپایلر .
                      یک اصل بزرگ :
                      هر چی درون حافظه قرار میگیرد دارای یک آدرس است که از طریق این آدرس بهش میشه دسترسی پیدا کرد.
                      پس الان فهمیدیم این کامپایلر چیکار میکنه ، میاد میگه n را به آدرس مثلا 0x457f در حافظه نسبت میده . پیشش خودش قرارداد میکنه.
                      پس نتیجه گیری اخلاقی چی شد؟
                      هر دیتا آبجکت یک آدرس در حافظه داره که میشه با این آدرس بهش دسترسی داشت.
                      خوب اینا چه دخلی پیدا میکنه به اشاره گر؟
                      یادتونه بتون گفتم اشاره گر خودش یک دیتا آبجکته که به دیتا آبجکت دیگه اشاره میکنه؟
                      منظور از این اشاره کردن یعنی اینکه محتویات اشاره گر ، آدرس اون دیتا آبجکته.
                      یک ظرف فرض کنید که توش آدرس ظرف دیگست.
                      تو سی برای اینکه یک اشاره گر اعلان کنیم ، از عملگر * استفاده میکنیم:
                      for example :

                      کد:
                      int *ptr;
                      این چی میگه؟
                      میگه : آقای کامپایلر یک دیتا آبجکت از نوع اشاره گر به int برام ایجاد کن. اسمشم من میخوام بزارم انقزی.. :دی ( نه اسمش ptr باشه)

                      بحث اشاره گرها در سی خیلی خیلی مفصله و اکثرا یکی دو فصل از این کتاب 1000 صفحه ایها به اشاره گر میپردازند !!!

                      خوب اصلا سوال اصلی چی بود؟
                      عملکرد <-- چیست؟

                      خوب برای بررسی ، یک دیتا آبجکت از نوع استراکچر ایجاد میکنیم: ( مثل پست قبلیم)
                      کد:
                      struct MyStruct
                      {
                      	int i;
                      	float f;
                      	char str[10];	
                      };
                      int main(void)
                      {
                      	struct MyStruct n;
                      
                      	while(1);
                      }
                      حالا یک اشاره گر از نوع اشاره گر به struct MyStruct ایجاد میکنیم:
                      پس در کل اینجوری میشه:
                      کد:
                      struct MyStruct
                      {
                      	int i;
                      	float f;
                      	char str[10];	
                      };
                      int main(void)
                      {
                      	struct MyStruct n;
                      	struct MyStruct *ptr;
                      	
                      	while(1);
                      }
                      خوب الان هنوز اشاره گر به جایی اشاره نمیکنه ، رو هواست ، باید بش بگیم پسر خوب به دیتا آبجکت ما یعنی همون n اشاره کن.
                      چجوری بش بگیم؟
                      یادتونه تو اشاره گر چی قرار میگرفت؟
                      اره ، آدرس
                      پس باید آدرس دیتا آبجکتمون را بش بدیم.
                      ولی چجوری ؟ ماکه فقط یه اسم میدونیم ازش و اونم n هست؟ مگه آدرسش رو فقط کامپایلر نمیدونه؟
                      نه ، سی یکی از قوی ترین و منعطف ترین زبان هاست . غیر ممکن توش غیرممکنه. همین
                      برای اینکه آدرس یک دیتا آبجکت را بدست بیاریم باید از عملگر & استفاده کنیم.
                      پس کد اینجوری میشه:
                      کد:
                      struct MyStruct
                      {
                      	int i;
                      	float f;
                      	char str[10];	
                      };
                      int main(void)
                      {
                      	struct MyStruct n;
                      	struct MyStruct *ptr;
                      	ptr=&n;
                      	
                      	while(1);
                      }
                      خوب الان به اشاره گر گفتیم که به n اشاره کن.


                      پس این عملگر <-- چی شد؟؟
                      اینهمه کار کردیم ، این کارش چیه؟

                      دقیقا الان وقتشه که بگم:
                      عملگر <-- وقتی کاربرد داره که ما یک اشاره گر به یک استراکچر داشته باشیم و بخواهیم از طریق این اشاره گر به عناصر اون استراکچر دسترسی پیدا کنیم.( دیدید چقدر به هر دو موضوع ربط داشت)
                      حالا یعنی چی؟
                      عملکرد عملگر . (نقطه) یادتونه ؟ همونه فقط عملگر <-- برای اشاره گر کاربرد داره.
                      مثال:
                      کد:
                      struct MyStruct
                      {
                      	int i;
                      	float f;
                      	char str[10];	
                      };
                      int main(void)
                      {
                      	struct MyStruct n;
                      	struct MyStruct *ptr;
                      	ptr=&n;
                      	ptr->i=6;
                      	ptr->f=7.89;
                      	ptr->str[0]='A';
                      	while(1);
                      }

                      سوال: ا خوب مگه مرض داشتیم اشاره گر بگیریم و این مکافات ؟ خوب از همون .(نقطه) استفاده میکردیم!! مگه سیخمون میزد؟

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

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

                          با عرض سلام.
                          سید جان ما یه متغیر داریم از نوع یا اعشاری یا صحیح.میخواییم اونو بدین صورت در بیاریم
                          "% str"
                          یعنی یه متغیر رو نشون بده و یه علامت درصد هم جلوش.فکر کنم با تابع sprintf بشه?
                          تکاور شدن جرات افزون کند.....هراس از دل مرد بیرون کند....


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

                          دیدگاه


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

                            نوشته اصلی توسط سعید دلشاد منور
                            با عرض سلام.
                            سید جان ما یه متغیر داریم از نوع یا اعشاری یا صحیح.میخواییم اونو بدین صورت در بیاریم
                            "% str"
                            یعنی یه متغیر رو نشون بده و یه علامت درصد هم جلوش.فکر کنم با تابع sprintf بشه?
                            سلام

                            مثلا %30 :

                            کد:
                            sprintf(str,"%d%%",30);
                            یعنی برای نشون دادن کاراکتر % باید از %% استفاده کرد(برا تمایز اینکار میشه)

                            راستی خوب شد گفتید.

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

                              مثلا نوشته OSC.CTRL = 2 حالا قبلا arm که کار میکردم یه جدول تو آرم بود که همه دستورات بود حالا میخوام بدونم آیا studio اینجور چیزی داره ؟ اصلا از کجا باید دستورای برنامه نویسی رو پیدا کنم ممنون

                              دیدگاه


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

                                نوشته اصلی توسط reza javahery
                                من دارم با xmega در gcc کار میکنم البته اولین باریه که با c کار میکنم ولی بیسیک که اصلا به مفت نمی ارزید روکاملا فول هستم ولی یک مشکل کوچیک دارم

                                مثلا نوشته OSC.CTRL = 2 حالا قبلا arm که کار میکردم یه جدول تو آرم بود که همه دستورات بود حالا میخوام بدونم آیا studio اینجور چیزی داره ؟ اصلا از کجا باید دستورای برنامه نویسی رو پیدا کنم ممنون
                                ببنید تو تا بحث مستقله :
                                یکی زبان برنامه نویسی
                                دیگری ماشینی که روش برنامه مینویسید.

                                زبان برنامه نویسی سی برا خودش یه دنیاییه و اینطور بگم که رفرنسش یک کتاب 1000 صفحه ای است و کلا با تجربه بدست میاد.
                                اینطور نیست که یه جدول دستورات باشه و خوب حالا حفظش کنیم و خلاص.
                                نمیخوام بترسونمتون ولی برا اینکه منظورم را واضحتر برسونم و سی را یه جورایی معرفی کنم ، فقط به جمله زیر دقت کنید و یک کمی دربارش فکر کنید ، اونوقته که اینجوری میشید--> :eek: :
                                تو سی میشه دستور را ساخت ، برنامه نویس میتونه برخی اصول را عوض کنه (به دلخواه خودش) . حتی عملگرها را جابجا کرد . یعنی میشه کاری کرد که شما وقتی از - برای تفریق استفاده میکنید دو عدد را جمع کنه. و خیلی کارای دیگه.
                                از قدرت سی هرچی بگم کم گفتم .
                                اگر سی را یک زیر دریایی اتمی فرض کنید ، بیسیک میشه قایق موتوری .
                                راه اندازی یک زیردریایی اتمی مشکلتر و زمانبرتره یا قایق موتوری؟ مسلما زیردریایی
                                کلا یک زبان پایه و مبنا است و مناسب برای کارهای سنگین مثل OS و...

                                خوب ، الان خوب ترسوندمتون؟

                                نگران نباشید. اگر میخواید واقعا اصولی از پایه یاد بگیرید، و تا تهش وایسادید به لینک آخر موجود در امضام مراجعه کنید( "مراحل فراگیری برنامه نویسی حرفه ای برای انواع پردازنده ها" )
                                توصیه : زیاد تو قیدو بند کامپایلر نباشید . برید سی یاد بگیرید نه برنامه نویسی سی تو کامپایلر خاص.

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

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

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

                                در رابطه با جدول پردازنده هم نمیدونم ، شاید منظورتون ISA پردازنده باشه ، که تو همون تاپیک توضیح دادم.(اون دستورات زبان ماشین پردازنده است)

                                دیگه نمیتونم تایپ کنم
                                فعلا
                                راه اندازی ماژول 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