اطلاعیه

Collapse
No announcement yet.

نرم افزاری برای برنامه نویسی AVR به زبان c

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

    نرم افزاری برای برنامه نویسی AVR به زبان c

    سلام .دوستان من نرم افزاری برای برنامه نویسی AVR به زبان c لازم دارم میشه معرفی کنید .البته به غیر از کدویژن چون این نرم افزار دائم قفل میکنه یا درست نصب نمیشه وقتی هم میخوام دوباره نصبش کنم نصب نمیشه مگه اینکه ویندوز را عوض کنم. یه نرم افزاری می خواهم که این مشکلات را نداشته باشه.مرسی :sad:
    "هنگامی که دری از خوشبختی به روی ما بسته میشود ، دری دیگر باز می شود ولی ما اغلب چنان به دربسته چشم می دوزیم که درهای باز را نمی بینیم." هلن کلر

    #2
    پاسخ : نرم افزاری برای برنامه نویسی AVR به زبان c

    با سلام
    در مورد بدردنخور بودن کدویژن که شک نکنید!
    برا کامپایلر C برای AVR در ویندوز میآ‌توانید از WINAVR استفاده کنید که به مراتب بهتر از کدویژن است. البته ممکن است در ابتدا کمی کار با آن مشکل به نظر برسد.
    من دوست دارم آزاد فکر کنم، نرمآ‌افزارآ‌ و سختآ‌افزارهای آزاد را به کار ببرم و اگر توانستم نرمآ‌افزار، سختآ‌افزار و محتوای آزاد درست کنم!

    دیدگاه


      #3
      پاسخ : نرم افزاری برای برنامه نویسی AVR به زبان c

      نوشته اصلی توسط manian
      با سلام
      در مورد بدردنخور بودن کدویژن که شک نکنید!
      برا کامپایلر C برای AVR در ویندوز میآ‌توانید از WINAVR استفاده کنید که به مراتب بهتر از کدویژن است. البته ممکن است در ابتدا کمی کار با آن مشکل به نظر برسد.
      ببخشید ولی شما بر چه اساس یه کامپایلر c رو بدردنخور و یه کامپایلر c دیگه رو بهتر میدونید ایا دلیل دارید؟در اینکه کدویژن مثل winavr رایگان نیست شکی نیست ولی ایا تو ایران قیمت برای نرم افزار اهمیت داره ؟
      در ثانی هسته اصلی کدویژن با avrgcc یکیست و نمیشه گفت که gcc کد بهینه تری تولید میکنه
      حالا اگه دلیل دارید لطفا بیان کنید


      Qt - A cross-platform application and UI framework

      با کامپایلرهای قدرتمند GCC در Linux و MinGw در Windows

      دیدگاه


        #4
        پاسخ : نرم افزاری برای برنامه نویسی AVR به زبان c

        سلام.
        به نظر منم کدویژن بدرد نخوره. ضمنا مطمئن باشید که avrgcc کد بهینه تری تولید می کنه.( البته مشکلاتی هم داره که حجم را می بره بالا)
        اما در مورد معرفی کامپایلر شک نکنید که بهترین کامپایلر برای انواع میکروها از جمله avr که شما لازم دارید IAR هست.
        هیچ کامپایلری نمی تواند مثل IAR کدها را بهینه کند.فوق العاده است. از لحاظ حجم و بهینه سازی باید بگم برای یک پروژه کد تولیدی کدویژن بالاتر از 20 کیلو بایت شد ( تازه از کتابخانه های سطح بالای کدویژن استفاده نکردم) اما وقتی اون پروژه را با IAR نوشتم( 1 ماه طول کشید!) حجمش کمتر از 6 کیلو بایت شد.( اما پدرم دراومد. هیچ کتابخونه ای برای کار با ماژول های میکرو نداره)
        به نظر من فعلا AVRGCC را نصب کن. رو هیچ سیستمی مشکل نداره. واسه کتابخونه هم از کتابخانه های AVRLIB استفاده کن.( کلی کتابخونه بدرد بخور داره)
        بسته به دانش شما سوییچ از کدویژن به AVRGCC می تونه مشکل باشه.( IAR را فعلا فراموش کن)

        دیدگاه


          #5
          پاسخ : نرم افزاری برای برنامه نویسی AVR به زبان c

          شما می تونید از برنامه Keil هم استفاده کنید.
          " علت هر شکستی عمل کردن بدون فکر است" الکس مکنزی


          [move](---> موسیقی ایرانی <---) [/move]

          دیدگاه


            #6
            پاسخ : نرم افزاری برای برنامه نویسی AVR به زبان c

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

            ببخشید ولی شما بر چه اساس یه کامپایلر c رو بدردنخور و یه کامپایلر c دیگه رو بهتر میدونید ایا دلیل دارید؟در اینکه کدویژن مثل winavr رایگان نیست شکی نیست ولی ایا تو ایران قیمت برای نرم افزار اهمیت داره ؟
            در ثانی هسته اصلی کدویژن با avrgcc یکیست و نمیشه گفت که gcc کد بهینه تری تولید میکنه
            حالا اگه دلیل دارید لطفا بیان کنید
            با سلام
            احتمالا شما از طرفداران دو آتشه codevision هستید و خیلی تند میآ‌روید! درمورد هستهآ‌هم فکر نکنم همچین چیزی صحیح باشه به هر حال اگر منبعی برای این موضوع دارید لطفا ذکر بفرمایید (البته بعید هم نیست یک سری بیان کدآ‌های GPL رو توی برنامهآ‌ی کد بستهآ‌ استفاده کنند و credit هم ندهند!) .
            دوست عزیز من خودم مدتآ‌ها با کدویژن کار کردم سپس آمدم سراغ gcc در این پست هم دلایل رو توضیح دادهآ‌ام (البته جناب سپاسیار هم جواب دادهآ‌اند) که اینجا هم کپی میآ‌کنم:
            http://www.eca.ir/forum2/index.php?topic=17303.msg81176

            چندین دلیل وجود داره که من به اختصار میآ‌گم البته این مشکلات و ضعفآ‌ها مربوط به تجربه ۲ سال قبل من با این برنامه است و ممکن است در ورژنآ‌های جدیدتر بهتر شده باشه:
            ۱. زبان C این برنامه با ANSI-C سازگار نیست و یه چیز من درآوردی است. مثلا PORTB.5
            ۲. در راستای مشکل قبل خیلی از شماره بیتآ‌ها اینجا تعرف نشده است یعنی شما نمیآ‌توانید به این صورت یک رجیستر رو مقدار دهی کنید چیزی که در دیتاشیتآ‌ هم معموله:
            کد:
            DDRB = (1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0);

            ۳. کد تولید شده اصلا خوب optimize نمیآ‌شه من به شخصه این رو در برسی اسمبلی مرتبط با یه ISR تولید شده دیدم. البته الان باید تست بشه شاید بهبود پیدا کرده باشه؟
            ۴. محیط کاملا یکآ‌پارچه است که برای یک کاربر خیلی مبتدی خوبه ولی قابلیت انعطاف رو میآ‌گیره. شما مجبور هستید از editor خود برنامه استفاده کنید یعنی نمیآ‌توانید از بیرون کامپایلر رو صدا کنید. و یا همین مشکل برای پروگرمرآ‌های دیگه. مطمئن نیستم ولی امکان صدا کردن یک برنامه خارجی در محیط این برنامه وجود داره یا نه؟
            ۵. برای اجرا نیاز به admin دارید، این مشکل به عنوان مثال وقتی ایجاد میآ‌شه که بخواهید این برنامه رو روی کامپیوترهای یک شبکه برای دیگران نصب کنید.
            اینآ‌ها شاید برای همه مهم نباشه:
            ۶. برنامه فقط در ویندوز اجرا میآ‌شود.
            ۷. برنامه پولی است و باید آن را کرک کنید و یا از نسخه demo استفاده کنید.


            من دوست دارم آزاد فکر کنم، نرمآ‌افزارآ‌ و سختآ‌افزارهای آزاد را به کار ببرم و اگر توانستم نرمآ‌افزار، سختآ‌افزار و محتوای آزاد درست کنم!

            دیدگاه


              #7
              پاسخ : نرم افزاری برای برنامه نویسی AVR به زبان c

              سلام دوست عزیز از پاسختون سپاسگزارم و خیلی دوست دارم با یه نفر بحث سازنده داشته باشم.
              خیر بر عکس من اصلا با کامپایلر کار نمیکنم من 3 ساله که با اسمبلی avr و تقریبا 4 ساله با اسمبلی PIC کار میکنم که اگه با اسمبلی PIC کار نکردید جالبه بدونید که اسمبلی AVR در مقابلش مثل یه زبون سطح بالا میمونه کد خروجی کدویژن رو هم اصلا قبول ندارم . علاوه بر این مدیریت حافظش رو هم قبول ندارم رها کردن رجیستر های r16 تا r23 رو توسط کدویژن و به جای اون استفاده از رم تقریبا سرعت پایین AVR و اون پشته ساختگی مزخرف و... واقعا مزحکه.
              خوب حالا نوبت gcc
              1:کتابخونه open source ؟ درسته که کتابخونه کدویژن تعدادی از توابع با c نوشته شده ولی
              به هر حال open source است gcc چی؟
              (یکی از مزیت های open source بودن کتابخونه قابلیت دستکاری و حل مشکلات احتمالی و استفاده های خاص دیگه)

              باز از این نظر خدا پدر طراحان bascom رو بیامرزه

              2:خروجی اسمبلی open source ؟ شما که چند سال هم با کدویژن کار کردین بهتر میدونین که کدویژن هر چی داره 2 دستی اماده و تقدیم میکنه ولی gcc چی؟(نه lst نه asm)

              3:از نظر کد بارها برنامه های مشابه نوشتم و خروجی رو تو پروتئوس دیباگ کردم به هیچ عنوان نمیشه گفت که کدوم بهتره چه از نظر خروجی کد و چه از نظر تخصیص حافظه.
              اما دلایل شما:
              1:دلیلی نداره کسی که زبون c که برای برنامه نویسی سطح بالای خانواده 8086 ساختن syntax کاملا مشابهی با یه زبونی که قراره مستقیم با سخت افزار کار کنه داشته باشه و هیچ برنامه نویسی هم این انتظار رو نداره من خودم دانشجوی کامپیوترم و اگه بخوام اینقدر معزرت میخوام "ملا لغتی" باشم باید تمام زبونها رو ول کنم.چون هیچ دو زبونی مثل هم نیشه!
              از طرفی این چیزی که شما بیان نمودید مربوط به دستورات دسترسی بیتی به رجیسترهای IO است حالا (sbi,cbi) حالا شما اگه ممکنه یه دستور دسترسی بیتی رو تو خانواده 8086 بیار
              یعنی شما میگی چون تو اون نبوده حالا که برای avr این دستورات گنجانده شده زبون c این باید با همون syntax باشه؟
              یا فکر portable بودن کد هستین؟ به نظر من این چیزا تو برنامه نویسی سخت افزار کشکه

              2: در راستای مشکل دوم که بیان نمودید اگه فایل تعریف بیتهای میکروی مورد استفاده رو که همه جا ریخته از جمله avr studio به برنامتون الحاق کننین این دیگه براتون به عنوان یه مشکل مطرح نمیشه
              3:در مورد مشکل سوم ....
              4:در این مورد که یکپارچه بودنش برای اکثر کاربران یکی از ویژگیهای مثبتش به حساب میاد شک نکنید اکثرا مایل هستند از همچین نرم افزار هایی استفاده کنند که جزئیات کار با makefile رو برای هر پروژه نداشته باشن اگر چه که avr studio این مشکلو برای gcc حل کرده
              5:گمان میکنم شما این مشکلو در رابطه با نصب بر روی سیستمهای دانشگاهتون داشتین خوب این هم راه داره راهش اینه که اول پسورد admin رو پیدا کنید و بعد اقدام به نصب کنید یه راه سادش اینجاست

              6:به نظر شما چند نفر تو ایران از سیستم عامل ویندوز استفاده نمیکنن؟
              7:تو ایران متاسفانه اصلا این حرفها مطرح نیست.


              Qt - A cross-platform application and UI framework

              با کامپایلرهای قدرتمند GCC در Linux و MinGw در Windows

              دیدگاه


                #8
                پاسخ : نرم افزاری برای برنامه نویسی AVR به زبان c

                نوشته اصلی توسط sallysat
                سلام دوست عزیز از پاسختون سپاسگزارم و خیلی دوست دارم با یه نفر بحث سازنده داشته باشم.
                خیر بر عکس من اصلا با کامپایلر کار نمیکنم من 3 ساله که با اسمبلی avr و تقریبا 4 ساله با اسمبلی PIC کار میکنم که اگه با اسمبلی PIC کار نکردید جالبه بدونید که اسمبلی AVR در مقابلش مثل یه زبون سطح بالا میمونه کد خروجی کدویژن رو هم اصلا قبول ندارم . علاوه بر این مدیریت حافظش رو هم قبول ندارم رها کردن رجیستر های r16 تا r23 رو توسط کدویژن و به جای اون استفاده از رم تقریبا سرعت پایین AVR و اون پشته ساختگی مزخرف و... واقعا مزحکه.
                با سلام
                بحث بین اسمبلر و کامپایلر c از هم کاملا جدا هستند (حتی کامپایلر c و بیسیک هم لزوما نباید با هم مقایسه شوند). همواره میآ‌توان گفت که خروجی نوشته شده به زبان اسمبلی به مراتب سریعآ‌تر از کامپایلرآ‌ها است ولی خوب چه اهمیتی داره. شما که نمیآ‌توانید یک کد خیلی بزرگ را با اسمبلی بنویسید. اگر هم بتوان این کار رو کرد هم خیلی طول میآ‌کشه و هم تفریبا برای دیگران خیلی قابل استفاده و نگهداری نیست. در ضمن در خیلی از موارد کدآ‌ها به صورت ترکیبی از C و اسمبلی نوشته میآ‌شوند یعنی قسمتآ‌هایی که خیلی حساس هستند با اسمبلی و بقیه قسمتآ‌ها با C. به عنوان مثال همین USB که برای AVR نوشته شده است. پس کلا بحثی بین کامپایلر و اسمبلر نیست.

                نوشته اصلی توسط sallysat
                خوب حالا نوبت gcc
                1:کتابخونه open source ؟ درسته که کتابخونه کدویژن تعدادی از توابع با c نوشته شده ولی
                به هر حال open source است gcc چی؟
                (یکی از مزیت های open source بودن کتابخونه قابلیت دستکاری و حل مشکلات احتمالی و استفاده های خاص دیگه)
                باز از این نظر خدا پدر طراحان bascom رو بیامرزه
                این موجود عزیز (منظورم GCC است) از A تا Z همش آزاد و بازه پیادهآ‌سازی کتابخانه آن هم باز و سورسش در دسترسه. اصلا منطقی نیست که بسته باشه. شما یه سرچ بزنی حتما پیدا میآ‌کنی.

                نوشته اصلی توسط sallysat
                2:خروجی اسمبلی open source ؟ شما که چند سال هم با کدویژن کار کردین بهتر میدونین که کدویژن هر چی داره 2 دستی اماده و تقدیم میکنه ولی gcc چی؟(نه lst نه asm)
                خوب این کار toolchain هست نه خود اسمبلر. این کاری که شما میآ‌خواهی بکنی به صورت اتوماتیک انجام نمیآ‌شه بلکه میآ‌توانی از دستور avr-objdump استفاده کنی. هم خروجی اسمبلی و هم listing فایل رو برات درست میآ‌کنه

                -- اگر میآ‌خواهی یه پروژه نمونه ببینی که این امکان توش هست من توی وبلاگم یه نمونه دارم: آدرس وبلاگ اینجا و فایل فشرده پروژه avr که این امکان توش هست هم اینجا!


                نوشته اصلی توسط sallysat
                3:از نظر کد بارها برنامه های مشابه نوشتم و خروجی رو تو پروتئوس دیباگ کردم به هیچ عنوان نمیشه گفت که کدوم بهتره چه از نظر خروجی کد و چه از نظر تخصیص حافظه.
                خوب شاید شما خیلی خوب دقت نکردی. چون من خودم این رو تجربه کرده بودم البته ممکنه در ورژنآ‌های جدید بهتر شده باشه.

                نوشته اصلی توسط sallysat
                :دلیلی نداره کسی که زبون c که برای برنامه نویسی سطح بالای خانواده 8086 ساختن syntax کاملا مشابهی با یه زبونی که قراره مستقیم با سخت افزار کار کنه داشته باشه و هیچ برنامه نویسی هم این انتظار رو نداره من خودم دانشجوی کامپیوترم و اگه بخوام اینقدر معزرت میخوام "ملا لغتی" باشم باید تمام زبونها رو ول کنم.چون هیچ دو زبونی مثل هم نیشه!
                از طرفی این چیزی که شما بیان نمودید مربوط به دستورات دسترسی بیتی به رجیسترهای IO است حالا (sbi,cbi) حالا شما اگه ممکنه یه دستور دسترسی بیتی رو تو خانواده 8086 بیار
                یعنی شما میگی چون تو اون نبوده حالا که برای avr این دستورات گنجانده شده زبون c این باید با همون syntax باشه؟
                یا فکر portable بودن کد هستین؟ به نظر من این چیزا تو برنامه نویسی سخت افزار کشکه
                اتفاقا باید دقیقا تا حد ممکن مثل هم باشند. وگرنه چه لزومی داشت که موسسه استانداد آمریکا بیاد کامپایلر C رو استاندارد کنه اسمش رو بزارن ANSI-C چون میآ‌خواهند کدها قابل انتقال باشند. و این قابل انتقال بودن هزینهآ‌ها را کاهش دهد.
                شما لازم نیست همه زبونآ‌ها رو ول کنی ولی حداقل میآ‌توانی توقع داشته باشی که هر کد ANSI-C رو بتونی با کامپایلر ANSI-C کامپایل کنی
                اون چیزی که شما در دسترسی بیتی مثال زدید دقیقا تایید سخنان من است. چون ما در C دسترسی بیتی ندارم ولی توی میکرو به آن نیاز داریم حالا من میام به جای خراب کردن انسی-سی مثل آدم از این دستور استفاده میآ‌کنم و یک بیت را not میکنم:

                PORTB ^= (1<<PB5);

                میآ‌توان از همین روش برای عوض کردن یک بیت در یک I/O که در X86 به صورت memory-mappedاست، نیز استفاده کرد. این هم همون مثالی که شما میآ‌خواستید. علاوه بر این، اینکه شما میآ‌گویید این چیزها کشکه نباید برنامه نویسی embedded را در حد یک بیت جابهآ‌جا کردن در نظر گرفت ولی اگر به فرض بخواهید یک پیادهآ‌سازی استک TCP/IP و یا FAT FileSystem را بر روی تراشه خود پورت کنید قدر ansi-c مشخص میآ‌شه

                راستی خوشبختم من هم کامپیوتر خواندم!

                نوشته اصلی توسط sallysat
                2: در راستای مشکل دوم که بیان نمودید اگه فایل تعریف بیتهای میکروی مورد استفاده رو که همه جا ریخته از جمله avr studio به برنامتون الحاق کننین این دیگه براتون به عنوان یه مشکل مطرح نمیشه
                البته فکر نکنم با این کار مشکل به صورت کامل حل بشه ولی خوب یک کامپایلر به دردنخور نیاز به این جور ملحقاتی داره!


                نوشته اصلی توسط sallysat
                4:در این مورد که یکپارچه بودنش برای اکثر کاربران یکی از ویژگیهای مثبتش به حساب میاد شک نکنید اکثرا مایل هستند از همچین نرم افزار هایی استفاده کنند که جزئیات کار با makefile رو برای هر پروژه نداشته باشن اگر چه که avr studio این مشکلو برای gcc حل کرده
                بله خوب یک کاربر عادی و آماتور ممکنه ولی وقتی کار یک مقدار جدی و بزرگ شد و ابزارآ‌های جانبی نیاز بود اون وقت یه آماتور با ابزارآ‌های آماتوری توی کارش میآ‌مونه شما هم در این شک نکنید.

                نوشته اصلی توسط sallysat
                5:گمان میکنم شما این مشکلو در رابطه با نصب بر روی سیستمهای دانشگاهتون داشتین خوب این هم راه داره راهش اینه که اول پسورد admin رو پیدا کنید و بعد اقدام به نصب کنید یه راه سادش اینجاست
                دقیقا من همین مشکل را داشتم. اولا من که نمیآ‌خواهم کامپیوترآ‌ها دانشکده رو هک کنم ثانیا مشکل فقط در نصب نیست (حداقل اون ورژنی که من باهاش کار کردم). چون هر وقت در زمان اجرا چون ادمین نبود اشکال میآ‌گرفت شما که توقع نداری ما بیایم پسوردآ‌های کامپیوترآ‌ها رو به دانشجوآ‌ها بدیم (بدهند).

                نوشته اصلی توسط sallysat
                6:به نظر شما چند نفر تو ایران از سیستم عامل ویندوز استفاده نمیکنن؟
                شاید بتوان گفت دها هزار نفر. یکی هم این بنده حقیر و ده بیستا از بچهآ‌های خوب و کار درست این سایت!

                نوشته اصلی توسط sallysat
                7:تو ایران متاسفانه اصلا این حرفها مطرح نیست.
                الان نیست ولی امیدوارم این مشکل حل بشه. اون وقت کسانی که با ابزارهای آزاد کار میآ‌کنند حالش رو میآ‌برند!

                شرمنده اگر جایی لحن من تند بود.

                بعد از تحریر
                (من برگشتم کلی تغییر دادم تا لحن نوشته علمی بشه شرمنده اگر در ابتدا تند بود)
                من دوست دارم آزاد فکر کنم، نرمآ‌افزارآ‌ و سختآ‌افزارهای آزاد را به کار ببرم و اگر توانستم نرمآ‌افزار، سختآ‌افزار و محتوای آزاد درست کنم!

                دیدگاه


                  #9
                  پاسخ : نرم افزاری برای برنامه نویسی AVR به زبان c

                  [quote=manian]

                  سلام

                  خوشحالم از اینکه یه پایه بحث پیدا کردم

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

                  شما که نمیآ‌توانید یک کد خیلی بزرگ را با اسمبلی بنویسید. اگر هم بتوان این کار رو کرد هم خیلی طول میآ‌کشه و هم تفریبا برای دیگران خیلی قابل استفاده و نگهداری نیست. در ضمن در خیلی از موارد کدآ‌ها به صورت ترکیبی از C و اسمبلی نوشته میآ‌شوند یعنی قسمتآ‌هایی که خیلی حساس هستند با اسمبلی و بقیه قسمتآ‌ها با C
                  بله عزیز من و شما هم رشته ایم و خیلی خوب حرف همو درک میکنیم اگه شما احتمالا مطلبی در این مورد در طراحی سیستم عامل شنیده اید یا دیده اید من با اقای سیلبرشاتس در این مورد هم عقیده ام و قصد ندارم سخنان ایشون رو نقض کنم اما یادمون باشه ما قرار نیست برای میکرو سیستم عامل بسازیم واما قابل استفاده و نگهداری نبودن رو دیگه خواهشن خودتون اصلاحش کنید شما خدای نکرده نرم افزار خوندید نمی خواین یه نگاه به دوروبرتون به کتابخونه بیسکام به کتابخونه کدویژن و حتی به Appnotes های avr studio بندازین ببینین از این کدهای غیر قابل استفاده و نگهداری چطور استفاده میکنن؟؟به حق چیزهای ندیده و نشنیده.


                  به عنوان مثال همین USB که برای AVR نوشته شده است. پس کلا بحثی بین کامپایلر و اسمبلر نیست.
                  دیگه واقعا جالب شد راستشو بخواین اوایل سال 2004 که شما و من با C اصلا فکر همچین کاری هم به ذهنتون راه نمیدادید شرکت atmel یه پروتکل استاندارد تحت نام avr309 ارائه داد چطور ندیدید؟

                  این موجود عزیز (منظورم GCC است) از A تا Z همش آزاد و بازه پیادهآ‌سازی کتابخانه آن هم باز و سورسش در دسترسه. اصلا منطقی نیست که بسته باشه. شما یه سرچ بزنی حتما پیدا میآ‌کنی.
                  البته چون برای شما عزیزه خداکنه ناراحت نشین ولی راستش من منظورم کتابخونه استاندارد خودشه نه کتابخونه هایی که تو اینترنت پیدا میشه و اگه یه سر به همین کتابخونه ( منظورم avr-lib ) بزنین خودتون میبینین که فقط هدرهاش قابل مشاهدست و توابع رو به صورت کامپایل شده گذاشته البته امیدوارم جسارت نباشه

                  خوب این کار toolchain هست نه خود اسمبلر. این کاری که شما میآ‌خواهی بکنی به صورت اتوماتیک انجام نمیآ‌شه بلکه میآ‌توانی از دستور avr-objdump استفاده کنی. هم خروجی اسمبلی و هم listing فایل رو برات درست میآ‌کنه
                  بله من تمام ملحقاتش رو هم تست کرده بودم و بعد این مطلبو بیان کردم
                  avr-objdump.exe که شما میفرمایین با دادن object خروجی اسمبلی رو میده اما فقط اون کدی رو که خودتون نوشتین مثلا این طور فرض کنید شما فقط یه دستور تو main مینویسی و کامپایل میکنی اگه مثلا میکرو رو mega16 انتخاب کرده باشین بیش از 180 بایت کد تولید میکنه یعنی 90 خط مثلا من میخوام بدونم تو این 70 خط (20 خطش مربوط به INTERRUPT VECTOR TABLE) خط چیکار کرده ولی خروجی همین avr-objdump با سویچ -s همون 2 خطه!!!
                  حالا من هی می گم نره و شما باز دوباره احتمالا میگی بدوش
                  در مورد فایل list هم که خروجی خود کامپایلر هست دقیقا به همین صورته اهمیت این فایل وقتی بیشتر روشن میشه که شما قصد دیباگ کردن یه پروژه بزرگ روبصورت حرفه ای مثلا با avrddx بخوای فایل sdi مورد ساپورت isis رو بسازی که ظاهرا برای شما اصلا مهم نیست!

                  اتفاقا باید دقیقا تا حد ممکن مثل هم باشند. وگرنه چه لزومی داشت که موسسه استانداد آمریکا بیاد کامپایلر C رو استاندارد کنه اسمش رو بزارن ANSI-C چون میآ‌خواهند کدها قابل انتقال باشند. و این قابل انتقال بودن هزینهآ‌ها را کاهش دهد.
                  شما لازم نیست همه زبونآ‌ها رو ول کنی ولی حداقل میآ‌توانی توقع داشته باشی که هر کد ANSI-C رو بتونی با کامپایلر ANSI-C کامپایل کنی
                  در این مورد حرف شما درسته از حرف حساب نمیشه گذشت ولی راستشو بخواین من هنوز syntax رو ندیدم که تو ANSI C ساپورت بشه ولی تو کدویژن نشه

                  راجع به اون دستور به PORTB.5 منظور من این نبود که به قول شما روشی که توی gcc این کار انجام میشه تو کدویژن نمیشه حالا دوتاشو با هم مقایسه میکنم تا کاملا روشن بشه

                  PORTD.5=1 معادل sbi portd,5 هستش اما برای یک کردن همین با اون روشی که شما میگین میشه :
                  PORTD |=0x20

                  که معادل اسمبلیش هم اینه (مثلا با r16 کار کنیم)
                  in r16,portd
                  ori r16,0x20
                  out portd,r16

                  حالا کدوم یکی بهینه است ؟ 1دستور یا 3 دستور؟ اگر هم باورت نمیشه خودت تست کن
                  توی خانواده 8086 هم که بنده عرض کردم همچین دستوری نداریم منظورم فکر کنم کامل مشخص شد و گر نه مشخصه که با and یا or کردن میشه یه بیت رو صفر یا یک کرد(که این کار دقیقا و با همین دو دستور in , out صورت میگیره).
                  در مورد xor کردن یه بیت هم که برای invert کردن به کار میره که شما فرمودید و اصلا موضوع بحث ما این نبود (موضوع بحث ما سر sbi , cbi و اینکه چرا در کدویژن syntax ی مثل portd.5 مشاهده میشه)

                  میآ‌توان از همین روش برای عوض کردن یک بیت در یک I/O که در X86 به صورت memory-mapped است، نیز استفاده کرد. این هم همون مثالی که شما میآ‌خواستید
                  بله من که نگفتم نمیشه ولی شما منظور منو دریافت نکردید منظور من "دسترسی تک بیت مستقیمه" و اگه دستوری برای این کار پیدا کردید سلام برسونید.
                  علاوه بر این، اینکه شما میآ‌گویید این چیزها کشکه نباید برنامه نویسی embedded را در حد یک بیت جابهآ‌جا کردن در نظر گرفت ولی اگر به فرض بخواهید یک پیادهآ‌سازی استک TCP/IP و یا FAT FileSystem را بر روی تراشه خود پورت کنید قدر ansi-c مشخص میآ‌شه
                  بله مجدادا میگم حتی نیاز به یه سرچ ساده تو اینترنت هم نیست کتابخونه bascom رو اگه دارید یه نگاه کوچیک بندازید ببینید با C نوشته؟

                  راستی خوشبختم من هم کامپیوتر خواندم!
                  من هم خوشبختم ولی یه کامپیوتری به نظر من باید اطلاعات بیشتری از

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

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

                  دقیقا من همین مشکل را داشتم. اولا من که نمیآ‌خواهم کامپیوترآ‌ها دانشکده رو هک کنم ثانیا مشکل فقط در نصب نیست (حداقل اون ورژنی که من باهاش کار کردم). چون هر وقت در زمان اجرا چون ادمین نبود اشکال میآ‌گرفت شما که توقع نداری ما بیایم پسوردآ‌های کامپیوترآ‌ها رو به دانشجوآ‌ها بدیم (بدهند).
                  این مطلب درسته مربوط به بحث ما نیست ولی
                  نیازی نیست انها بدهند (بدهید) مشکل که فقط یه کامپایلر نیست شما که کامیوتر خوندی بهتر میدونی که یه دانشجوی کامپیوتر اگه admin رو نداشته باشه و برای نصب هر نرم افزار مکافات بکشه... این مشکل رو همون طور که حدث زدم در همین راستا بیان نمودید اما برای خیلی ها مطرح نیست حتی اماتورهایی مثل بنده هم میتونن پسوورد رو داشته باشن و سپس در همان محیط یوزر محدود و یه راست کلیک و run as به راحتی اجرا کنند.http://www.loginrecovery.com

                  شاید بتوان گفت دها هزار نفر. یکی هم این بنده حقیر و ده بیستا از بچهآ‌های خوب و کار درست این سایت!
                  در مورد لینوکس بله ولی بحث ما در مورد سیستم عاملی بود که موجود عزیز شما روش اجرا میشه منظورم(DOS) بنده هم ubunta رو روی سیستم دارم و هم suse رو قبلا داشتم ,ولی متاسفانه به دلیل ساپورت نرم افزاری پایین (فعلا) عملا استفاده 100% از این سیستم عامل فعلا برای یه کاربر حرفه ای مقدور نیست.

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

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

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









                  Qt - A cross-platform application and UI framework

                  با کامپایلرهای قدرتمند GCC در Linux و MinGw در Windows

                  دیدگاه


                    #10
                    پاسخ : نرم افزاری برای برنامه نویسی AVR به زبان c

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

                    خوشحالم از اینکه یه پایه بحث پیدا کردم
                    با سلام
                    من هم از اینکه بتونیم یک بحث سازنده داشته باشیم خوشحالآ‌ میآ‌شوم.


                    نوشته اصلی توسط sallysat
                    مسلما قبول دارم خیلی هم بحثشون با هم جداست کسی این دو تا رو با هم مقایسه نکرده یا لااقل من ندیدم صحبت من سر موضوع کدویژن بود که شما ظاهرا منظورمو نگرفتید
                    اینکه همواره سریعتر از کامپایلر است قبول ندارم و معتقدم که یه زبان برنامه نویسی دقیقا مثل یه وسیله میمونه اگه قدرت اسمبلی رو اندازه قدرت یه بنز در نظر بگیری و قدرت c رو در حد یه پراید خوب مسلما اگه راننده بنز ناشی باشه حتی همون پراید هم میتونه ازش جلو بزنه و اما اینکه چه فایده ای خوب مسلما اگه یه کم بیشتر تجربه پیدا کنی تو این موضوع تجدید نظر میکنی
                    اهمیت اسمبلی تو کارهای با اهمیت زمانی بالا مثلا یه گیرنده کد ریموت کنترل و...غیر قابل انکاره
                    خوب من هم همین رو میآ‌گم اگر شما با اسمبلی کد بزنی چون هوش انسان پشت سرشه معمولا خروجی خیلی تولید میآ‌شه. در جاآ‌هایی که سرعت خیلی مهمه (مثل همون USB که مثال زدم) قسمت حیاتی باید حتما به صورت اسمبلی نوشته بشه چون کامپایلر از پسش بر نمیآ‌آید. ولی خوب میآ‌توان قسمتآ‌های دیگر را که به قول معروف time-critical نیستند را به زبان c و یا زبانآ‌های دیگر نوشت.

                    نوشته اصلی توسط sallysat
                    بله عزیز من و شما هم رشته ایم و خیلی خوب حرف همو درک میکنیم اگه شما احتمالا مطلبی در این مورد در طراحی سیستم عامل شنیده اید یا دیده اید من با اقای سیلبرشاتس در این مورد هم عقیده ام و قصد ندارم سخنان ایشون رو نقض کنم اما یادمون باشه ما قرار نیست برای میکرو سیستم عامل بسازیم واما قابل استفاده و نگهداری نبودن رو دیگه خواهشن خودتون اصلاحش کنید شما خدای نکرده نرم افزار خوندید نمی خواین یه نگاه به دوروبرتون به کتابخونه بیسکام به کتابخونه کدویژن و حتی به Appnotes های avr studio بندازین ببینین از این کدهای غیر قابل استفاده و نگهداری چطور استفاده میکنن؟؟به حق چیزهای ندیده و نشنیده.
                    به هر حال از هر فردی بپرسیم براش مشخصه که یک کد اسمبلی نسبت به یک کد C کار باهاش سختآ‌تره حداقل من که اینآ‌ طوری هستم یعنی یک پروژه به من بدهند که ۱۰۰۰ خط C باشد و بگویند که تغییرش بده در مقایسه با یک کد اسمبلی خیلی کوچکتر به مراتب راحتآ‌ترم با سی کار کنم.
                    علاوه بر این شما چرا کدآ‌های میکرو رو خیلی کوچک در نظر میآ‌گیری. مثلا اگر قرار باشه که یک embedded-webserver توی AVR درست کنید خوب مشخصه حجم کد خیلی بزرگ میآ‌شه! این حجم از کد به زبان اسمبلی برای من غیر قابل تصوره. در ضمن فرض کنیم که این کد را یک شیر مردی با اسمبلی درست کرد، حالا واقعا اگر قرار باشد کسی تغییری در این دهاآ‌هزار خط اسمبلی بدهد به نظرتون کار سادهآ‌ای میآ‌آید؟

                    نوشته اصلی توسط sallysat
                    دیگه واقعا جالب شد راستشو بخواین اوایل سال 2004 که شما و من با C اصلا فکر همچین کاری هم به ذهنتون راه نمیدادید شرکت atmel یه پروتکل استاندارد تحت نام avr309 ارائه داد چطور ندیدید؟
                    بله من هم همون کد را دیدهآ‌ام البته بعدآ‌ها یک پیادهآ‌سازی بهتر و تقریبا آزاد برای USآ‌B درست شد اینجا. در این پیادهآ‌سازی ترکیبی از اسمبلی و سی استفاده شده است (قسمتآ‌های حساس با اسمبلی است). همین هم باعث شده که از این کد صدآ‌ها جا برای پروژهآ‌های مختلف استفاده شود. چون کاربران میآ‌توانند به راحتی و با زبان سی از آن استفاده کنند. من هم این USB را به عنوان مثالی برای پروژه ترکیبی بین سی و اسمبلی مثال زدم.

                    نوشته اصلی توسط sallysat
                    البته چون برای شما عزیزه خداکنه ناراحت نشین ولی راستش من منظورم کتابخونه استاندارد خودشه نه کتابخونه هایی که تو اینترنت پیدا میشه و اگه یه سر به همین کتابخونه ( منظورم avr-lib ) بزنین خودتون میبینین که فقط هدرهاش قابل مشاهدست و توابع رو به صورت کامپایل شده گذاشته البته امیدوارم جسارت نباشه
                    اصلا کامپایلر گنو (gcc معروف) کلا آزاده منطقی نیست که قسمتی از آن بسته باشد. این avr-libc هم سورسش اینجا است (با یه JFGI میآ‌توانستید پیداش کنید): http://download.savannah.gnu.org/releases/avr-libc/
                    خوب الحمدالله این مشکل شما که حل شد.

                    نوشته اصلی توسط sallysat
                    بله من تمام ملحقاتش رو هم تست کرده بودم و بعد این مطلبو بیان کردم
                    avr-objdump.exe که شما میفرمایین با دادن object خروجی اسمبلی رو میده اما فقط اون کدی رو که خودتون نوشتین مثلا این طور فرض کنید شما فقط یه دستور تو main مینویسی و کامپایل میکنی اگه مثلا میکرو رو mega16 انتخاب کرده باشین بیش از 180 بایت کد تولید میکنه یعنی 90 خط مثلا من میخوام بدونم تو این 70 خط (20 خطش مربوط به INTERRUPT VECTOR TABLE) خط چیکار کرده ولی خروجی همین avr-objdump با سویچ -s همون 2 خطه!!!
                    حالا من هی می گم نره و شما باز دوباره احتمالا میگی بدوش
                    من که دقیق نفهمیدم مشکل شما چی هست شما گفتید که gcc خروجی lst و اسمبلی تولید نمیآ‌کنه ولی من گفتم که با avr-objdump درست میآ‌کنه. شما به پروژهآ‌ای که من گفتم نگاه کردی؟ توی اون هم lst هست و هم اسمبلی ؟ بازهم شما یک توضیح بیشتر بده تا من بفهمم.

                    نوشته اصلی توسط sallysat
                    در مورد فایل list هم که خروجی خود کامپایلر هست دقیقا به همین صورته اهمیت این فایل وقتی بیشتر روشن میشه که شما قصد دیباگ کردن یه پروژه بزرگ روبصورت حرفه ای مثلا با avrddx بخوای فایل sdi مورد ساپورت isis رو بسازی که ظاهرا برای شما اصلا مهم نیست!
                    من آشنایی با اینآ‌هایی که شما معرفی کردی ندارم اگر یک توضیح بیشتری بدی متشکر میآ‌شوم.

                    نوشته اصلی توسط sallysat
                    در این مورد حرف شما درسته از حرف حساب نمیشه گذشت ولی راستشو بخواین من هنوز syntax رو ندیدم که تو ANSI C ساپورت بشه ولی تو کدویژن نشه
                    خوب همین PORTB.1=1 که در کدویژن هست ولی در یک کامپایلر ANSI-C وجود نداره.

                    نوشته اصلی توسط sallysat
                    راجع به اون دستور به PORTB.5 منظور من این نبود که به قول شما روشی که توی gcc این کار انجام میشه تو کدویژن نمیشه حالا دوتاشو با هم مقایسه میکنم تا کاملا روشن بشه

                    PORTD.5=1 معادل sbi portd,5 هستش اما برای یک کردن همین با اون روشی که شما میگین میشه :
                    PORTD |=0x20

                    که معادل اسمبلیش هم اینه (مثلا با r16 کار کنیم)
                    in r16,portd
                    ori r16,0x20
                    out portd,r16

                    حالا کدوم یکی بهینه است ؟ 1دستور یا 3 دستور؟ اگر هم باورت نمیشه خودت تست کن
                    این مثال برای استدلال شما حکم تله رو داره! کامپایلر gcc اینقدر هوشمند هست که این رو تشخیص بده من برای شما این تست رو انجام دادهآ‌ام کد زیر را در نظر بگیرید:


                    کد:
                    #include <avr/io.h>
                    int main(void) {
                    	PORTB |= (1<<PB5);
                    	while (1);
                    	return 0;
                    }

                    این هم قسمت اصلی خروجی dissassembly

                    کد:
                    00000058 <main>:
                    #include <avr/io.h>
                    int main(void) {
                     58:	cf ed   	ldi	r28, 0xDF	; 223
                     5a:	d0 e0   	ldi	r29, 0x00	; 0
                     5c:	de bf   	out	0x3e, r29	; 62
                     5e:	cd bf   	out	0x3d, r28	; 61
                    	PORTB |= (1<<PB5);
                     60:	c5 9a   	sbi	0x18, 5	; 24
                     62:	ff cf   	rjmp	.-2   	; 0x62 <main+0xa>


                    خوب دیدید که این مشکل که شما در نظر گرفتهآ‌ بودید وجود ندارد.

                    نوشته اصلی توسط sallysat
                    توی خانواده 8086 هم که بنده عرض کردم همچین دستوری نداریم منظورم فکر کنم کامل مشخص شد و گر نه مشخصه که با and یا or کردن میشه یه بیت رو صفر یا یک کرد(که این کار دقیقا و با همین دو دستور in , out صورت میگیره).
                    در مورد xor کردن یه بیت هم که برای invert کردن به کار میره که شما فرمودید و اصلا موضوع بحث ما این نبود (موضوع بحث ما سر sbi , cbi و اینکه چرا در کدویژن syntax ی مثل portd.5 مشاهده میشه)
                    خوب من هم گفتم که ما در C دسترسی بیتی ندارم. ولی حالا چون نداریم بیایم مثل کدویژن کامپایلر رو از ANSI-C بودن بندازیم و یا مثل gcc به همون روشی که گفتم این کار رو انجام بدیم.

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

                    نوشته اصلی توسط sallysat
                    من هم خوشبختم ولی یه کامپیوتری به نظر من باید اطلاعات بیشتری از
                    خوب مشخصه که من باید بیشتر مطالعه و کار کنم.

                    نوشته اصلی توسط sallysat
                    بله خوب معلومه که شما ازادی فکر خودتون رو دارید و میتونید هر جوری عشقتونه فکر کنید ولی این جوابی برای یه بحث سازنده نیست و بیشتر رنگ و بوی تخریب داره.
                    تخریب چی؟ خوب این به نظرم اصولی نیست که شما بیای از ابتدا تمام تعرفآ‌ها رو بیاری چرا سازندگاه خودشون این رو نگذاشتند؟ علاوه بر این من فکر نکنم کامپایلر کدویژن اگر دسترسی بیتی نباشه بتونه اون رو به عنوان مثال با SBI جایگزین کنه. البته این باید تست شود.


                    نوشته اصلی توسط sallysat
                    شک نکن که یه ادم حرفه ای دوست داره کارشو با سرعت هر چه بیشتر انجام بده و من نفهمیدم منظور شما از یه ابزار حرفه ای و ابزار اماتور چیه؟
                    به عنوان مثال یک کامپایلر که نتوان آن را از command-line صدا زده بشه به نظرم یه ابزار آماتوری به حساب میآ‌آید البته این نظر شخصی است.

                    نوشته اصلی توسط sallysat
                    این مطلب درسته مربوط به بحث ما نیست ولی
                    نیازی نیست انها بدهند (بدهید) مشکل که فقط یه کامپایلر نیست شما که کامیوتر خوندی بهتر میدونی که یه دانشجوی کامپیوتر اگه admin رو نداشته باشه و برای نصب هر نرم افزار مکافات بکشه... این مشکل رو همون طور که حدث زدم در همین راستا بیان نمودید اما برای خیلی ها مطرح نیست حتی اماتورهایی مثل بنده هم میتونن پسوورد رو داشته باشن و سپس در همان محیط یوزر محدود و یه راست کلیک و run as به راحتی اجرا کنند.http://www.loginrecovery.com
                    درسته مبحث خیلی به بحث ارتباط نداره.


                    نوشته اصلی توسط sallysat
                    در مورد لینوکس بله ولی بحث ما در مورد سیستم عاملی بود که موجود عزیز شما روش اجرا میشه منظورم(DOS) بنده هم ubunta رو روی سیستم دارم و هم suse رو قبلا داشتم ,ولی متاسفانه به دلیل ساپورت نرم افزاری پایین (فعلا) عملا استفاده 100% از این سیستم عامل فعلا برای یه کاربر حرفه ای مقدور نیست.
                    خوب خوبه شما هم تجربه لینوکس را دارید. علاوه بر این بر خلاف شما به نظرم کاربران جدی و حرفهآ‌ای در اکثر مواقع از لینوکس استفاده آ‌میآ‌کنند. (شما امکان بلادرنگ realtime را در نظر بگیرید آیا این امکان در ویندوز وجود داره؟ این نیاز برای یک کاربر حرفهآ‌ای در ویندوز وجود نداره!)

                    نوشته اصلی توسط sallysat
                    البته من هم در این مورد ابراز ناخرسندی کردم چون تقریبا میشه گفت ضد حتی حقوق بشره
                    اون بشری که ممکنه چند سال روی یه نرم افزار کار کنه و در نهایت حاصل دسترنجش به سادگی به تاراج بره مسلما هیچ مذهب و هیچ قانونی این رو درست نمیدونه.
                    خوشحالم در این موضوع اتفاق نظر داریم.

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

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

                    من هم آرزوی موفقیت برای شما دارم و منتظر جواب هستم!
                    من دوست دارم آزاد فکر کنم، نرمآ‌افزارآ‌ و سختآ‌افزارهای آزاد را به کار ببرم و اگر توانستم نرمآ‌افزار، سختآ‌افزار و محتوای آزاد درست کنم!

                    دیدگاه


                      #11
                      پاسخ : نرم افزاری برای برنامه نویسی AVR به زبان c

                      سلام .از همه دوستان ممنونم بحث خیلی تخصصی شده ولی من به عنوان یه مبتدی با کدویژن اصلا راحت نیستم .یه برنامه را سه بار نوشتم داخل سه فایل متفاوت با سورس متفاوت دوبار خطا گرفت هر دو بار هم خطاهاش متفاوت بودند ولی بار سوم اصلا خطا نگرفت و کامپایل شد نمیدونم ایراد از چیه ؟ولی حالا بعد از این همه بحث بالا خره چی پیشنهاد می کنیدکدویژن یا avrgcc?
                      "هنگامی که دری از خوشبختی به روی ما بسته میشود ، دری دیگر باز می شود ولی ما اغلب چنان به دربسته چشم می دوزیم که درهای باز را نمی بینیم." هلن کلر

                      دیدگاه


                        #12
                        پاسخ : نرم افزاری برای برنامه نویسی AVR به زبان c

                        سلام.
                        گفتم که سوییچ از gcc به کدویژن می تونه براتون مشکل باشه.
                        در مورد کدویژن به نظر من بهترین نسخه 1.25.9 است که دوستان لینک دانلودش را در قسمت دانلود نرم افزارهای تخصصی گذاشته اند. شما از این نسخه استفاده کن اگه مشکلی داشت دوباره بحث را ادامه بدیم.
                        موفق باشید.

                        دیدگاه


                          #13
                          پاسخ : نرم افزاری برای برنامه نویسی AVR به زبان c

                          من با C کار نمی کنم. ولی منم معتقدم که صورت مساله رو پاک نکنی بهتره. بهتره علت خطا رو پیدا کنی. مطمئنا بعد از اون کار باهش خیلی شیرین تره

                          دیدگاه


                            #14
                            پاسخ : نرم افزاری برای برنامه نویسی AVR به زبان c

                            سلام.

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

                            امیدوارم ناراحت نشده باشید.
                            www.icesi.ir

                            دیدگاه


                              #15
                              پاسخ : نرم افزاری برای برنامه نویسی AVR به زبان c

                              با سلام خدمت شما دوست عزیز

                              نوشته اصلی توسط manian
                              خوب من هم همین رو میآ‌گم اگر شما با اسمبلی کد بزنی چون هوش انسان پشت سرشه معمولا خروجی خیلی تولید میآ‌شه. در جاآ‌هایی که سرعت خیلی مهمه (مثل همون USB که مثال زدم) قسمت حیاتی باید حتما به صورت اسمبلی نوشته بشه چون کامپایلر از پسش بر نمیآ‌آید. ولی خوب میآ‌توان قسمتآ‌های دیگر را که به قول معروف time-critical نیستند را به زبان c و یا زبانآ‌های دیگر نوشت.
                              حرفتون کاملا صحیحه ولی هیچ بحثی توش نیست اما مواردی هست که در ادامه توضیح میدم.

                              نوشته اصلی توسط manian
                              به هر حال از هر فردی بپرسیم براش مشخصه که یک کد اسمبلی نسبت به یک کد C کار باهاش سختآ‌تره حداقل من که اینآ‌ طوری هستم یعنی یک پروژه به من بدهند که ۱۰۰۰ خط C باشد و بگویند که تغییرش بده در مقایسه با یک کد اسمبلی خیلی کوچکتر به مراتب راحتآ‌ترم با سی کار کنم.
                              علاوه بر این شما چرا کدآ‌های میکرو رو خیلی کوچک در نظر میآ‌گیری. مثلا اگر قرار باشه که یک embedded-webserver توی AVR درست کنید خوب مشخصه حجم کد خیلی بزرگ میآ‌شه! این حجم از کد به زبان اسمبلی برای من غیر قابل تصوره. در ضمن فرض کنیم که این کد را یک شیر مردی با اسمبلی درست کرد، حالا واقعا اگر قرار باشد کسی تغییری در این دهاآ‌هزار خط اسمبلی بدهد به نظرتون کار سادهآ‌ای میآ‌آید؟
                              من راستش کارم با میکرو جنبه الکترونیک داره که اون هم به کمک عقل ناقصم با همون اسمبلی از پسش برمیام توی زمینه هایی که زیاد گیر دارم بیشتر به کتابخونه bascom متوسل میشم کتابخونش تقریبا کامل و به زبان اسمبلی هستش (چون خودتون میتونید تصور کنید که اگه قرار بود به زبون بیسیک بنویسن چی میشد) نویسندگان این کتابخونه ها هم یک شخص یا فرد خاص نیست بلکه تقریبا هر کتابخونه یه نویسنده خاص داره و در ابتدای کتابخونه نام و webpage شخصی اون فرد به همراه ایمیلش موجوده از نظر خانایی به نظر من هیچ مشکلی (نه تنها برای من بلکه برای هر کسی که زمینه کار با اسمبلی رو هم داشته باشه) وجود نداره (تقریبا توضیحات متن برنامه ها کامله)
                              از طرفی من با c هم هیچ مشکلی ندارم بلکه برعکس c , c++, c# زبونهای مورد علاقه من هستن ولی بین برنامه نویسی سخت افزاری و برنامه نویسی کامپیوتر تفاوت خیلی زیادی قائلم .شاید من اشتباه میکنم ولی چند ساله که همین اشتباه رو انجام میدم و ناراضی نیستم.
                              از نظر طولانی بودن کد هم راستش من برای هر divice که باهاش کار میکنم برای خودم کتابخونه دارم.که برای بکار بردن تو یه پروژه جدید ممکنه در حد فقط چند خط تغییرات لازم باشه.

                              نوشته اصلی توسط manian
                              اصلا کامپایلر گنو (gcc معروف) کلا آزاده منطقی نیست که قسمتی از آن بسته باشد. این avr-libc هم سورسش اینجا است (با یه JFGI میآ‌توانستید پیداش کنید): http://download.savannah.gnu.org/releases/avr-libc/
                              خوب الحمدالله این مشکل شما که حل شد.
                              راستش من کتابخونه ای که روی سیستم دارم کتابخونه ایست که به همراه پکیج winavr به تاریخ 21/12/2007 ارائه شده در مورد کتابخونه ای که معرفی کردید به موقع بحث و مقایسه با کتابخونه کدویژن خواهیم کرد.

                              نوشته اصلی توسط manian
                              خوب دیدید که این مشکل که شما در نظر گرفتهآ‌ بودید وجود ندارد.
                              دوست من من اگه وجود نداشت که خدای نکرده مریض نیستم بیام راجع بهش بحث الکی
                              راه بندازم مطمئن باش اگه تست نکرده بودم به شما نمیگفتم تست کنید از طرفی من نه با سازندگان کد ویژن فامیلم نه با gcc نه کدویژن به طور کلی به درد من میخوره نه gcc طوری که با شروع اولین بحث ابتدا معایب کلی کدویژن رو گفتم و حاضرم در مورد هر کدومش توضیح بدم
                              این نمونه کدیست که من دقیقا مشابه شما نوشتم.


                              کد:
                              #include <avr/io.h>
                              int main(void)
                              { 
                               
                                PORTB |=(1<<PB5);
                                  
                                while(1);
                               
                                return(0);
                              }
                              خوب این هم خروجی dissassembly که دقیقا از تو command کپی کردم چون عکسش رو هم میخوام بذارم.

                              کد:
                              D:\mdialer\testgcc\gcc2\default>avr-objdump -d am.o
                              
                              am.o:  file format elf32-avr
                              
                              Disassembly of section .text:
                              
                              00000000 <main>:
                               0: cf 93     push  r28
                               2: df 93     push  r29
                               4: cd b7     in   r28, 0x3d   ; 61
                               6: de b7     in   r29, 0x3e   ; 62
                               8: a8 e3     ldi  r26, 0x38   ; 56
                               a: b0 e0     ldi  r27, 0x00   ; 0
                               c: e8 e3     ldi  r30, 0x38   ; 56
                               e: f0 e0     ldi  r31, 0x00   ; 0
                               10: 80 81     ld   r24, Z
                               12: 80 62     ori  r24, 0x20   ; 32
                               14: 8c 93     st   X, r24
                               16: 00 c0     rjmp  .+0      ; 0x18 <__zero_reg__+0x17>


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

                              واجبه یه توضیح کوچک در مورد کد بدم اون 4 خط اول اومده r29 ,r28 که همون طوری که میدونیم رجیستر اشاره گر Y رو تشکیل میده و توی کدویژن به منظور اشاره گر پشته نرم افزاری استفاده میشه رو به ترتیب با مقادیر EEARL,EEDR پر کرده که تا ساختار کد رو نفهمیم در واقع نمیتونیم نظر بدیم (اگه شما هیچی داخل main نداشته باشی هم این کارو انجام میده)
                              خطوط بقیش (به جز خط اخر که مربوط به حلقه بینهایت میشه که بحثی راجع بهش نداریم) مربوط میشه به PORTB |=(1<<PB5) حالا خودت قضاوت کن اومده اول پوینتر X رو (R26,R27) رو با ادرس مستقیم (2 ادرس داره که حوصله توضیح ندارم ولی تو دیتاشیت صفحات اخرش ادرسهای رجیسترهای IO هست) پورت B 0x38 بار کرده و بعدش دقیقا با پوینتر Z همین کار رو انجام داده (حالا فکرشو بکن کاری که حتی بدون sbi با دستورات in , out خیلی راحت انجام میشه با ادرس دهی غیر مستقیم انجام داده!) بعد از روی ادرس پورت B که داخل Z بوده این پورت رو خونده و تو r24 گذاشته در مرحله بعد به منظور 1 کردن بیت 5 با 0x20 -ا ori کرده حالا اونو تو ادرسی که پوینتر X ریخته مگه کامپایلر شما

                              avr-gcc.exe نیست؟


                              نوشته اصلی توسط manian
                              من که دقیق نفهمیدم مشکل شما چی هست شما گفتید که gcc خروجی lst و اسمبلی تولید نمیآ‌کنه ولی من گفتم که با avr-objdump درست میآ‌کنه. شما به پروژهآ‌ای که من گفتم نگاه کردی؟ توی اون هم lst هست و هم اسمبلی ؟ بازهم شما یک توضیح بیشتر بده تا من بفهمم.
                              در مرتبه اول این یک فایل اسمبلی نیست چرا که یه فایل اسمبلی استاندارد رو با avrasm32 که ساختار command-line داره و شما هم عشق command-line هستین به راحتی اسمبل میشه (مثل اسمبلی خروجی کدویژن) و کد هگز و سایر فایل های مربوطه از جمله LST رو تولید میکنه در ثانی اگر کد هگز مربوط به هر دستور و شمارنده بایتها که پشت دستورات گذاشته بردارین تازه میشه یک فایل اسمبلی avr خوب الان لطفا به اون برنامه بالا یه نگاه بندازید و خروجی کامپایلر رو هم مشاهده کنید نوشته پروگرم= 172 درسته ؟ خوب 172 بایت از حافظه کد ما اشغال شده یعنی دقیقا 86 دستور خوب حالا تعداد دستوراتی رو که تو main برامون گذاشته میشمریم میشه 12 دستور خوب بقیش کو؟
                              مسلمه که هر کامپایلر باید یه سری INITIALIZATION هایی مربوط به stack پوینتر یا پوینتر استک نر افزاری خودش و بعضی کامپایلرها هم پاک کردن ram رو انجام میدن در اون شکی نیست ولی من میخوام اون دستورات رو ببینم اگر چه توی پروتئوس میشه از طریق باکسavr cpu register دستورات را تک تک خواند ولی خودتون بهتر میدونید که اگه توی یه loop گیر کنید چه مکافاتی داره . در ضمن من یک سویچ دیگه avr-objdump رو هم تست کردم (-D) که تو عنوانش ذکر شده disassemble-all که یه سری دستور اسمبلی (حدود 200 دستور ) که با چکی که انجام دادم متوجه شدم بی ارتباط به برنامه هستند.

                              نوشته اصلی توسط manian
                              من آشنایی با اینآ‌هایی که شما معرفی کردی ندارم اگر یک توضیح بیشتری بدی متشکر میآ‌شوم.
                              بله من هم چند وقت پیش آشنایی نداشتم ولی ابزار اصلی دیباگ تو پروتئوسه
                              اول برای اینکه بفهمیم چیه مثلا externel memory sample
                              رو باز کنید و با button استپ اجرا کنید box سورس کدی رو که مشاهده میکید (اگه نیومد از منوی دیباگsource code میتونید بیارید) مد نظر بندست میدونم میخواین بگین به چه درد میخوره F11 رو فشار بدین تا ببینید همون طور که مشاهده میکنین امکان trace رو به شما میده حالا این رو چه طوری تولید کرده ؟ اول باید همون فایل lst رو داشته باشین حالا ممکنه اونهایی که با کدویژن کار میکنند بگن ما که از اسمبلی زیاد سر درنمیاریم به چه درد ما میخوره؟ میشه گفت کدویژن تقریبا فکر همه چیزو کرده و فایل lst رو بگونه ای میسازه که کد C بصورت توضیحات و در کنار اسمبلی قرار بگیره و کاربر بفهمه که مثلا ایا یک شرط اجرا شد؟نشد؟بلاخره تکلیف چی شد؟ این avrddx رو در دایرکتوری tools\avrasm پیدا کنید یه نمونه از یه مثال ساده که این مطلبو خیلی خوب نشون میده رو از آدرس زیر بگیرید و بین lst کدویژن وgcc یه مقایسه ساده انجام بدید تا بلاخره منظور منو که در طی چند پست بفهمید.


                              http://vvv.freezoka.com/test.zip


                              نوشته اصلی توسط manian
                              خوب باید گفت که خوشا به حال سازندگان بسکام! حتما مهندسین خیلی خفنی دارند همه کارآ‌ها رو با اسمبلی انجام میآ‌دهند! ولی کدهای اسمبلی معمولا برای دیگران خیلی قابل استفاده نیست یعنی اگر همون پیادهآ‌سازی را اگر دیگران قرار باشد استفاده کنند پدرشان در خواهد آمد.
                              در مورد بیسکام صحبت کردم اما
                              من این احساس رو دارم که اسمبلی در ذهن شما یه سری کد پیچیده و غیر قابل فهم جلوه کرده! به نوعی که شما احساس میکنید که اگه یه برنامه مثلا 100 خطی c رو بخواهید با اسمبلی بنویسید باید هزاران خط و شاید چندین روز وقت صرف کنید!
                              در حالی که به طور متوسط (و نه عموما) هر دستور C رو با 2 خط اسمبلی میشه نوشت
                              البته به شرطی که مثلا این خط رو یه دستور در نظر نگیری

                              کد:
                              if(PORTA=PINB&0x34)
                              من منظورم اینه که هر انتصاب رو به عنوان یه دستور و یک شرط رو هم به عنوان یه دستور در نظر بگیری حالا اینکه شما اسمبلی رو برای خودت و دیگران غیر قابل استفاده میدونی دیگه نمیدونم چه صیغه ایست!!؟؟؟

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


                              تخریب چی؟
                              تخریب هم یعنی این
                              -----------------------------------------------------------------------------------
                              نوشته اصلی توسط sallysat
                              اگه ممکنه یه دستور دسترسی بیتی رو تو خانواده 8086 بیار

                              نوشته اصلی توسط manian
                              میآ‌توان از همین روش برای عوض کردن یک بیت در یک I/O که در X86 به صورت memory-mapped است، نیز استفاده کرد. این هم همون مثالی که شما میآ‌خواستید.

                              نوشته اصلی توسط sallysat
                              توی خانواده 8086 هم که بنده عرض کردم همچین دستوری نداریم منظورم فکر کنم کامل مشخص شد
                              نوشته اصلی توسط manian
                              خوب من هم گفتم که ما در C دسترسی بیتی ندارم

                              یا این یکی


                              نوشته اصلی توسط sallysat
                              در راستای مشکل دوم که بیان نمودید اگه فایل تعریف بیتهای میکروی مورد استفاده رو که همه جا ریخته از جمله avr studio به برنامتون الحاق کننین این دیگه براتون به عنوان یه مشکل مطرح نمیشه

                              نوشته اصلی توسط manian
                              البته فکر نکنم با این کار مشکل به صورت کامل حل بشه ولی خوب یک کامپایلر به دردنخور نیاز به این جور ملحقاتی داره!
                              یا این

                              نوشته اصلی توسط manian
                              شاید بتوان گفت دها هزار نفر. یکی هم این بنده حقیر و ده بیستا از بچهآ‌های خوب و کار درست این سایت!

                              نوشته اصلی توسط sallysat
                              در مورد لینوکس بله ولی بحث ما در مورد سیستم عاملی بود که موجود عزیز شما روش اجرا میشه منظورم(DOS)

                              نوشته اصلی توسط manian
                              خوب خوبه شما هم تجربه لینوکس را دارید
                              -----------------------------------------------------------------------------------


                              نوشته اصلی توسط manian
                              به عنوان مثال یک کامپایلر که نتوان آن را از command-line صدا زده بشه به نظرم یه ابزار آماتوری به حساب میآ‌آید البته این نظر شخصی است.


                              هر کسی نظر شخصیش برای خودش محترمه اما من این مساله برام اصلا ملاک نیست ملاک برای من در درجه اول کمترین پیچیدگی زمانی و در درجه دوم استفاده بهینه از رجیسترهای working در avr (در avr بر خلاف PIC یه بایت از حافظه sram نمیتونه توی یه عملیات ریاضی یا منطقی شرکت داشته باشه که از این نظر متغیری که در حافظه تعریف بشه برای یه دستور مثلا ++i باید از حافظه RAM تو یکی از رجیسترهای working لود بشه با دستور LD یا LDS سپس بعد از عملیات روی رجیستر تو حافظه با یکی از دستورات ST یا STS ذخیره بشه این مساله در پیچیدگی زمانی هم نقش مهمی رو بازی میکنه)

                              و در درجه سوم حجم کد خروجیست


                              نوشته اصلی توسط manian
                              خوب این به نظرم اصولی نیست که شما بیای از ابتدا تمام تعرفآ‌ها رو بیاری چرا سازندگاه خودشون این رو نگذاشتند؟
                              خوب باشه پس شما 1 دفعه هم که شده اون هدر io.h رو از اول برنامت وردار بعد ببین این رو چرا اضافه میکردی؟ایا سازنده گذاشت یا خودتون اضافه نمودید؟

                              نوشته اصلی توسط manian
                              علاوه بر این بر خلاف شما به نظرم کاربران جدی و حرفهآ‌ای در اکثر مواقع از لینوکس استفاده آ‌میآ‌کنند. (شما امکان بلادرنگ realtime را در نظر بگیرید آیا این امکان در ویندوز وجود داره؟ این نیاز برای یک کاربر حرفهآ‌ای در ویندوز وجود نداره!)
                              دوست عزیزم درسته به بحث ما ارتباط نداره ولی مگه شما از کدوم linux استفاده میکنی همونطور که خودت بهتر از من میدونی سیستم عامل های بلادرنگ (real time) رو با پوسته گرافیکی نمیسازند و معمولا زیاد شاخ و برگ بهش نمیدن و لازمه real time بودن هم تک پردازشی بودن یه سیستم عامله

                              نوشته اصلی توسط manian
                              خوشحالم در این موضوع اتفاق نظر داریم.
                              مسلما اکثر برنامه نویسان در این مورد اتفاق نظر دارند.

                              نوشته اصلی توسط manian
                              من که اصلا همچین قصدی نداشتم و به نظرم هم این طور ننوشته باشم. حالا بهتر خوانندگان در این مورد قضاوت کنند.
                              من معذرت میخوام حتما شما درست میفرمایید.

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

                              علاوه بر این من فکر نکنم کامپایلر کدویژن اگر دسترسی بیتی نباشه بتونه اون رو به عنوان مثال با SBI جایگزین کنه. البته این باید تست شود.
                              همه چیز تو مثالی که آوردم مشخصه.

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

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

                              در واقع این یادآوری یک دوست خوب در کانال IRC بود
                              کانال IRC دیگه چیه؟

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

                              بنده طی دو سه روز آینده یه سفر دارم ولی در صورت تمایل تا به نتیجه رسیدن بحث در ادامه همراه خواهم بود.








                              Qt - A cross-platform application and UI framework

                              با کامپایلرهای قدرتمند GCC در Linux و MinGw در Windows

                              دیدگاه

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