اطلاعیه

Collapse
No announcement yet.

کامپایلر خفن C برای PIC

Collapse
این موضوع بسته شده است.
X
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    #31
    پاسخ : کامپایلر خفن C برای PIC

    دوست عزیز Study یادتون رفت که بگید چه جوری حجم برنامتون را کم کردید . باید چه تنظیماتی را در mplab c18 انجام دهم تا کد هگز تولید شده کمتر شود



    با تشکر
    *** کم رنگ ترن قلم جهان از. پررنگ ترن حافظه  جهان ماندگارتر است ***

    دیدگاه


      #32
      پاسخ : کامپایلر خفن C برای PIC

      حامد جان من حجم کد رو کم نکردم، قضیه اینجوری بود: برنامه ای که نوشته بودم کد خیلی زیادی نسبت به چیزی که باید میداد داده بود، بعد از اونجا که میدونستم این مقدار زیاد از حافظه ها که استفاده شده طبیعی نیست و حتما برای کار خاصی استفاده شده پیگیر شدم و متوجه شدم که C18 در حالت عادی در برنامه ها برای تنظیم پشته درون Ram کدی تولید میکنه که لینکر هم اون کد رو به برنامه اضافه میکنه تا اگر پشته سخت افزاری کم اومد، از RAM به عنوان پشته استفاده بشه ( مثل MEGA AVR ها ) من به این کد نیازی نداشتم چون اصلا نمیخواستم توی Ram به این صورت پشته داشته باشم، به همین خاطر سوال کردم که باید چه کار کنم که کدهای این قسمت ( تنظیمات پشته ) به برنامه من اضافه نشه؟ که بعد دوستان گفتند که میتونم با استفاده از تنظیمات لینکر کاری کنم که این کد به برنامه اضافه نشه و فایل Hex من فقط شامل برنامه اصلی خودم باشه. اما من نمیخواستم اینکار رو انجام بدم، برای همین در مورد اینکه چطور لینکر رو تنظیم کنم که این کد رو اضافه نکنه دقیقا سوال نکردم.
      اما به طور کلی زمانی که خودم میخوام در هر کاری حجم کد تولید شده کم بشه از اسمبلی استفاده میکنم یا اینکه در جاهایی که میدونم C کد خیلی خوبی تولید نمیکنه خودم با اسمبلی در بین C اون کار رو انجام میدم، میشه گفت من تاحالا کاری انجام ندادم که از اسمبلی اصلا استفاده نکرده باشم، بعضی از برنامه های C که برای میکرو مینویسم بیشتر شبیه این میمونه که در بین اسمبلی C نوشته شده باشه تا در بین C اسمبلی !!
      از آنجا که گاهی فرصت بازخوانی پست نیست، بابت غلط های املایی و نگارشی احتمالی معذرت میخوام.
      هیچیک از پاسخ هایی که میدم را کاملا تایید نمیکنم و ممکن هست اشتباه کرده باشم، اگر من به نوشته ام مطمئن هستم شما مشکوک باشید.
      اگر در حل مشکل من کمک کردید و دکمه تشکر رو نزدم حتما فراموش کردم کوچکترین کمک شما برایم ارزشمند است!
      اگر به هر طریقی از من ناراحت شدید حتما با یک پیام خصوصی تذکر بدهید تا مشکل رو حل کنیم و رابطه ی صمیمانه، پایدار بماند.
      شاد و موفق باشید

      دیدگاه


        #33
        پاسخ : کامپایلر خفن C برای PIC

        نوشته اصلی توسط Study
        حامد جان من حجم کد رو کم نکردم، قضیه اینجوری بود: برنامه ای که نوشته بودم کد خیلی زیادی نسبت به چیزی که باید میداد داده بود، بعد از اونجا که میدونستم این مقدار زیاد از حافظه ها که استفاده شده طبیعی نیست و حتما برای کار خاصی استفاده شده پیگیر شدم و متوجه شدم که C18 در حالت عادی در برنامه ها برای تنظیم پشته درون Ram کدی تولید میکنه که لینکر هم اون کد رو به برنامه اضافه میکنه تا اگر پشته سخت افزاری کم اومد، از RAM به عنوان پشته استفاده بشه ( مثل MEGA AVR ها ) من به این کد نیازی نداشتم چون اصلا نمیخواستم توی Ram به این صورت پشته داشته باشم، به همین خاطر سوال کردم که باید چه کار کنم که کدهای این قسمت ( تنظیمات پشته ) به برنامه من اضافه نشه؟ که بعد دوستان گفتند که میتونم با استفاده از تنظیمات لینکر کاری کنم که این کد به برنامه اضافه نشه و فایل Hex من فقط شامل برنامه اصلی خودم باشه. اما من نمیخواستم اینکار رو انجام بدم، برای همین در مورد اینکه چطور لینکر رو تنظیم کنم که این کد رو اضافه نکنه دقیقا سوال نکردم.
        اما به طور کلی زمانی که خودم میخوام در هر کاری حجم کد تولید شده کم بشه از اسمبلی استفاده میکنم یا اینکه در جاهایی که میدونم C کد خیلی خوبی تولید نمیکنه خودم با اسمبلی در بین C اون کار رو انجام میدم، میشه گفت من تاحالا کاری انجام ندادم که از اسمبلی اصلا استفاده نکرده باشم، بعضی از برنامه های C که برای میکرو مینویسم بیشتر شبیه این میمونه که در بین اسمبلی C نوشته شده باشه تا در بین C اسمبلی !!
        سلام

        من یه زمتنی عشق اسمبلی داشتم حدود 10-11 سال پیش به زبان اسمبلی 16 بیتی و 32 بیتی کامپیوتر هم کاملا مصلتم ویه مدت هم عشق نوشتن برنامه های زیر 1 کیلو باید برای ویندوز داشتم! :biggrin: ولی میدونید بچه ها درسته تو میکرو خیلی فضا مهمه ولی نوشتم برنامه به زبال اسمبلی خیلی وقت گیره! زبانهایی مثل بیسیک خیلی کار آمد ترن با اینکه خیلی چیزارو از دست میدین ولی خیلی فرقی نداره تو خروجی!

        دیدگاه


          #34
          پاسخ : کامپایلر خفن C برای PIC

          arvinfx جان توی کارهای حرفه ای با میکروکنترلر بیسیک اصلا مطرح نیست، این زبان تقریبا فقط به درد کارهای ساده و متوسط و آموزش برنامه نویسی میخوره در پروژه های بزرگ و پیچیده مشکلات زیادی به بار میاره ( به خصوص اگر از اسمبلی در بین کدها استفاده نکرده باشید ) و میشه گفت هیچ طراح حرفه ای برای انجام کارهای بزرگ سراغ بیسیک نمیره مگر اینکه اسمبلی و c بلد نباشه ! منظورم این هست که شاید بیسیک برای این پروژه هایی که اینجا میبینیم به دلیل ساده کردن کار، کارآمد تر باشه اما در پروژه های سنگین نه تنها کارآمدتر نیست بلکه اصلا کارآمد نیست !!
          در مورد وقت گیر بودن اسمبلی باید بگم که اگر با اسمبلی کار کردید حتما میدونید که معمولا اسمبلی نوشتن فقط بار اولش وقت گیر هست، همونطور که برنامه نویسان بیسیک و C از دستورات و توابع آماده استفاده میکنند برنامه نویسان اسمبلی هم از ماکرو ها و روتینها استفاده میکنند، حتی اگر اینکار رو هم نکنند معمولا copy و paste کردن باعث میشه که خیلی سریع برنامه اسمبلی تمام بشه، درسته که وفت گیر تر از اونها هست اما برای کسی که به اسمبلی و تکنیکهای برنامه نویسی مسلط باشه و برنامه های زیادی نوشته باشه اونقدرا هم که میگند وقت گیر و پر دردسر نیست، به خصوص اسمبلی AVR یا میکروهای سری 18 و بالاتر pic .
          در مورد اینکه در خروجی خیلی فرقی نداره هم بستگی به این داره که طراح تفاوت حجم خروجی رو توی چی ببینه، برای کسی که با بیسیک میتونه کارهایی که میخواد رو بدون هیچ مشکلی انجام بده 2، 3، 4، یا گاهی 5 برابر شدن کد برنامه نسبت به چیزی که میتونه باشه تفاوت مهمی نیست، اما برنامه نویس های حرفه ای یک خط کد اسمبلی معادل 2 بایت رو زیاد شدن کد و از دست دادن حافظه میدونند به طوری که در راهنمای اسمبلر برای صرفه جویی در یک word از حافظه برنامه نکته هایی مثل این میبینیم: " به جای نوشتن دوتا NOP یکبار بنویسید BRA $+1 که یک word در مصرف حافظه برنامه صرفه جویی کرده باشید " این نوشته ها در راهنمای اسمبلر بیانگر این هست که تک تک خانه های حافظه دارای ارزش زیادی هستند. بدون شک برای افرادی که دو بایت از حافظه اینقدر با ارزش هست حتی یک و نیم برابر شدن حجم برنامه هم غیر قابل تحمل هست چه برسه به چند برابر شدن. موقع برنامه نویسی یک پروژه سنگین و پیچیده باید دقت کنید به این ترانزیستورهای خانه های حافظه توی تراشه که مبادا اونهارو مفت از دست بدید. شاید شما با نوشتن اسمبلی کلی جا اضافه هم بیارید اما این دلیل بر این نیست که حالا که جا هست با بیسیک بنویسم، چراکه هر پروژه باید مقداری حافظه آزاد داشته باشه تا بتونید برای به روز کردن اون در زمان لازم اقدام کنید.
          از آنجا که گاهی فرصت بازخوانی پست نیست، بابت غلط های املایی و نگارشی احتمالی معذرت میخوام.
          هیچیک از پاسخ هایی که میدم را کاملا تایید نمیکنم و ممکن هست اشتباه کرده باشم، اگر من به نوشته ام مطمئن هستم شما مشکوک باشید.
          اگر در حل مشکل من کمک کردید و دکمه تشکر رو نزدم حتما فراموش کردم کوچکترین کمک شما برایم ارزشمند است!
          اگر به هر طریقی از من ناراحت شدید حتما با یک پیام خصوصی تذکر بدهید تا مشکل رو حل کنیم و رابطه ی صمیمانه، پایدار بماند.
          شاد و موفق باشید

          دیدگاه


            #35
            پاسخ : کامپایلر خفن C برای PIC

            نوشته اصلی توسط Study
            arvinfx جان توی کارهای حرفه ای با میکروکنترلر بیسیک اصلا مطرح نیست، این زبان تقریبا فقط به درد کارهای ساده و متوسط و آموزش برنامه نویسی میخوره در پروژه های بزرگ و پیچیده مشکلات زیادی به بار میاره ( به خصوص اگر از اسمبلی در بین کدها استفاده نکرده باشید ) و میشه گفت هیچ طراح حرفه ای برای انجام کارهای بزرگ سراغ بیسیک نمیره مگر اینکه اسمبلی و c بلد نباشه ! منظورم این هست که شاید بیسیک برای این پروژه هایی که اینجا میبینیم به دلیل ساده کردن کار، کارآمد تر باشه اما در پروژه های سنگین نه تنها کارآمدتر نیست بلکه اصلا کارآمد نیست !!
            در مورد وقت گیر بودن اسمبلی باید بگم که اگر با اسمبلی کار کردید حتما میدونید که معمولا اسمبلی نوشتن فقط بار اولش وقت گیر هست، همونطور که برنامه نویسان بیسیک و C از دستورات و توابع آماده استفاده میکنند برنامه نویسان اسمبلی هم از ماکرو ها و روتینها استفاده میکنند، حتی اگر اینکار رو هم نکنند معمولا copy و paste کردن باعث میشه که خیلی سریع برنامه اسمبلی تمام بشه، درسته که وفت گیر تر از اونها هست اما برای کسی که به اسمبلی و تکنیکهای برنامه نویسی مسلط باشه و برنامه های زیادی نوشته باشه اونقدرا هم که میگند وقت گیر و پر دردسر نیست، به خصوص اسمبلی AVR یا میکروهای سری 18 و بالاتر pic .
            در مورد اینکه در خروجی خیلی فرقی نداره هم بستگی به این داره که طراح تفاوت حجم خروجی رو توی چی ببینه، برای کسی که با بیسیک میتونه کارهایی که میخواد رو بدون هیچ مشکلی انجام بده 2، 3، 4، یا گاهی 5 برابر شدن کد برنامه نسبت به چیزی که میتونه باشه تفاوت مهمی نیست، اما برنامه نویس های حرفه ای یک خط کد اسمبلی معادل 2 بایت رو زیاد شدن کد و از دست دادن حافظه میدونند به طوری که در راهنمای اسمبلر برای صرفه جویی در یک word از حافظه برنامه نکته هایی مثل این میبینیم: " به جای نوشتن دوتا NOP یکبار بنویسید BRA $+1 که یک word در مصرف حافظه برنامه صرفه جویی کرده باشید " این نوشته ها در راهنمای اسمبلر بیانگر این هست که تک تک خانه های حافظه دارای ارزش زیادی هستند. بدون شک برای افرادی که دو بایت از حافظه اینقدر با ارزش هست حتی یک و نیم برابر شدن حجم برنامه هم غیر قابل تحمل هست چه برسه به چند برابر شدن. موقع برنامه نویسی یک پروژه سنگین و پیچیده باید دقت کنید به این ترانزیستورهای خانه های حافظه توی تراشه که مبادا اونهارو مفت از دست بدید. شاید شما با نوشتن اسمبلی کلی جا اضافه هم بیارید اما این دلیل بر این نیست که حالا که جا هست با بیسیک بنویسم، چراکه هر پروژه باید مقداری حافظه آزاد داشته باشه تا بتونید برای به روز کردن اون در زمان لازم اقدام کنید.
            عزیزم من خودم هیچی رو به اسمبلی ترجیح نمیدم ! ولی خوب برای انجام کارهای خاص خوب باید ازش استفاده کرد! ولی بهر حال بیسیک هم میتونه اسمبلی توش نوشت البته من اسمبلی PICآ‌ رو بلد نیستم ولی مال سی پی یو های 80586آ‌ رو بیشتر برای نوشتن ویروس و شکستن قفل نرم افزار استفاده کردم! و کمتر برای نوشتن برنامه حای کاربردی چند سال طول میکشه! :biggrin:

            ولی بیشتر کارهای میکرویی کنترول و راه اندازی ادوات جانبیه نه ژانگولر بازی توی خود میکرو... :mrgreen: که اونا اکثرا سادس

            دیدگاه


              #36
              پاسخ : کامپایلر خفن C برای PIC

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

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

              دیدگاه


                #37
                پاسخ : کامپایلر خفن C برای PIC

                سلام
                به نظر من همه ی کامپایلر هایی که در موردشون بحث کردید توانایی رقابت با کامپایلر mplab-c18 رو ندارن


                از mplab-c18 غافل نشید که تنها کامپایلریه که استاندارد جهانی داره و تو مسابقات ملی مهارت (world skills ) تو مرحله ی کشوری و جهانی مورد استفاده قرار می گیره

                دیدگاه


                  #38
                  پاسخ : کامپایلر خفن C برای PIC

                  سلام.
                  درسته. خود نرم افزار MPLAB به صورت اسمبلی هست. ولی پلاگینی به نام MPLAB-C18 موجود می باشد که بر روی MPLAB نصب می شود و شما قادر به نوشتن کد های C برای PIC18 می شوید.

                  دیدگاه


                    #39
                    پاسخ : کامپایلر خفن C برای PIC

                    نوشته اصلی توسط محمد ایجی
                    سلام.
                    درسته. خود نرم افزار MPLAB به صورت اسمبلی هست. ولی پلاگینی به نام MPLAB-C18 موجود می باشد که بر روی MPLAB نصب می شود و شما قادر به نوشتن کد های C برای PIC18 می شوید.
                    ببینم خط به خط هم میتونه توی مدار دیباگ کنه برنامه رو؟ با همون زبان C ها

                    دیدگاه


                      #40
                      پاسخ : کامپایلر خفن C برای PIC

                      سلام آره میتونه
                      حتی تو میتونی علاوه بر دیباگ روی نرم افزار با اتصال پروگرمر icd2 به مدارت در حین کار مدار ،خط به خط دیباگ کنی

                      دیدگاه


                        #41
                        پاسخ : کامپایلر خفن C برای PIC

                        نوشته اصلی توسط yamahdi1
                        سلام آره میتونه
                        حتی تو میتونی علاوه بر دیباگ روی نرم افزار با اتصال پروگرمر icd2 به مدارت در حین کار مدار ،خط به خط دیباگ کنی
                        خط به خط به زبان اسمبلی یا سی؟ :rolleyes:

                        دیدگاه


                          #42
                          پاسخ : کامپایلر خفن C برای PIC

                          سلام دوستان
                          شاید صحبتم زیاد به موضوع تاپیک مربوط نباشه(از این بابت شرمنده) اما دیدم جمع همه اساتید جمعه گفتم همینجا بپرسم بهتره.
                          من قبلاً با 8051 و به زبان اسمبلی کار کردم.حالا میخوام با یه میکروی پیشرفته تر و یه زبان سطح بالاتر کار کنم تا هم از امکانات میکروهای جدید استفاده کنم و هم با زبانهای سطح بالا آشنا بشم. با مطالعه تاپیک ها به این نتیجه رسیدم بهتره با PIC و به زبان C و با کامپایلر CCS کار کنم.
                          اما یه مشکلی هست که چون من به اسمبلی عادت کردم زبان های سطح بالا یکم برام گنگه و یه سوالایی دارم:

                          1- از کجا میفهمید اجرای هر دستور یا تابع چقدر طول میکشه؟
                          2- برای کارهای خیلی دقیق (در حد نانوثانیه) حتماً باید از زبان اسمبلی استفاده کنید؟
                          3- وقتی از اسمبلی استفاده میکنید متغیر هایی که توسط C تعریف کردید از کجا فراخوانی میکنید؟
                          یا مثلاً ازکجا میفهمید یک آدرس از حافظه آزاده یا توسط C اشغال شده؟
                          5- برای متغیر های بولین کامپایلر یک بیت اشغال میکنه یا یک بایت؟

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

                          دیدگاه


                            #43
                            پاسخ : کامپایلر خفن C برای PIC

                            arvinfx عزیز :
                            mplab-c18 مخصوص زبان سیه که دیباگ خط به خط داره

                            دیدگاه


                              #44
                              پاسخ : کامپایلر خفن C برای PIC

                              نوشته اصلی توسط yamahdi1
                              arvinfx عزیز :
                              mplab-c18 مخصوص زبان سیه که دیباگ خط به خط داره
                              جدا" ! :eek: یعنی میشه زبان Cآ‌رو خط به خط اجرا کرد و نتیجه رو توی متغییر ها دید.!؟ :eek:

                              دیدگاه


                                #45
                                پاسخ : کامپایلر خفن C برای PIC

                                arvinfx عزیز :

                                آره میشه خط به خط اجرا کرد و نتیجه رو توی متغییر ها دید

                                کامپایلر mplab c18 رو واسه دانلود گذاشتم

                                دانلودش کن و ازش استفاده کرد

                                دیدگاه

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