اطلاعیه

Collapse
No announcement yet.

یک نکته آموزشی برای تمام دوستان

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

    #16
    پاسخ : یک نکته آموزشی برای تمام دوستان

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

    ----
    برخی دوستان نظر شخصی دادن برخی از دوستان هم نظر کارشناسی.
    منم جمع بندی رو انجام میدم.

    1- توصیه میشه الگوریتم نویسی قوی باشه چون اگه الگوریتم نویسی قوی باشه یادیگیری syntax های مختلف مشکل نخواهد بود.

    2- هر زبانی نقاط قوت و ضعفی داره، تعداد زبان ها هم به این خاطر هست که هر کسی با یکی از اونها راحتر هست و اون رو بهتر میفهمه خیلی نمیشه روی بهتر و بد تر بودن یک زبان بحث کرد.

    3- برای میکرو کنترلر ها به صورت کلی چون زبان C یک زبان سطح میانی هست(بیسیک یه زبان سطح بالا) بهتره که از اول با C کار بشه ولی اگه کسی به بیسیک تسلط داره هم بدون مشکل میتونه کارش رو راه بندازه
    ---
    "روباه" جان ممنون که این بحث رو باز کردید. راهنمایی خوبی هست برای دوستانی که میخوان شروع کنن چون نظرات متنوع و مختلف درش هست.
    اگه دوستان با این نتیجه گیری موافقن عنوان پست رو عوض کنیم و به عنوان نتیجه قطعی در قسمت AVRآ‌ بذاریم.
    موفق باشید.
    شأن انسان در ایمان و هجرت و جهاد است و هجرت، مقدمهآ‌ی جهاد فیآ‌سبیلآ‌الله.
    هجرت، هجرت از سنگینیآ‌هاست و جاذبهآ‌هایی که تو را به خاک میآ‌چسباند.
    چکمهآ‌هایت را بپوش، رهآ‌توشهآ‌ات را بردار و هجرت کن.

    دیدگاه


      #17
      پاسخ : یک نکته آموزشی برای تمام دوستان

      نوشته اصلی توسط روباه
      باز دوباره رفتیم تو مثال های نقض که من قبلا خیلی در موردش گفتم
      اصلا همه اینا هیچ بهتر نیست به یک زبان واحد تو همین انجمن رسید؟؟؟؟؟؟؟؟؟؟؟؟
      یا باز برای این هم یک مثال نقض وجود داره؟
      نوشته اصلی توسط KhepeleSibilo
      خوب از این به بعد زبان واحد انجمن bascom بشه !
      این مثال نقضش بود!آ‌نه اینکه دنباله آمار باشم!

      نوشته اصلی توسط shockley


      http://www.atmel.com/dyn/resources/prod_documents/COMPILER.pdf
      shockley جان،برداشتم از پستهات اینه که یا با چیزی کار نمی کنی،یا سعی می کنی همه چیز رو راجع بهش پیدا کنی! این خیلی خوبه :smile: مثلا از پستهات راجع به ارتباطات سریال خوشم میاد

      نوشته اصلی توسط rezamansouri
      1- یک برنامه ساده mmc که من با c نوشته بودم و دوستم با basic با هم مقایسه کردیم و حجم برنامه من تقریبا نصف بود (حجم فایل هگز) .
      2- برای C و بخصوص gcc مثال و پروژه آماده خیلی خیلی بیشتر از basic هست .
      3- کتابخانه های c مانند avrlib بصورت کامپایل نشده هستند و میشه بصورت دلخواه تغییرشون داد که همین امر باعث میشه حجم برنامه کامپایل شده کمتر بشه و همچنین تخصصی تر بشه .
      4- دنبال کردن برنامه های طولانی و دیباگ کردن C خیلی راحتتره (اینو اوناییکه با هردو کار میکنند میگن)
      کد موجود توو بیسکام برای mmcشامل همه دستوراته،اینکه با همین حجم،اکثر کارهای موجود با حافظه از دایرکتور گیری تا کار با fat16 و ... رو میشه انجام داد!آ‌ اما شما می تونین خط به خط،همون دستورات c رو به بیسیک تبدیل کنین و ببنین که حجم کامپایل اینها یکی میشه.بیسیک همه کتابخونه ها رو به کد اضافه کنه ( همون موضوع optimize که گفتم ) در ضمن،حجم فایل .hex مهم نیست! حجم کد مهمه،اول خطهای یک فایل hex آدرس شروع دیتاهای اون خط رو می نویسه،بعضی وقتها بخضی از حافظه استفاده نمیشه،توو بعضی کامپایلر ها به جای همه اون بایتها FFآ‌ رو می زارن، توو بعضی آدرس خط بعدی رو تا جایی که اینها تموم شه می پرونن،این ظاهر حجم 2 تا فایل رو کم و زیاد میکنه،میزان حافظه اشغال شده که کامپایلر اعلام میکنه ملاکه
      بازم میگم،اینکه بیسیک open source نداریم اما به خاطر لینوکس،و نیازش به همه کامپایلر ها،منجمله کامپایلر میکرو، یکی از کامپایلر های open source رو گسترش دادن و به خاطر open source بودنش پیشرفت خوبی داشته! یعنی هر کسی تونسته نیازش رو وارد کنه دلیل بهتر بودن این زبان نیست! بلکه دلیل بهتر بودن این کامپایلر،نسبت به اونیکی کامپایرلره!آ‌ و این یعنی یک شرکت نصبت به اون یکی شرکت بهتر کار کرده! بحث بهتر بودن برنامه شرکتی،جدای از بهتر بودن زبانهاست!

      نوشته اصلی توسط رضا حاجی زاده

      اقای KhepeleSibilo
      یه نکته ای که توی حرفاشون بود و کسی دقت نکرد این بود که مهم نیست با چه زبانی کار بکنی مهم اینه که برنامه نویسی بکنی یعنی اگه یکی بتونه الگوریتم کارشو مشخص بکنه دیگه براش اهمیت نداره که با چی چیکار می کنه
      البته هدفم از حرفهای اولین پستم فهموندن همین بود،اما بد گفتم و متوجه این موضوع شدن از اونها سخته،من این حرف رو توو تنها ملاقات حضوریم با رضا کامل بهش توضیح دادم که وقتی پرسید چه زبان برنامه نویسی یاد بگیرم،گفتم مهمه اینه که برنامه نویسی یاد بگیری!
      اگه شما اسم،فعل،حرف و ... بلد باشین، دیگه برای زبان بعدی چند تا کلمه از یه دیکشنری حفظ می کنین و اینکه توو این یکی زبان،جای این کلمات به چه ترتیبه! پس جای اینکه انگلیسی خوب یاد بگیرم!آ‌بهتره قواعد رو یاد بگیرم!آ‌ حالا این قواعد رو در کنار آسونترین زبان یاد بگیرم! مثلا میشه قواعد رو در کنار یادگیریه زبانه چینی هم یاد گرفت!آ‌ اما خوب ...
      پس بهرته برنامه نویسی یاد بگیرم و برای یاد گیریه اون،کنارش یه زبان ساده مثل بیسیک رو یاد بگیرم! وقتی جای استفاده از حلقه ها رو توو برنامه فهمیدیم بریم ساختار دستورات c رو هم بخونم و یاد بگیریم که مثلا جای :
      for i= 1 to 10
      باید بنویسم :
      for(i=1;i<=10;i++)
      همین!
      انقدر این بحث رو با این و اون کردم که دیگه از گفتنش حالم به هم می خوره!

      بازم میگم،هر کدوم ماله یه کاره! حوصله شرح کامل دادن ندارم،اما همینقدر بگم که بین :
      config portc=output
      10:
      porta=0
      wait 1
      porta=255
      wait 1
      goto 10
      یا معادلش توو c خیلی فرقها هست! من هنوزم 70% پروژه هامو با بیسیک تحویل میدم! 20 درصد C بقیه رو هم هر زبانی که آسون پیدا کنم!
      من اگه بخوام با lcd گرافیکی کار کنم،بیسکام و fastavrآ‌رو کنار نمی زارم برم یه c. ناقص پیدا کنم و ....

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


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


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

      ... در تعاملات از طریق متن ...
      یاد یکی از تعاملاتم ،چند هفته پیش ، از طریق تصویر !!!!!آ‌افتادم :icon_razz: الان پایه کامپیوتر از خنده غش رفتم!!!!!

      دیدگاه


        #18
        پاسخ : یک نکته آموزشی برای تمام دوستان

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

        من خودمم همچین حسی نسبت به مقایسه ی سی و بیسیک دارم

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

        نظر شما چیه چه کتابی رو به من معرفی میکنید که اصول برنامه نویسی با سی رو یاد بگیرم و بعد از اون هم واسه میکرو شوع کنم :nerd:

        اما میشه یه کار دیگه هم کرد و کسایی که سی کار می کنن همت کنن و اصول اولیه ی سی رو توی همین تاپیک آموزش بدن :redface:

        دوست عزیز سلام
        به نظر من شما می تونین از کتاب "برنامه نویسی در C نوشته مهندس جعفر نژاد قمی" استفاده کنین. درست که این یه کتاب مرجع هست ولی گفتارش هم بد نیست و به نظر من یکی از بهترین کتابهاست . البته من خودم هم تازه شروع کردم ولی بنا به گفته پیشکسوتان :biggrin: این یه کتاب خوبیه که می تونین ازش استفاده کنین. فکر کنم هر چه زودتر تهیه کنین به نفعتون هست چون تو هر نوبت چاپ حدودا 2000 تومن قیمتش میره بالا . من خودم آخرین نوبت چاپ رو گرفتم ( مهر 1386) قیمتش هم 8000 تومن بود.

        دیدگاه


          #19
          پاسخ : یک نکته آموزشی برای تمام دوستان

          سلام،

          KhepeleSibilo جان ممنون از لطفت.
          در مورد توضیحاتتون راجع به Syntax یه مسئله ای که وجود داره اینه که اختلافات تنها محدود به ظاهر دستورات نمیشه، اساسا برخی از امکانات زبان C در BASIC وجود نداره. یه مثال بگم خدمتتون: من AVR رو با اسمبلی شروع کردم، بعد هم اولین زبان سطح بالایی که کار کردم همین BASCOM بود. یک پروژه ی تابلو روان 8x56 رو با BASCOM نوشتم خیلی عالی کار کرد اما تابلوی بعدی 16x64 بود که اول با بیسیک نوشتم نور LED ها خیلی کم شده بود. علت اش رو که بررسی کردم متوجه شدم که اشکال از تابع شیفت و محاسباتی است که در اونجا انجام میشه، همون برنامه رو با C نوشتم و تابع شیفت رو با Pointer بهینه کردم، نه تنها مشکل نور حل شد، بلکه بعدا تعداد ستون های تابلو رو کمی زیاد کردم و باز مشکلی وجود نداشت.

          عدم وجود اشاره گر در زبان بیسیک یکی از ضعف های مهم این زبانه. اگرچه سازنده های کامپایلر BASCOM این مسئله رو می دونند و با ایجاد متغیر Overlay سعی کردند تا حدودی این مشکل رو حل کنند، اما باز هم متغیر Overlay ده درصد توانایی های Pointer رو نداره.

          موارد دیگری هم به عنوان ضعف های اساسی در زبان BASIC وجود داره، مثلا عدم وجود Structure و Bit Field، فقدان داده ی Stream، عدم وجود توابع Format رشته ها، عدم وجود Union، سرعت کمتر String Manipulation و برخی موارد دیگه که الان خاطرم نیست.

          یک مشکل دیگه اینه که کتابخانه های زبان C اکثرا، Open Source هستند و این امکان وجود داره که عملکرد رو در موقع نیاز تغییر بدید، در حالیکه در BASCOM کتابخانه ها با فرمت LBX کامپایل شده اند.

          یک ضعف عمده ی دیگر BASCOM مشکلاتی هست که در ترکیب BASIC با اسمبلی بوجود میاد، شکی نیست که مواردی وجود داره که باید اسمبلی نوشته بشه، من تجربه این رو داشتم که وجود کد Assembly در برخی موارد عملکرد کامپایلر BASCOM رو مختل میکنه، در حالیکه در کامپایلرهای C کمتر این مشکل وجود داره.

          این مواردی رو که گفتم دال بر این نیست که کلا کامپایلر BASCOM کنار گذاشته بشه، چون مواردی هست که وجود یک کتابخانه در این کامپایلر به انجام کار سرعت میده، مواردی بوده که من یک AVR رو که برنامه اش با بیسیک نوشته شده در کنار یک AVR که کدش C هست قرار دادم. اگرچه این کار در تولید توجیه نداره وصحیح نیست اما مواردی هست که کار تکه و زمان بیشتر از هزینه ارزش داره.
          اگرچه این امکان وجود داره که دو برنامه ی کاملا مستقل BASIC و C رو در یک IC پروگرام کنید!! (به نظرتون چطوری؟!) :job:
          There is nothing so practical as a good theory. — Kurt Lewin, 1951

          دیدگاه


            #20
            پاسخ : یک نکته آموزشی برای تمام دوستان

            من نمی دونم بد توضیح می دم!آ‌یا اینکه از بس پای این کامپیوتره ... نشستم کلا حرف زدن یادم رفته!
            من هیچ جای بحثهام تا الان،نگفتم بیسیک از سی بهتره... سی از بیسیک بهتره ... بیسیک خوبه،بده ... سی خوبه، بده ... یا ...
            من هیچ شکی در شی گرا بودن سی که مستلزم داشتن Structure ،Union و خیلی جیزهای دیگست ندارم!
            من هیچ وقت نمی گم بیسیک از سی بهتره ...!!!!آ‌ :eek: که الان ...
            و ...

            بحث من اینه که به مفهومه واقعی،pointer توو میکرو اون عملکرد رو نداره!آ‌فضای حافظه میکرو مشخصه! آدرس شروع اون مشخصه،چی کجاست مشخصه،مثل PCآ‌نیست که وقتی برنامه load شد،از هر جای حافظه که خالی هست برای آدرس شروع در نظر گرفته شه و....
            بحث من اینه که سخت افزار میکرو اونقدر پیچیده نیست که تووی اون،struct و... مفهوم پیدا کنه!(هر چند به فهم برنامه کمک میکنه)
            بحث من اینه که در نهایت شاید ساختار کمی ناقص بیسیک پیشه سی کم بیاره اما دیگه این ضعف ها در میکرو مفهوم پیدا نمی کنه!

            من توی این بحث،هنوزم اکثرا دارم نمایش نقاط ضعف کامپایلری به اسم بیسیکام رو میبینم!آ‌ دقیقا توو این تاپیک داره کامپایلر بیسکام با کلیه زبانهای سی موجود مقایسه میشه !آ‌شاید بگین خوب کامپایلر بیسیک AVR فقط بیسکامه اما fastavr ، mikroe و ....
            بگزریم ...

            بحث اصلیه من اینه که درسته که برای سی ها توابع موجوده!آ‌اما برای یک کاربر که می خواد کارشو شروع کنه،توابع لازم همون lcd و AD و چند تا سنسور دما و فوقش استفاده از چند خواصیت ارتباطات هست!!!آ‌ که همه توو خوده بیسکام وجود داره!آ‌ اما کسی که به جایی رسیده که نیاز به کار بالاتر داره،هم می تونه راحت توابعش رو خودش بنویسه اما اونقدر جا افتاده که ...

            من توو mcs51 یه بار برنامه fft نوشتم،شکی نیست هر کاری کردم ساختار bascom8051 نزاشت بتونم این رو به این زبان درست و حسابی بنویسم!!آ‌اما :
            اول با فرانکلین نوشتم،حجم کدم 8.5 کیلو شد و زمان اجرا بالای دقیقه بود، همین رو با keil نوشتم،حجم اومد زیر 8192 طوریکه از اینکه تونستم با 89c52 راهش بندازم خوشحال بودم و زمان اجرا به حدود 11 ثانیه رسید!
            پس اینجا چی باید بگیم ؟ سی از سی قویتره!!!آ‌نه!آ‌ این کامپایلر از اون یکی کامپایلر بهتره! همین ...


            حالا یکی میاد زبان یاد بگیره!آ‌بحث من اینه که جای اینکه بشینی و یاد بگیری تهه هر خطی ; آ‌بزاری!!آ‌اگه نزاشتی خط بعدی رو error میگیره! تا بیای یاد بگیری که کلی اولش include کنی بعد با main شروع کنی،خیلی چیزا رو .... به جای اینها اول یاد بگیره برنامه بنویسه خیلی بهتره!آ‌برنامت متغیر می خواد! تعریفش اینطور سادست! بعد یک سری عملیات می خواد که فقط همون ها رو می نویسه! بعد اگه خواست بهتر یاد بگیره و رفت یه پروژه حاضری رو مطالعه کرد،کلا 10 خط برنامه ببینه که شامل اصل برنامست!آ‌نه اینکه اول 70 خط جنبی تعاریف مربوطه رو رد کنه بعد تازه برسه جایی که آخر سرم نفهمه اصل کد کجاست!!!! من بحثم این بود که برای شروع با بیسیک یاد بگیره که در حقیقت برنامه نویسی یاد بگیره بعدم بله،زبان سی می تونه بعضی جاها بهتر عمل کنه ( هر چند بازم می گم میکرو اونقدر محدوده که تووش جدا فرقی نداره )آ‌پس اونم یاد بگیره که دیگه با این مراحل ....

            فراموش نکنین شما توو بیسکام
            $include
            دارین اینکه کسی نمیاد کتابخونه هاش به این زبان رو پخش کنه ایراد بیسکام نیست!
            Format دارین
            ...

            pinter ها توو میکرو بسته به جاش،اونقدر راه حل داره که ..
            من توو mcs51 هم با بیسکام تابلو روان نساختم!آ‌ ترجیحابالای 8*64 led رو با یک میکرو درایو نکنین!!آ‌ بیشتر از اون رو بلوک بلوک بسازین کار تمیز تر میشه .. اگر برنامه تابلو بیسکامتون رو بزارین سعی می کنم (کمی سرم شلوغه ، اگه برسم) نشون بدم با بیسکام هم همون سرعت میاد و ...

            مشکلات بیسکام با اسمبلی مشکل بیسکامه نه بیسیک! ( که من خدارو شکرمیکنم تا الان مشکل چندانی توو این ضمینه نداشتم)آ‌ lbx کمی کامپایل شدست! کتابخونه ها رو می تونین با فرمت bas. بنوسین و include کنین!!! نبودنشون مشکل بیسکامه نه بیسیک!

            از همه این حرفها بگزریم (چون سوال و جوابهای زیادی شده نصف جوابهایی که می خواستم بدم یادم رفتهآ‌(ببخشید اما دلیلش اینه که توجیح کردن دیگران برام زیاد ... ) جواب بدم) اگه بازم کسی بیاد که بخواد سعی کنه ثابت کنه سی از بیسیک بهتره دیگه تعجب میکنم!!!!! چون فکر نکنم تا الان من راجع به این موضوع حرفی زده باشم ...
            امیدوارم این دفعه منظورم رو رسونده باشم! اگه رسوندم که موفق شدم!آ‌اگه نرسوندم هر قدر دیگه هم حرف بزنم بازم نمی تونم!آ‌

            دیدگاه


              #21
              پاسخ : یک نکته آموزشی برای تمام دوستان

              سلام خدمت دوستان

              به نظر من اگر قراره مقایسه ای صورت بگیره باید تو موقعیت خاص قیاس بشه ، سی و بیسیک هر کدوم یه خصوصیات مثبت دارند مثلاً سی کد سریعتری ایجاد می کنه و مزیت بیسک بالا بودن سرعت برنامه نویسیه ، حالا اگر تو یه پروژه ای سرعت اجرا مهمه پس اینجا سی مناسبتره ولی اگر سرعت اجرا مهم نیست و برای نوشتن اون برنامه میشه تو بیسیک نصف سی زمان گذاشت ، اینجا بیسیک ارجح است

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

              دیدگاه


                #22
                پاسخ : یک نکته آموزشی برای تمام دوستان

                من هیچ شکی در شی گرا بودن سی که مستلزم داشتن Structure ،Union و خیلی جیزهای دیگست ندارم!
                شی گرا بودن یک زبان ارتباطی به Union و Struct نداره و زبان باید از Class پشتیبانی کنه، بنابراین زبان هایی نظیر ANCI C، BASIC، Visual Basic، Pascal و امثالهم اساسا شی گرا نیستد و زبان های شی گرای معروف C++، C#، Java و ... می باشند. بنابراین C مورد بحث ما شی گرا نیست و این مسئله هیچ رتباطی با بحث فعلی ندارد.

                بحث من اینه که به مفهومه واقعی،pointer توو میکرو اون عملکرد رو نداره!آ‌فضای حافظه میکرو مشخصه! آدرس شروع اون مشخصه،چی کجاست مشخصه،مثل PCآ‌نیست که وقتی برنامه load شد،از هر جای حافظه که خالی هست برای آدرس شروع در نظر گرفته شه و....
                کاربرد Pointer فقط در تخصیص حافظه ی پویا نیست. شما تنها به یکی از چندین کاربرد اشاره گرها اشاره کردید. پس بحث رشته ها، ساختارها، توابع، آرایه ها و ارتباط اون ها با Pointer چی میشه؟ در مورد خود مدیریت حافظه هم که اشاره کردید با توجه به حافظه ی محدود میکروکنترلر، مدیریت بهینه ی اون اهمیت بیشتری داره و نقش Pointer ها در میکروکنترلر پررنگ تر است.


                بحث من اینه که سخت افزار میکرو اونقدر پیچیده نیست که تووی اون،struct و... مفهوم پیدا کنه!(هر چند به فهم برنامه کمک میکنه)
                بحث من اینه که در نهایت شاید ساختار کمی ناقص بیسیک پیشه سی کم بیاره اما دیگه این ضعف ها در میکرو مفهوم پیدا نمی کنه!
                با اینکه به نظر میاد شما در این زمینه با تجربه هستید اما نمی دونم چرا اصرار دارید که برنامه هایی که برای یک میکروکنترلر نوشته میشه ساده است و زبان در اون زیاد اهمیتی نداره. یه نکته ای رو که خوب بود من در پست قبلی بهش اشاره میکردم وجود چندین RTOS تجاری به زبان C برای AVR هست. یعنی انقدر Embedded System های مبتنی بر میکروکنترلر پیشرفت کردن که سیستم عامل هایی برای اونها نوشته شده که مثل ویندوز میشه برای اونها Multithread برنامه نوشت. کافیه اینجا رو کمی مطالعه کنید: http://www.micrium.com/atmel/ATmega.html

                من توی این بحث،هنوزم اکثرا دارم نمایش نقاط ضعف کامپایلری به اسم بیسیکام رو میبینم!آ‌ دقیقا توو این تاپیک داره کامپایلر بیسکام با کلیه زبانهای سی موجود مقایسه میشه !آ‌شاید بگین خوب کامپایلر بیسیک AVR فقط بیسکامه اما fastavr ، mikroe و .... بگزریم ...
                اتفاقا BASCOM بهترین کامپایلر بیسیک برای AVR است. من با MikroBasic هم کار کردم که اگر بخوام به ضعف های اون اشاره کنم بحث منحرف میشه. FastAVR که انقدر وضعیت خرابه که مدت هاست خود شرکت اش این کامپایلر رو هیچ توسعه ای نداده! (FastAVR با ویژوال بیسیکی نوشته شده که عملگرهای بیتی نداره!!)

                بحث اصلیه من اینه که درسته که برای سی ها توابع موجوده!آ‌اما برای یک کاربر که می خواد کارشو شروع کنه،توابع لازم همون lcd و AD و چند تا سنسور دما و فوقش استفاده از چند خواصیت ارتباطات هست!!!آ‌ که همه توو خوده بیسکام وجود داره!آ‌ اما کسی که به جایی رسیده که نیاز به کار بالاتر داره،هم می تونه راحت توابعش رو خودش بنویسه اما اونقدر جا افتاده که ...
                مگه هر کسی که کار با میکرو رو شروع میکنه تا آخر می خواد با LCD و چند تا سنسور کار کنه؟ یک روز کاری پیش میاد که به دلایل محدودیت های فراوان مجبور میشه به C مهاجرت کنه و این یعنی اتلاف زمان و هزینه.

                من توو mcs51 یه بار برنامه fft نوشتم،شکی نیست هر کاری کردم ساختار bascom8051 نزاشت بتونم این رو به این زبان درست و حسابی بنویسم!!آ‌اما :
                اول با فرانکلین نوشتم،حجم کدم 8.5 کیلو شد و زمان اجرا بالای دقیقه بود، همین رو با keil نوشتم،حجم اومد زیر 8192 طوریکه از اینکه تونستم با 89c52 راهش بندازم خوشحال بودم و زمان اجرا به حدود 11 ثانیه رسید!پس اینجا چی باید بگیم ؟ سی از سی قویتره!!!آ‌نه!آ‌ این کامپایلر از اون یکی کامپایلر بهتره!
                همین ...
                بحث Franklin و Keil یک بحث مفصله، بعضی از کامپایلرها انقدر سوییچ کامپایل دارند که عدم اطلاع از اون باعث پایین اومدن سرعت اجرا میشه، خود من یک بار این مشکل رو با GCC داشتم، تو AVRFreaks پرسیدم، راهنمایی شدم و مشکلم حل شد. FFT هم چون محاسبات زیادی داره احتمالا Franklin برخی از محاسبات رو تو Runtime انجام میداده و Keil اون رو به صورت خودکار در زمان Compile، Optimize می کرده، من مطمئنم که همون برنامه ی شما اگر صحیح کامپایل بشه به سرعتی در حد Keil خواهد رسید.

                حالا یکی میاد زبان یاد بگیره!آ‌بحث من اینه که جای اینکه بشینی و یاد بگیری تهه هر خطی ; آ‌بزاری!!آ‌اگه نزاشتی خط بعدی رو error میگیره! تا بیای یاد بگیری که کلی اولش include کنی بعد با main شروع کنی،خیلی چیزا رو .... به جای اینها اول یاد بگیره برنامه بنویسه خیلی بهتره!آ‌برنامت متغیر می خواد! تعریفش اینطور سادست! بعد یک سری عملیات می خواد که فقط همون ها رو می نویسه! بعد اگه خواست بهتر یاد بگیره و رفت یه پروژه حاضری رو مطالعه کرد،کلا 10 خط برنامه ببینه که شامل اصل برنامست!آ‌نه اینکه اول 70 خط جنبی تعاریف مربوطه رو رد کنه بعد تازه برسه جایی که آخر سرم نفهمه اصل
                کد کجاست!!!! من بحثم این بود که برای شروع با بیسیک یاد بگیره که در حقیقت برنامه نویسی یاد بگیره بعدم بله،زبان سی می تونه بعضی جاها بهتر عمل کنه ( هر چند بازم می گم میکرو اونقدر محدوده که تووش جدا فرقی نداره )آ‌پس اونم یاد بگیره که دیگه با این مراحل ....
                قبلا پاسخ دادم.

                فراموش نکنین شما توو بیسکام $include دارین اینکه کسی نمیاد کتابخونه هاش به این زبان رو پخش کنه ایراد بیسکام نیست!
                Format دارین
                چرا اشکال BASCOM نیست؟ وقتی خود شرکت سازنده ساختاری رو ایجاد میکنه که کتابخانه Compile شده منتشر بشه، مقصر نیست؟ اصلا دیگران رو هم بگذاریم کنار، اگر من بخوام سورس کتابخونه های خود کامپایلر رو داشته باشم چکار باید بکنم؟ می دونید که گاهی از سورس کتابخانه در Debug کردن برنامه بسیار موثره.

                khepelesibiloo جان، من فکر می کنم، یا زبان مشترک مناسبی نداریم یا کلا طبیعت این بحث ها بی سرانجامه، هدف من از مواردی که گفتن دامن زدن به بحث بچه گانه ی C بهتره یا بیسیک نبود و فقط عینا تجربیاتی رو که داشتم گفتم، تا دوستان عزیزی که تازه می خواهند شروع کنند بعد از یک مدت مجبور به دوباره کاری نشن. قطعا صحبت های من مغرضانه هم نیست چون شاید بیشتر از هر کس دیگری به کامپایلر BASCOM مسلط هستم و اون رو خوب می شناسم و وضعیتی نیست که چون C بلدم بخوام از اون دفاع کنم. با اینحال برای آخرین بار در این مورد پست می فرستم و هیچ علاقه ای به ادامه دادن
                بحث در این زمینه ندارم. :smile:

                There is nothing so practical as a good theory. — Kurt Lewin, 1951

                دیدگاه


                  #23
                  پاسخ : یک نکته آموزشی برای تمام دوستان

                  نوشته اصلی توسط shockley
                  من هیچ شکی در شی گرا بودن سی که مستلزم داشتن Structure ،Union و خیلی جیزهای دیگست ندارم!
                  شی گرا بودن یک زبان ارتباطی به Union و Struct نداره و زبان باید از Class پشتیبانی کنه، بنابراین زبان هایی نظیر ANCI C، BASIC، Visual Basic، Pascal و امثالهم اساسا شی گرا نیستد و زبان های شی گرای معروف C++، C#، Java و ... می باشند. بنابراین C مورد بحث ما شی گرا نیست و این مسئله هیچ رتباطی با بحث فعلی ندارد.
                  من نمی دونم کجا گفتم زبانی که Structure ،Union داره شی گراست!آ‌گفتم زبان اگه بخواد شی گرا باشه با داشتن اینها شروع میشه .تعدادی از اون زبانهای غیر شی گرا که اسم بردین رو اکثرا شبه شی گرا میگن و بحث اینجا از این موضوع خارجه،خدا رو شکر روو یه چیز تفاهم داریم!


                  نوشته اصلی توسط shockley
                  بحث من اینه که به مفهومه واقعی،pointer توو میکرو اون عملکرد رو نداره!آ‌فضای حافظه میکرو مشخصه! آدرس شروع اون مشخصه،چی کجاست مشخصه،مثل PCآ‌نیست که وقتی برنامه load شد،از هر جای حافظه که خالی هست برای آدرس شروع در نظر گرفته شه و....
                  کاربرد Pointer فقط در تخصیص حافظه ی پویا نیست. شما تنها به یکی از چندین کاربرد اشاره گرها اشاره کردید. پس بحث رشته ها، ساختارها، توابع، آرایه ها و ارتباط اون ها با Pointer چی میشه؟ در مورد خود مدیریت حافظه هم که اشاره کردید با توجه به حافظه ی محدود میکروکنترلر، مدیریت بهینه ی اون اهمیت بیشتری داره و نقش Pointer ها در میکروکنترلر پررنگ تر است.
                  همونطور که گفتید فقط یکی از کاربردهاست! من فقط یکیش رو مثال زدم!آ‌ بحث اینجا مربوط به این نیست و قرار نیست بشینیم همه چیز رو واو به واو توضیح بدیم! فراموش نکنید این اشاره به انواع موارد که قرار هست بهینه باشه، در نهایت به دستورات اسمبلی میکرو تبدیل میشه،شما اونجا کدوم دستورات رو سراغ دارین که اینها به اون شکل استفاده شدنش فرق کنه ؟ در نهایت موضوع درک بهتر برنامه نویس می مونه.هر چند که ظاهرا من هنوزم نتونستم حرف خودم رو اون طور که بقیه متوجه بشن بزنم!

                  نوشته اصلی توسط shockley

                  بحث من اینه که سخت افزار میکرو اونقدر پیچیده نیست که تووی اون،struct و... مفهوم پیدا کنه!(هر چند به فهم برنامه کمک میکنه)
                  بحث من اینه که در نهایت شاید ساختار کمی ناقص بیسیک پیشه سی کم بیاره اما دیگه این ضعف ها در میکرو مفهوم پیدا نمی کنه!
                  با اینکه به نظر میاد شما در این زمینه با تجربه هستید اما نمی دونم چرا اصرار دارید که برنامه هایی که برای یک میکروکنترلر نوشته میشه ساده است و زبان در اون زیاد اهمیتی نداره. یه نکته ای رو که خوب بود من در پست قبلی بهش اشاره میکردم وجود چندین RTOS تجاری به زبان C برای AVR هست. یعنی انقدر Embedded System های مبتنی بر میکروکنترلر پیشرفت کردن که سیستم عامل هایی برای اونها نوشته شده که مثل ویندوز میشه برای اونها Multithread برنامه نوشت. کافیه اینجا رو کمی مطالعه کنید: http://www.micrium.com/atmel/ATmega.html
                  شما عنوان تاپیک رو خوندین ؟ (عنوان اولی ) روی بحث اینجا کسی که می خواد برنامش پلو هوا کنه نیست!آ‌در ثانی، منم در عجبم که شما اصرار دارین توو AVR میشه موشک ساخت،برنامه که کار های زیاد کنه با اون برنامه پیچیده که ... (برج ایفل و دیوار چین کارهای بزرگن، اما برج ایفل پیچیدست هر جوری نمیشه آهن ها رو گزاشت اما دیواره چین فقط عمله می خواد !آ‌ آجر بچینه :icon_razz: )آ‌ بگزریم !آ‌ بحث راجع به این رو بعدا سر جاش خواهیم گفت! نه شما حالشو دارین،نه من ...
                  باور کنین تجربه من فقط به نظر میاد!آ‌ من تعداد کارهام توو همه ضمینه های مختلف عملا کمه(امیدوارم فکر نکنین می خوام جواب نقض بدم یا ... جدی می گم، بعضی وقتها میان سوال بپرسن می گن دکتری یا از هوا اومدی!! (آخریشو پریشب بهازین بهم گفت دکتری!!؟آ‌) آ‌اونقدر خندم می گیره ... شاید این به نظر اومدنها ماله ناشناس بودنه! ... کاشکه نمی خواستم ناشناس باشم و توو اون تاپیک معرفی اعضا، خودمو معرفی می کردم به بی سوادیم خندتون می گرفت!آ‌من حتی یک مدرک درست و حسابی هم ندارم)
                  نوشته اصلی توسط shockley
                  من توی این بحث،هنوزم اکثرا دارم نمایش نقاط ضعف کامپایلری به اسم بیسیکام رو میبینم!آ‌ دقیقا توو این تاپیک داره کامپایلر بیسکام با کلیه زبانهای سی موجود مقایسه میشه !آ‌شاید بگین خوب کامپایلر بیسیک AVR فقط بیسکامه اما fastavr ، mikroe و .... بگزریم ...
                  اتفاقا BASCOM بهترین کامپایلر بیسیک برای AVR است. من با MikroBasic هم کار کردم که اگر بخوام به ضعف های اون اشاره کنم بحث منحرف میشه. FastAVR که انقدر وضعیت خرابه که مدت هاست خود شرکت اش این کامپایلر رو هیچ توسعه ای نداده! (FastAVR با ویژوال بیسیکی نوشته شده که عملگرهای بیتی نداره!!)
                  هر کامپایلر،برای کاری،از اول این تاپیک تا الان همش همین رو گفتم!آ‌ اما اینکه میگم نمی تونم حرفی که منظورمه رو بفهمونم همینه!
                  در ضمن به نظرم اگه کرک mikroe درست باشه،از بیسکام بهتره، بیسکام با شبیه سازش،بیشتر جنبه آموزشی داره ....
                  البته مطمئنا چون کارا فرق می کنه ، نظر ها متفاوته ... (من لااقل کلمه به نظرم رو به کار بردم!آ‌)

                  نوشته اصلی توسط shockley
                  بحث اصلیه من اینه که درسته که برای سی ها توابع موجوده!آ‌اما برای یک کاربر که می خواد کارشو شروع کنه،توابع لازم همون lcd و AD و چند تا سنسور دما و فوقش استفاده از چند خواصیت ارتباطات هست!!!آ‌ که همه توو خوده بیسکام وجود داره!آ‌ اما کسی که به جایی رسیده که نیاز به کار بالاتر داره،هم می تونه راحت توابعش رو خودش بنویسه اما اونقدر جا افتاده که ...
                  مگه هر کسی که کار با میکرو رو شروع میکنه تا آخر می خواد با LCD و چند تا سنسور کار کنه؟ یک روز کاری پیش میاد که به دلایل محدودیت های فراوان مجبور میشه به C مهاجرت کنه و این یعنی اتلاف زمان و هزینه.
                  اون سه نقطه ( که اینجا فهمیدم نصف دلیل اینکه حرفهامو نمی تونم بفهمونم این گزاشتن 3 نقطه است)آ‌یعنی اونقدر جا افتاده که الان از همه زبانها استفاده می کند و فرق آنها می داند و از c هم استفاده می کند و سوای آن در خود بیسیک هم می تواند بدون آنکه از جایی توابع را بگیرد ،خودش از روی دیتا شیت تابع لازم برای خواندن و نوشتن روی وسیله مورد نظر را بنویسد!آ‌و حتی این نظر شخصیمه که کسی که برنامه نویسه خوبیه،به جای گرفتن تابع که زحمت فهمیدنه ورودی خروجیش بیشتره! خودش ... آ‌(اِ ، بازم 3 نقطه !!آ‌اما دیگه برام مهم نیست کسی چیزی که میگم رو متوجه شه )

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


                  نوشته اصلی توسط shockley
                  من توو mcs51 یه بار برنامه fft نوشتم،شکی نیست هر کاری کردم ساختار bascom8051 نزاشت بتونم این رو به این زبان درست و حسابی بنویسم!!آ‌اما :
                  اول با فرانکلین نوشتم،حجم کدم 8.5 کیلو شد و زمان اجرا بالای دقیقه بود، همین رو با keil نوشتم،حجم اومد زیر 8192 طوریکه از اینکه تونستم با 89c52 راهش بندازم خوشحال بودم و زمان اجرا به حدود 11 ثانیه رسید!پس اینجا چی باید بگیم ؟ سی از سی قویتره!!!آ‌نه!آ‌ این کامپایلر از اون یکی کامپایلر بهتره!
                  همین ...
                  بحث Franklin و Keil یک بحث مفصله، بعضی از کامپایلرها انقدر سوییچ کامپایل دارند که عدم اطلاع از اون باعث پایین اومدن سرعت اجرا میشه، خود من یک بار این مشکل رو با GCC داشتم، تو AVRFreaks پرسیدم، راهنمایی شدم و مشکلم حل شد. FFT هم چون محاسبات زیادی داره احتمالا Franklin برخی از محاسبات رو تو Runtime انجام میداده و Keil اون رو به صورت خودکار در زمان Compile، Optimize می کرده، من مطمئنم که همون برنامه ی شما اگر صحیح کامپایل بشه به سرعتی در حد Keil خواهد رسید.
                  پیاده هستماما دیگه اونقدرم شتر سوار نیستم مهندس ... آ‌ من برنامه fft رو می زارم شما کامپایل کنین، شما برنامه تابلو روان رو بزارین من کامپایل کنم :icon_razz: من زمانی اینها رو با دایال پ 32K از سایتهایی با سرعت 1 کیلو بایت در ثانیه گرفته بودم که بقیه از کل کامپایلر ها فقط اسمبلی تحت داس رو داشتن و تا الان دیگه اونقدر روشون کار کردم که ...بگزریم !

                  نوشته اصلی توسط shockley
                  فراموش نکنین شما توو بیسکام $include دارین اینکه کسی نمیاد کتابخونه هاش به این زبان رو پخش کنه ایراد بیسکام نیست!
                  Format دارین
                  چرا اشکال BASCOM نیست؟ وقتی خود شرکت سازنده ساختاری رو ایجاد میکنه که کتابخانه Compile شده منتشر بشه، مقصر نیست؟ اصلا دیگران رو هم بگذاریم کنار، اگر من بخوام سورس کتابخونه های خود کامپایلر رو داشته باشم چکار باید بکنم؟ می دونید که گاهی از سورس کتابخانه در Debug کردن برنامه بسیار موثره.
                  قبوله،مشکله بیسکامه :icon_razz: ( فراموش نکنین خود شرکت سازنده 2 ساختار برای کتابخونه ها داده!آ‌یکی همون کامپایل شده شه که خوب وقتی اوایل تنها کامپایلری که از اکثر وسایل پشتیبانی می کرد همین بود و تنها برگ برنده اش هم بود!آ‌ نمی خواست سورس رو لو بده!آ‌ دومی هم حالت open source ! شما کمی بیشتر به کامپایلر های دیگه هم دقت کنین! gcc ساختارش open source و اینکه همه چیزش معلومه به کنار،اما آیا توو بقیه c ها هم همه ساختار کتابخونه هاشو دارین ؟ نه!آ‌ فقط اونهایی که ... بگزریم!)

                  نوشته اصلی توسط shockley
                  khepelesibiloo جان، من فکر می کنم، یا زبان مشترک مناسبی نداریم یا کلا طبیعت این بحث ها بی سرانجامه، هدف من از مواردی که گفتن دامن زدن به بحث بچه گانه ی C بهتره یا بیسیک نبود و فقط عینا تجربیاتی رو که داشتم گفتم، تا دوستان عزیزی که تازه می خواهند شروع کنند بعد از یک مدت مجبور به دوباره کاری نشن. قطعا صحبت های من مغرضانه هم نیست چون شاید بیشتر از هر کس دیگری به کامپایلر BASCOM مسلط هستم و اون رو خوب می شناسم و وضعیتی نیست که چون C بلدم بخوام از اون دفاع کنم.
                  من دیگه دارم شاخ در میارم! تهه پست قبلیم گفتم اگه دوباره کسی بیاد بخواد بگه c بهرته تعجب می کنم!آ‌دلیلش این بود که فکر کردم تونستم هدفم رو بفهمونم !آ‌
                  من به وضوح از اولین پستم تا الان، نه گفتم c خوبه، نه گفتم بیسیک!آ‌ من به وضوح از بیسیک پشتیبانی نکردم که الان C نیاز به دفاع داشته باشه!آ‌من به وضوح اعلام کردم :
                  c در جاهایی خوب است
                  basic در جاهایی خوب است
                  تعداد جاهایی که c نصبت به بیسیک خوب است بیشتر است !
                  پس ظاهرا c از بیسیک بهتر است !
                  اما در نهایت هیچ کدام خوب نیست!
                  همه موارد لازم است!

                  زبونم مو در آورد!آ‌امیدوارم الان هدفمو ... هر چند دیگه برام فرقی نمی کنه ....

                  100% ماهیت این بحث بی سر انجامه!آ‌ چون من جواب رو توو چند خط قرمز نوشتم و همون اولین پستم توو این تاپیک هم بیانگر همین بود!

                  باز هم اینجا کلمه دوباره کاری رو دیدم!آ‌باز هم از تعجب شاخ در آوردم! باز هم دلیلش اونقدر واضحه و بدیهیه که فکر کنم توضیح بدم کار اشتباهی کردم!!!

                  نوشته اصلی توسط shockley
                  با اینحال برای آخرین بار در این مورد پست می فرستم و هیچ علاقه ای به ادامه دادن
                  بحث در این زمینه ندارم. :smile:
                  بهازین،یکی 2 روزه برای یه موضوعی با من هر از گاهی چت می کنه!آ‌ هر بار پستی تازه اینجا زده شد! من گفتم دیگه جواب نمی دم!آ‌اما ماهیت بحث طوری شد که به اجبار چیزهایی گفتم!آ‌ ولی ایندفه دیگه منم قول می دم هیچ پستی نزنم!آ‌ به جای 1 نفر ، به همه قول می دم سکوت کنم !


                  کلا من تمام بحث هام اینجا رو پس میگیرم!آ‌ c از بیسیک بهرته و لطفا با اون شروع کنین و ... من معذرت می خوام :nerd:



                  ادمین جونه من این تاپیک رو ققققققققققققققققففففففففففففففففففففففففففل کننننننننننننننننننننننننننننننننننننننننننننننننن ننننننن :mrgreen:

                  دیدگاه


                    #24
                    پاسخ : یک نکته آموزشی برای تمام دوستان

                    قولم رو ظرف 2 دقیقه شکستم!آ‌اما نه برای اینکه جوابی بدم! فقط توو پست قبلیم، هی کلمه :
                    نتونستم منظورم رو بفهمونم

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

                    دیدگاه


                      #25
                      پاسخ : یک نکته آموزشی برای تمام دوستان

                      در کامپایلر BASCOM چون تقریباً برای استفاده و راه اندازی هر قطعه خارجی توابعی در نظر گرفته شده فقط مدت زمان انجام یک پروژه رو کاهش میده
                      و این مساله کمتر شدن مدت زمان انجام پروژه در پروژه های تجاری (نه لزوماً صنعتی و حرفه ای) مفید هستش مثلاً من نوعی که AVR و BASCOM رو بلد
                      باشم میتونم تو دانشگاه برای سایر دانشجو ها پروژه دانشجویی انجام بدم و کسب در آمد کنم و میام یه پروژه قفل رمز برای یکی بنویسیم تو عرض 2 ساعت
                      و 40 ، 50 تومن پول میگیرم !!! (البته من رفاقتی حساب میکنم چند بار از بیرون قیمت گرفتم زیر 100 تومن پروژه میکرو انجام نمیدند !!! )
                      از این لحاظ بلد بودن BASCOM خوبه چون هم در آمد زا هستش و هم وقت بسیار کمی از من میگیره :biggrin:

                      ولی فرض کنید یه کاربر مبتدی میخواد یه کیپد 4 در 4 رو راه اندازی کنه میاد اونو طبق دستور config kbd کامپایلر BASCOM به پورت خاصی وصل میکنه و با تابع getkbd
                      براحتی مقدار کلید فشرده شده رو بدست میاره ! خیلی عالیه تو دو خط با کیپد کار کرد !

                      ولی ... این کاربر نمی دونه که اساس کار با کیپد چیه و چطوری میکرو تونست تشخیص بده کدوم کلید فشرده شده و مقدارش چیه !
                      چون توابع از پیش آماده هستند و خودش چیزی نمی نویسه و این طوری میشه که کاربر به اصول و پایه مسلط نمیشه
                      ولی وقتی بخواد همین کار رو تو سی انجام بده مجبوره برای یه کیپد 4 در 4 یه تابع بصورت زیر بنویسه
                      (روش اسکن سطر یا ستون) :
                      کد:
                      key_scan()
                       {
                        //first row
                        PORTB =0b11111110;
                        
                        if(!(PINB.4^PINB.0))
                         {
                          key='1';
                          delay_ms(300);
                         }
                        if(!(PINB.5^PINB.0))
                         {
                          key='2';
                          delay_ms(300);
                         }
                        if(!(PINB.6^PINB.0))
                         {
                          key='3';
                          delay_ms(300);
                         }
                        if(!(PINB.7^PINB.0))
                         {
                          key='4';
                          delay_ms(300);
                         }
                         
                        //second row  
                        PORTB =0b11111101;
                        
                        if(!(PINB.4^PINB.1))
                         {
                          key='5';
                          delay_ms(300);
                         }
                        if(!(PINB.5^PINB.1))
                         {
                          key='6';
                          delay_ms(300);
                         }
                        if(!(PINB.6^PINB.1))
                         {
                          key='7';
                          delay_ms(300);
                         }
                        if(!(PINB.7^PINB.1))
                         {
                          key='8';
                          delay_ms(300);
                         }
                        
                        //third row
                        PORTB =0b11111011;
                        
                        if(!(PINB.4^PINB.2))
                         {
                          key='9'; 
                          delay_ms(300);
                         }
                        if(!(PINB.5^PINB.2))
                         {
                          key='10'; 
                          delay_ms(300);
                         }
                        if(!(PINB.6^PINB.2))
                         {
                          key='11';
                          delay_ms(300);
                         }
                        if(!(PINB.7^PINB.2))
                         {
                          key='12';
                          delay_ms(300);
                         }
                        
                        //fourth row
                        PORTB =0b11110111;
                        
                        if(!(PINB.4^PINB.3))
                         {
                          key='13'; 
                          delay_ms(300);
                         }
                        if(!(PINB.5^PINB.3))
                         {
                          key='14'; 
                          delay_ms(300);
                         }
                        if(!(PINB.6^PINB.3))
                         {
                          key='15' ; 
                          delay_ms(300);
                         }
                        if(!(PINB.7^PINB.3))
                         {
                          key='16' ; 
                          delay_ms(300);
                         }     
                       }
                      درسته طولانی و وقت گیر میشه ولی دقیقاً میدونه داره چی کار میکنه و چطوری میتونه کلید فشرده شده در کیپد رو تشخیص بده !
                      تازه میتونه همین تابع بصورت یه کتابخونه دربیاره و دفعه بعد دیگه این همه کد ننویسه و براحتی مثل همون BASCOM با فراخوانی یه تابع کارش رو انجان بده
                      با این تفاوت که تو سی این تابع رو خودش نوشته و میدونه که چی نوشته !

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

                      ولی تو BASCOM اینطور نیست همه چیز حاظر و آماده هستش و با دو سه تا دستور میتونه تو lcd بنویسه ! هلو بپر تو گلو !!!

                      در کل به نظر من برای مسلط شدن به تمامی جوانب و ریزه کاری ها ، کد نویسی به زبان سی و مسلط بودن به اون خوب و ضروری هستش
                      ولی میشه برای save time هم که شده BASCOM رو هم یاد گرفت و از اون هم استفاده کرد ، به هر حال یه مهارت هستش !

                      یه چیزی هم هستش اونم اینکه مثلاً چون من نوعی تو کار برنامه نویسی هم هستم حالا چه application چه web development و ...
                      وقتی که C بلدم با کمی تغییر می تونم به خانواده عظیمی از زبان های برنامه نویسی تسلط داشته باشم از سی کلاسیک گرفته تا جاوا و php و دات نت و ...

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

                      من نوعی میام برنامه نویسی تحت وب رو با Notepad و php انجام میدم و خیلی هم خوشم میاد (asp کار ها میگند عذاب آور هستش)
                      اون یکی میاد با Visual Studio .NET و ASP .NET انجام میده و اونم خوشش میاد
                      هیچ کدوم هم اون یکی رو قبول نداره !!!

                      مهم اینه که کار نتیجه بده و ما خروجی صحیح رو در بهترین حالت ممکن بگیریم ، همین !




                      از ماست که بر ماست !

                      دیدگاه


                        #26
                        پاسخ : یک نکته آموزشی برای تمام دوستان

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

                        دیدگاه


                          #27
                          پاسخ : یک نکته آموزشی برای تمام دوستان

                          از نظر من بهتره که هردو زبان رو بلد باشیم :job:
                          چون گاهی اوقات ممکنه برنامه ای بنویسیم که برای نوشتنش سی از بیسیک سخت تر باشه، پس برنامه رو با بیسیک مینویسیم (به قول معروف خودمون رو راحت میکنیم :mrgreen: ) و گاهی اوقات ممکنه برنامه ای بنویسیم که با بیسیک زیاد راحت نباشیم و سی برای کارمون مناسب باشه!پس برنامه رو به زبان C مینویسیم :job:


                          پس هرکی که هردو زبانو بلده موفق تر و راحت تره! :nice: :job: :applause:
                          1 در دنیا 100 در آخرت (درس و مشق فعالیتمو تو انجمن کم کرده)
                          من آنچه شرط بلاغست با تو میآ‌گویم. تو خواه از سخنم پند گیر و خواه ملال. سعدی
                          !Electronic On! Programming On
                          هوشمندانه سوال بپرسیم!
                          http://ir02x6.persiangig.com/logo/eca/tanks_01.png

                          دیدگاه


                            #28
                            پاسخ : یک نکته آموزشی برای تمام دوستان

                            سلام
                            همه میدونن که بیسیک زبون راحتی هست ولی برای کارهای پیشرفته پیشنهاد نمیشه چون کد زیادی تولید میکنه ... و این باعث میشه پردازش کم بیاریم ...
                            باور نمیکنید ...
                            این لینک رو نگاه کنید ...
                            http://www.eca.ir/forum2/index.php?topic=90246.msg560399#msg560399
                            من همیشه میگم یک بار سختی برای همیشه ... :nice:
                            یک بار سختی بکشیم و زبون سی رو خوب یاد بگیریم ...
                            مطمئن باشید که همه جا سی به دردتون میخوره ...
                            خودم با زبون بیسیک شروع کردم و از موقعی که به زبون سی کوچ کردم دیگه از بیسیک بدم اومده :redface:
                            در کل با زبون سی بیشتر حال میکنم تا بیسیک :agree:
                            [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                            معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                            معرفی نرم افزار Codewizard PWM
                            با من بیشتر آشنا شوید

                            دیدگاه

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