اطلاعیه

Collapse
No announcement yet.

طریقه نوشتن برنامه های حجیم در زبان C

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

    طریقه نوشتن برنامه های حجیم در زبان C

    سلام دوستان

    طریقه نوشتن برنامه های حجیم در زبان سی به چه صورت تا دچار شلوغی و سردرگمی نشیم ؟

    نکات و یا ترفند هایی وجود داره ؟

    با سپاس
    I'm going to
    RWTH Aachen
    University

    #2
    پاسخ : طریقه نوشتن برنامه های حجیم در زبان C

    سلام
    اول اینکه تاپیکتون رو متناسب با فروم مربوطه باز کنید...متشکریم
    اگه بیس برنامه نویسی ندارید پیشنهاد میکنم حتما یک کتاب خوب در موردش بخونید
    ...
    چند تا نکته:
    1- اینکه اگر قرار هست یک پریفرال رو راه اندازی کنید تا جای ممکن برنامه های راه اندازیشو در یک فایل دیگه و در یک فولدر جداگانه بنویسید...یعنی مثلا اگه واسه SPI میکرو میخاید برنامه نویسی کنید توابعش رو در یک فایل جداگانه بنویسید و بعد داخل main اینکلود کنید...نجوه نوشتن برنامه در فایل جداگانه به این صورته که دو تا فایل یکی با پسوند h و دیگری با پسوند c بنویسید.داخل فایل اول دیفاین ها و پروتوتایپ متد ها رو بنویسید...و فایل دوم شامل متغیر ها و کد اصلی متد ها باشه....

    2- در حد امکان نام متغیرها رو متناسب با محتوای اون انتخاب کنید

    3- تا جایی که میشه از jump استفاده نکنید...استفاده از پرش یعنی اینکه نتونستید حالات مختلف برنامه رو کنترل کنید

    4- سعی کنید برای کار با آرایه ها از پوینتر اون ها استفاده کنید و کمتر از ایندکس استفاده کنید

    5- تا جای امکان متغیر الکی واسه هر کاری تعریف نکنید...معمولا یک متغیر به اسم temp یا هرچی که global هم هست تعریف کنید و هر جا نیاز بود ازش استفاده کنید

    6-واسه هر متد قبل تعریفش چند خط کامنت در مورد نحوه کارکردش بنویسید...مطمئن باشید بعد چند روز وقتی به کدهاتون نگاه کنید هیچی یادتون نمیاد.این کامنت گذاشتن در مورد برنامه های طولانی خیلی مهمه...

    مورد دیگه ای به ذهنم رسید اضافه میکنم....
    موفق باشید
    تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

    www.intelart.ir


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

    دیدگاه


      #3
      پاسخ : طریقه نوشتن برنامه های حجیم در زبان C

      اگه درست یادم بیاد پروزه ها رو به سه روش می نویسند.
      فانکشنال(
      functional)
      ماژولار(
      Modular)
      و شی گرائی(
      OOP)
      البته چون ما در مورد زبان C داریم صحبت میکنیم پس OOP نداریم و فقط همون دوتاست. اگه C++ کارکنید اونجا OOP داریم. برای پروژه های بزرگ (معمولا از 5 هزار خط به بالا)بهترین نوع برنامه نویسی OOP هستش. مثلا اون گزینه 1 که مهدی گفت میشه گفت ماژولار هستش. گزینه 2 یکی از موارد برای مدیریت پروزه هستش. گزینه 3 یعنی فرمان Jump هم یکی از فرامین پردازنده هستش و حتی حرفه ای ها هم در صورت لزوم ازش استفاده میکنند. البته به نظر خودم هم یه مقدار استفاده ازش مسخره هستش. گزینه های 4 و 5 هم برای مدیریت حافظه بسیار خوب هستش. خصوصا واسه ماها که با میکرو کار میکنیم.

      ولی اصل موارد همین سه گزینه ای بود که گفتیم. یه نفر که برنامه اش زیاد بزرگ نیست با چند تا تابع سروتهش رو به هم میاره. یکی دیگه قطعات و مازول هایی می خواد استفاده کنه و پروژه بزرگ تری داره، پس براش کتابخونه می نویسه و بقول مهدی میذاره توی یه فولدر و ضمیمه پروژه میکنه. یکی دیگه که حسابی پروزه بزرگی داره با C++ برنامه اش رو می نویسه و با سه ستون اصلی یعنی
      وراثت، کپسوله سازی و چند ریختی تمام پروزه رو می نویسه.
      توصیه میکنم حتما C++ رو یاد بگیرید.

      دیدگاه


        #4
        پاسخ : طریقه نوشتن برنامه های حجیم در زبان C

        نوشته اصلی توسط azadfalah نمایش پست ها
        سلام دوستان

        طریقه نوشتن برنامه های حجیم در زبان سی به چه صورت تا دچار شلوغی و سردرگمی نشیم ؟

        نکات و یا ترفند هایی وجود داره ؟

        با سپاس

        بستگی به بزرگی کار داره ولی پروژه به هر اندازه هم کوچک باشه : مثلا خودتون تنها کسی هستین که روی پروژه کار میکنین خیلی خوب هست که یک سری قوانین/سبک کد نویسی رو رعایت کنین. اگر وارد یک شرکت درست و حسابی بشین معمولا یک دا کیومنت بهتون میدن که سبک های کد نویسی اون شرکت توش نوشته شده. اگر برای خودتون کار میکنین میتونین از قوانین شرکت های بزرگ استفاده کنین. برای مثال:
        سبک کد نویسی به زبان C++ در شرکت گوگل: https://google.github.io/styleguide/cppguide.html
        سبک کد نویسی به زبان C/C++ در شرکت اینتل: https://software.intel.com/en-us/node/525350
        سبک کد نویسی در شرکت مایکروسافت: https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx
        سبک کد نویسی به زبان C در کرنل لینوکس: https://www.kernel.org/doc/Documentation/CodingStyle
        برای embedded کار ها بهترین داکیومنتی که تاحالا من دیدم از شرکت TI هست: http://processors.wiki.ti.com/index....ng_Conventions
        البته هیچ لزومی هم نیست که یکی از اینها رو انتخاب کنین. برای مثال اگر به coding style که برای FreeRTOS نگاه کنین میبینین که سبک کد نویسی خودشون رو دارن: http://www.freertos.org/FreeRTOS-Cod...yle-Guide.html

        یک موضوع مهم دیگه ایی هم که به نظرم به همین اندازه (شاید هم بیشتر) مهم هست مستند سازی و متد های کنترل نسخه?? (version control)هست. مثلا اگر ۱۰۰ خط برنامه نوشتین ولی کلا هیچ comment توی کدتون ننوشتین یا اینکه براش document ننوشتین میشه گفت کدتون فقط به درد خودتون میخوره! شاید به درد خودتون هم نخوره! مثلا بعد از یکسال اگر بخواهید دوباره از کدتون استفاده کنید باید کلی وقت و انرژی بزارین که کلا چی نوشتین! موضوع دیگه هم کنترل نسخه کد هست که خوشبختانه توی همین سات دموردش بحث شده. کنترل نسخه بهتون این قابلیت رو میده که بتونین ورژن های مختلف کدتون رو با بهترین نظم ممکن نگه دارین.علاوه براون اجازه میده که چند نفر (یا گروه) همزمان روی یک کد کار کنن.

        دیدگاه


          #5
          پاسخ : طریقه نوشتن برنامه های حجیم در زبان C

          مرسی دوستان واقعا عالی بود .

          من بعضی موقع اصلا میمونم از کجا شروع کنم به نوشتن کد باید کلی فکر کنم بعد شروع کنم تا چند روز هم همون کد رو بهینه میکنم کلا زمان بره شاید چون اولشه

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

          با سپاس
          I'm going to
          RWTH Aachen
          University

          دیدگاه


            #6
            پاسخ : طریقه نوشتن برنامه های حجیم در زبان C

            سلام
            بله از اونجایی که منابع ما در مورد میکروکنترلرها محدود هست بهتره که همیشه طوری برنامه بنویسید که پردازش الکی به cpu وارد نشه.
            مثلا یک مورد اینه که داخل روتین وقفه ها برنامه های طولانی قرار ندید...در صورتی که مجبور به اینکار هستید بهتره که داخل روتین وقفه یه متغیر رو ست کنید و در داخل حلقه اصلی اون متغیر رو چک کنید تا اگر ست شده بود پردازش هاتون رو انجام بده.در واقع دارید با اینکار یک پرچم (flag) طراحی کردید و بر اساس اون فلگ پردازش هاتون رو انجام میدید
            مثلا:
            فرض کنید یه دستگاه بسیار حساس دارید و قراره که در بازه های زمانی خاصی پردازش هایی روی LCD انجام بشه...و اینکار رو با تایمر انجام میدید.خب حالا تصور کنید که تمام توابع و دستورات مربوط به lcd رو داخل روتین سرریز تایمر قرار دادید...از طرفی ممکنه توسط اوپراتور خطایی صورت بگیره و اگر دستگاه به موقع خاموش نشه موجبات یک انفجار رو فراهم کنه...پس حتما یک سوئیچ STOP هم به یکی از وقفه های خارجی (External Interrupt) متصل شده تا به محض فشرده شدن سریعا وارد روتین وقفه خارجی بشه و دستگاه رو خاموش کنه...
            نکته اصلی اینجاست:اگر همزمان با انجام پردازش های مربوط به LCD واسه دستگاه اتفاقی بیفته و اوپراتور سوئیچ STOP رو بزنه چی میشه؟اوپراتور میخاد که تا جایی ک ممکن هست سریعا دستگاه خاموش بشه ولی چون که میکروکنترلر در حال سرویس دادن به LCD هست وقفه خارجی رو ندید میگیره( میتونه داخل روتین وقفه تایمر دوباره وقفه فعال بشه ولی تا جایی ک امکانش هست نباید این کار رو کرد) و در نتیجه نتایج نامعلومی به بار میاد...ولی اگر داخل روتین سرریز تایمر یه فلگ ست بشه و سریعا از روتین خارج بشه دیگه این اتفاق نمیفته...

            مورد بعدی این هست که داخل توابعتون از delay های طولانی استغاده نکنید و سعی کنید این کار رو هم با همون فلگ انجام بدید...

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

            www.intelart.ir


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

            دیدگاه

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