سلام .دوستان من نرم افزاری برای برنامه نویسی AVR به زبان c لازم دارم میشه معرفی کنید .البته به غیر از کدویژن چون این نرم افزار دائم قفل میکنه یا درست نصب نمیشه وقتی هم میخوام دوباره نصبش کنم نصب نمیشه مگه اینکه ویندوز را عوض کنم. یه نرم افزاری می خواهم که این مشکلات را نداشته باشه.مرسی :sad:
اطلاعیه
Collapse
No announcement yet.
نرم افزاری برای برنامه نویسی AVR به زبان c
Collapse
X
-
پاسخ : نرم افزاری برای برنامه نویسی AVR به زبان c
با سلام
در مورد بدردنخور بودن کدویژن که شک نکنید!
برا کامپایلر C برای AVR در ویندوز میآتوانید از WINAVR استفاده کنید که به مراتب بهتر از کدویژن است. البته ممکن است در ابتدا کمی کار با آن مشکل به نظر برسد.من دوست دارم آزاد فکر کنم، نرمآافزارآ و سختآافزارهای آزاد را به کار ببرم و اگر توانستم نرمآافزار، سختآافزار و محتوای آزاد درست کنم!
-
پاسخ : نرم افزاری برای برنامه نویسی AVR به زبان c
ببخشید ولی شما بر چه اساس یه کامپایلر c رو بدردنخور و یه کامپایلر c دیگه رو بهتر میدونید ایا دلیل دارید؟در اینکه کدویژن مثل winavr رایگان نیست شکی نیست ولی ایا تو ایران قیمت برای نرم افزار اهمیت داره ؟نوشته اصلی توسط manianبا سلام
در مورد بدردنخور بودن کدویژن که شک نکنید!
برا کامپایلر C برای AVR در ویندوز میآتوانید از WINAVR استفاده کنید که به مراتب بهتر از کدویژن است. البته ممکن است در ابتدا کمی کار با آن مشکل به نظر برسد.
در ثانی هسته اصلی کدویژن با avrgcc یکیست و نمیشه گفت که gcc کد بهینه تری تولید میکنه
حالا اگه دلیل دارید لطفا بیان کنید
Qt - A cross-platform application and UI framework
با کامپایلرهای قدرتمند GCC در Linux و MinGw در Windows
دیدگاه
-
پاسخ : نرم افزاری برای برنامه نویسی AVR به زبان c
سلام.
به نظر منم کدویژن بدرد نخوره. ضمنا مطمئن باشید که avrgcc کد بهینه تری تولید می کنه.( البته مشکلاتی هم داره که حجم را می بره بالا)
اما در مورد معرفی کامپایلر شک نکنید که بهترین کامپایلر برای انواع میکروها از جمله avr که شما لازم دارید IAR هست.
هیچ کامپایلری نمی تواند مثل IAR کدها را بهینه کند.فوق العاده است. از لحاظ حجم و بهینه سازی باید بگم برای یک پروژه کد تولیدی کدویژن بالاتر از 20 کیلو بایت شد ( تازه از کتابخانه های سطح بالای کدویژن استفاده نکردم) اما وقتی اون پروژه را با IAR نوشتم( 1 ماه طول کشید!) حجمش کمتر از 6 کیلو بایت شد.( اما پدرم دراومد. هیچ کتابخونه ای برای کار با ماژول های میکرو نداره)
به نظر من فعلا AVRGCC را نصب کن. رو هیچ سیستمی مشکل نداره. واسه کتابخونه هم از کتابخانه های AVRLIB استفاده کن.( کلی کتابخونه بدرد بخور داره)
بسته به دانش شما سوییچ از کدویژن به AVRGCC می تونه مشکل باشه.( IAR را فعلا فراموش کن)
دیدگاه
-
پاسخ : نرم افزاری برای برنامه نویسی 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 استفاده کنید.
من دوست دارم آزاد فکر کنم، نرمآافزارآ و سختآافزارهای آزاد را به کار ببرم و اگر توانستم نرمآافزار، سختآافزار و محتوای آزاد درست کنم!
دیدگاه
-
پاسخ : نرم افزاری برای برنامه نویسی 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
دیدگاه
-
پاسخ : نرم افزاری برای برنامه نویسی AVR به زبان c
با سلامنوشته اصلی توسط sallysatسلام دوست عزیز از پاسختون سپاسگزارم و خیلی دوست دارم با یه نفر بحث سازنده داشته باشم.
خیر بر عکس من اصلا با کامپایلر کار نمیکنم من 3 ساله که با اسمبلی avr و تقریبا 4 ساله با اسمبلی PIC کار میکنم که اگه با اسمبلی PIC کار نکردید جالبه بدونید که اسمبلی AVR در مقابلش مثل یه زبون سطح بالا میمونه کد خروجی کدویژن رو هم اصلا قبول ندارم . علاوه بر این مدیریت حافظش رو هم قبول ندارم رها کردن رجیستر های r16 تا r23 رو توسط کدویژن و به جای اون استفاده از رم تقریبا سرعت پایین AVR و اون پشته ساختگی مزخرف و... واقعا مزحکه.
بحث بین اسمبلر و کامپایلر c از هم کاملا جدا هستند (حتی کامپایلر c و بیسیک هم لزوما نباید با هم مقایسه شوند). همواره میآتوان گفت که خروجی نوشته شده به زبان اسمبلی به مراتب سریعآتر از کامپایلرآها است ولی خوب چه اهمیتی داره. شما که نمیآتوانید یک کد خیلی بزرگ را با اسمبلی بنویسید. اگر هم بتوان این کار رو کرد هم خیلی طول میآکشه و هم تفریبا برای دیگران خیلی قابل استفاده و نگهداری نیست. در ضمن در خیلی از موارد کدآها به صورت ترکیبی از C و اسمبلی نوشته میآشوند یعنی قسمتآهایی که خیلی حساس هستند با اسمبلی و بقیه قسمتآها با C. به عنوان مثال همین USB که برای AVR نوشته شده است. پس کلا بحثی بین کامپایلر و اسمبلر نیست.
این موجود عزیز (منظورم GCC است) از A تا Z همش آزاد و بازه پیادهآسازی کتابخانه آن هم باز و سورسش در دسترسه. اصلا منطقی نیست که بسته باشه. شما یه سرچ بزنی حتما پیدا میآکنی.نوشته اصلی توسط sallysatخوب حالا نوبت gcc
1:کتابخونه open source ؟ درسته که کتابخونه کدویژن تعدادی از توابع با c نوشته شده ولی
به هر حال open source است gcc چی؟
(یکی از مزیت های open source بودن کتابخونه قابلیت دستکاری و حل مشکلات احتمالی و استفاده های خاص دیگه)
باز از این نظر خدا پدر طراحان bascom رو بیامرزه
خوب این کار toolchain هست نه خود اسمبلر. این کاری که شما میآخواهی بکنی به صورت اتوماتیک انجام نمیآشه بلکه میآتوانی از دستور avr-objdump استفاده کنی. هم خروجی اسمبلی و هم listing فایل رو برات درست میآکنهنوشته اصلی توسط sallysat2:خروجی اسمبلی open source ؟ شما که چند سال هم با کدویژن کار کردین بهتر میدونین که کدویژن هر چی داره 2 دستی اماده و تقدیم میکنه ولی gcc چی؟(نه lst نه asm)
-- اگر میآخواهی یه پروژه نمونه ببینی که این امکان توش هست من توی وبلاگم یه نمونه دارم: آدرس وبلاگ اینجا و فایل فشرده پروژه avr که این امکان توش هست هم اینجا!
خوب شاید شما خیلی خوب دقت نکردی. چون من خودم این رو تجربه کرده بودم البته ممکنه در ورژنآهای جدید بهتر شده باشه.نوشته اصلی توسط sallysat3:از نظر کد بارها برنامه های مشابه نوشتم و خروجی رو تو پروتئوس دیباگ کردم به هیچ عنوان نمیشه گفت که کدوم بهتره چه از نظر خروجی کد و چه از نظر تخصیص حافظه.
اتفاقا باید دقیقا تا حد ممکن مثل هم باشند. وگرنه چه لزومی داشت که موسسه استانداد آمریکا بیاد کامپایلر C رو استاندارد کنه اسمش رو بزارن ANSI-C چون میآخواهند کدها قابل انتقال باشند. و این قابل انتقال بودن هزینهآها را کاهش دهد.نوشته اصلی توسط sallysat:دلیلی نداره کسی که زبون c که برای برنامه نویسی سطح بالای خانواده 8086 ساختن syntax کاملا مشابهی با یه زبونی که قراره مستقیم با سخت افزار کار کنه داشته باشه و هیچ برنامه نویسی هم این انتظار رو نداره من خودم دانشجوی کامپیوترم و اگه بخوام اینقدر معزرت میخوام "ملا لغتی" باشم باید تمام زبونها رو ول کنم.چون هیچ دو زبونی مثل هم نیشه!
از طرفی این چیزی که شما بیان نمودید مربوط به دستورات دسترسی بیتی به رجیسترهای IO است حالا (sbi,cbi) حالا شما اگه ممکنه یه دستور دسترسی بیتی رو تو خانواده 8086 بیار
یعنی شما میگی چون تو اون نبوده حالا که برای avr این دستورات گنجانده شده زبون c این باید با همون syntax باشه؟
یا فکر portable بودن کد هستین؟ به نظر من این چیزا تو برنامه نویسی سخت افزار کشکه
شما لازم نیست همه زبونآها رو ول کنی ولی حداقل میآتوانی توقع داشته باشی که هر کد ANSI-C رو بتونی با کامپایلر ANSI-C کامپایل کنی
اون چیزی که شما در دسترسی بیتی مثال زدید دقیقا تایید سخنان من است. چون ما در C دسترسی بیتی ندارم ولی توی میکرو به آن نیاز داریم حالا من میام به جای خراب کردن انسی-سی مثل آدم از این دستور استفاده میآکنم و یک بیت را not میکنم:
PORTB ^= (1<<PB5);
میآتوان از همین روش برای عوض کردن یک بیت در یک I/O که در X86 به صورت memory-mappedاست، نیز استفاده کرد. این هم همون مثالی که شما میآخواستید. علاوه بر این، اینکه شما میآگویید این چیزها کشکه نباید برنامه نویسی embedded را در حد یک بیت جابهآجا کردن در نظر گرفت ولی اگر به فرض بخواهید یک پیادهآسازی استک TCP/IP و یا FAT FileSystem را بر روی تراشه خود پورت کنید قدر ansi-c مشخص میآشه
راستی خوشبختم من هم کامپیوتر خواندم!
البته فکر نکنم با این کار مشکل به صورت کامل حل بشه ولی خوب یک کامپایلر به دردنخور نیاز به این جور ملحقاتی داره!نوشته اصلی توسط sallysat2: در راستای مشکل دوم که بیان نمودید اگه فایل تعریف بیتهای میکروی مورد استفاده رو که همه جا ریخته از جمله avr studio به برنامتون الحاق کننین این دیگه براتون به عنوان یه مشکل مطرح نمیشه
بله خوب یک کاربر عادی و آماتور ممکنه ولی وقتی کار یک مقدار جدی و بزرگ شد و ابزارآهای جانبی نیاز بود اون وقت یه آماتور با ابزارآهای آماتوری توی کارش میآمونه شما هم در این شک نکنید.نوشته اصلی توسط sallysat4:در این مورد که یکپارچه بودنش برای اکثر کاربران یکی از ویژگیهای مثبتش به حساب میاد شک نکنید اکثرا مایل هستند از همچین نرم افزار هایی استفاده کنند که جزئیات کار با makefile رو برای هر پروژه نداشته باشن اگر چه که avr studio این مشکلو برای gcc حل کرده
دقیقا من همین مشکل را داشتم. اولا من که نمیآخواهم کامپیوترآها دانشکده رو هک کنم ثانیا مشکل فقط در نصب نیست (حداقل اون ورژنی که من باهاش کار کردم). چون هر وقت در زمان اجرا چون ادمین نبود اشکال میآگرفت شما که توقع نداری ما بیایم پسوردآهای کامپیوترآها رو به دانشجوآها بدیم (بدهند).نوشته اصلی توسط sallysat5:گمان میکنم شما این مشکلو در رابطه با نصب بر روی سیستمهای دانشگاهتون داشتین خوب این هم راه داره راهش اینه که اول پسورد admin رو پیدا کنید و بعد اقدام به نصب کنید یه راه سادش اینجاست
شاید بتوان گفت دها هزار نفر. یکی هم این بنده حقیر و ده بیستا از بچهآهای خوب و کار درست این سایت!نوشته اصلی توسط sallysat6:به نظر شما چند نفر تو ایران از سیستم عامل ویندوز استفاده نمیکنن؟
الان نیست ولی امیدوارم این مشکل حل بشه. اون وقت کسانی که با ابزارهای آزاد کار میآکنند حالش رو میآبرند!نوشته اصلی توسط sallysat7:تو ایران متاسفانه اصلا این حرفها مطرح نیست.
شرمنده اگر جایی لحن من تند بود.
بعد از تحریر
(من برگشتم کلی تغییر دادم تا لحن نوشته علمی بشه شرمنده اگر در ابتدا تند بود)
من دوست دارم آزاد فکر کنم، نرمآافزارآ و سختآافزارهای آزاد را به کار ببرم و اگر توانستم نرمآافزار، سختآافزار و محتوای آزاد درست کنم!
دیدگاه
-
پاسخ : نرم افزاری برای برنامه نویسی AVR به زبان c
[quote=manian]
سلام
خوشحالم از اینکه یه پایه بحث پیدا کردم
مسلما قبول دارم خیلی هم بحثشون با هم جداست کسی این دو تا رو با هم مقایسه نکرده یا لااقل من ندیدم صحبت من سر موضوع کدویژن بود که شما ظاهرا منظورمو نگرفتیدبحث بین اسمبلر و کامپایلر c از هم کاملا جدا هستند (حتی کامپایلر c و بیسیک هم لزوما نباید با هم مقایسه شوند). همواره میآتوان گفت که خروجی نوشته شده به زبان اسمبلی به مراتب سریعآتر از کامپایلرآها است ولی خوب چه اهمیتی داره
اینکه همواره سریعتر از کامپایلر است قبول ندارم و معتقدم که یه زبان برنامه نویسی دقیقا مثل یه وسیله میمونه اگه قدرت اسمبلی رو اندازه قدرت یه بنز در نظر بگیری و قدرت c رو در حد یه پراید خوب مسلما اگه راننده بنز ناشی باشه حتی همون پراید هم میتونه ازش جلو بزنه و اما اینکه چه فایده ای خوب مسلما اگه یه کم بیشتر تجربه پیدا کنی تو این موضوع تجدید نظر میکنی
اهمیت اسمبلی تو کارهای با اهمیت زمانی بالا مثلا یه گیرنده کد ریموت کنترل و...غیر قابل انکاره
بله عزیز من و شما هم رشته ایم و خیلی خوب حرف همو درک میکنیم اگه شما احتمالا مطلبی در این مورد در طراحی سیستم عامل شنیده اید یا دیده اید من با اقای سیلبرشاتس در این مورد هم عقیده ام و قصد ندارم سخنان ایشون رو نقض کنم اما یادمون باشه ما قرار نیست برای میکرو سیستم عامل بسازیم واما قابل استفاده و نگهداری نبودن رو دیگه خواهشن خودتون اصلاحش کنید شما خدای نکرده نرم افزار خوندید نمی خواین یه نگاه به دوروبرتون به کتابخونه بیسکام به کتابخونه کدویژن و حتی به Appnotes های avr studio بندازین ببینین از این کدهای غیر قابل استفاده و نگهداری چطور استفاده میکنن؟؟به حق چیزهای ندیده و نشنیده.شما که نمیآتوانید یک کد خیلی بزرگ را با اسمبلی بنویسید. اگر هم بتوان این کار رو کرد هم خیلی طول میآکشه و هم تفریبا برای دیگران خیلی قابل استفاده و نگهداری نیست. در ضمن در خیلی از موارد کدآها به صورت ترکیبی از C و اسمبلی نوشته میآشوند یعنی قسمتآهایی که خیلی حساس هستند با اسمبلی و بقیه قسمتآها با C
دیگه واقعا جالب شد راستشو بخواین اوایل سال 2004 که شما و من با C اصلا فکر همچین کاری هم به ذهنتون راه نمیدادید شرکت atmel یه پروتکل استاندارد تحت نام avr309 ارائه داد چطور ندیدید؟به عنوان مثال همین USB که برای AVR نوشته شده است. پس کلا بحثی بین کامپایلر و اسمبلر نیست.
البته چون برای شما عزیزه خداکنه ناراحت نشین ولی راستش من منظورم کتابخونه استاندارد خودشه نه کتابخونه هایی که تو اینترنت پیدا میشه و اگه یه سر به همین کتابخونه ( منظورم avr-lib ) بزنین خودتون میبینین که فقط هدرهاش قابل مشاهدست و توابع رو به صورت کامپایل شده گذاشته البته امیدوارم جسارت نباشهاین موجود عزیز (منظورم GCC است) از A تا Z همش آزاد و بازه پیادهآسازی کتابخانه آن هم باز و سورسش در دسترسه. اصلا منطقی نیست که بسته باشه. شما یه سرچ بزنی حتما پیدا میآکنی.
بله من تمام ملحقاتش رو هم تست کرده بودم و بعد این مطلبو بیان کردمخوب این کار 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 رو بسازی که ظاهرا برای شما اصلا مهم نیست!
در این مورد حرف شما درسته از حرف حساب نمیشه گذشت ولی راستشو بخواین من هنوز syntax رو ندیدم که تو ANSI C ساپورت بشه ولی تو کدویژن نشهاتفاقا باید دقیقا تا حد ممکن مثل هم باشند. وگرنه چه لزومی داشت که موسسه استانداد آمریکا بیاد کامپایلر C رو استاندارد کنه اسمش رو بزارن ANSI-C چون میآخواهند کدها قابل انتقال باشند. و این قابل انتقال بودن هزینهآها را کاهش دهد.
شما لازم نیست همه زبونآها رو ول کنی ولی حداقل میآتوانی توقع داشته باشی که هر کد ANSI-C رو بتونی با کامپایلر 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 است، نیز استفاده کرد. این هم همون مثالی که شما میآخواستید
بله مجدادا میگم حتی نیاز به یه سرچ ساده تو اینترنت هم نیست کتابخونه bascom رو اگه دارید یه نگاه کوچیک بندازید ببینید با C نوشته؟علاوه بر این، اینکه شما میآگویید این چیزها کشکه نباید برنامه نویسی embedded را در حد یک بیت جابهآجا کردن در نظر گرفت ولی اگر به فرض بخواهید یک پیادهآسازی استک TCP/IP و یا FAT FileSystem را بر روی تراشه خود پورت کنید قدر ansi-c مشخص میآشه
من هم خوشبختم ولی یه کامپیوتری به نظر من باید اطلاعات بیشتری ازراستی خوشبختم من هم کامپیوتر خواندم!
بله خوب معلومه که شما ازادی فکر خودتون رو دارید و میتونید هر جوری عشقتونه فکر کنید ولی این جوابی برای یه بحث سازنده نیست و بیشتر رنگ و بوی تخریب داره.البته فکر نکنم با این کار مشکل به صورت کامل حل بشه ولی خوب یک کامپایلر به دردنخور نیاز به این جور ملحقاتی داره!
شک نکن که یه ادم حرفه ای دوست داره کارشو با سرعت هر چه بیشتر انجام بده و من نفهمیدم منظور شما از یه ابزار حرفه ای و ابزار اماتور چیه؟بله خوب یک کاربر عادی و آماتور ممکنه ولی وقتی کار یک مقدار جدی و بزرگ شد و ابزارآهای جانبی نیاز بود اون وقت یه آماتور با ابزارآهای آماتوری توی کارش میآمونه شما هم در این شک نکنید.
این مطلب درسته مربوط به بحث ما نیست ولیدقیقا من همین مشکل را داشتم. اولا من که نمیآخواهم کامپیوترآها دانشکده رو هک کنم ثانیا مشکل فقط در نصب نیست (حداقل اون ورژنی که من باهاش کار کردم). چون هر وقت در زمان اجرا چون ادمین نبود اشکال میآگرفت شما که توقع نداری ما بیایم پسوردآهای کامپیوترآها رو به دانشجوآها بدیم (بدهند).
نیازی نیست انها بدهند (بدهید) مشکل که فقط یه کامپایلر نیست شما که کامیوتر خوندی بهتر میدونی که یه دانشجوی کامپیوتر اگه admin رو نداشته باشه و برای نصب هر نرم افزار مکافات بکشه... این مشکل رو همون طور که حدث زدم در همین راستا بیان نمودید اما برای خیلی ها مطرح نیست حتی اماتورهایی مثل بنده هم میتونن پسوورد رو داشته باشن و سپس در همان محیط یوزر محدود و یه راست کلیک و run as به راحتی اجرا کنند.http://www.loginrecovery.com
در مورد لینوکس بله ولی بحث ما در مورد سیستم عاملی بود که موجود عزیز شما روش اجرا میشه منظورم(DOS) بنده هم ubunta رو روی سیستم دارم و هم suse رو قبلا داشتم ,ولی متاسفانه به دلیل ساپورت نرم افزاری پایین (فعلا) عملا استفاده 100% از این سیستم عامل فعلا برای یه کاربر حرفه ای مقدور نیست.شاید بتوان گفت دها هزار نفر. یکی هم این بنده حقیر و ده بیستا از بچهآهای خوب و کار درست این سایت!
البته من هم در این مورد ابراز ناخرسندی کردم چون تقریبا میشه گفت ضد حتی حقوق بشرهالان نیست ولی امیدوارم این مشکل حل بشه. اون وقت کسانی که با ابزارهای آزاد کار میآکنند حالش رو میآبرند!
اون بشری که ممکنه چند سال روی یه نرم افزار کار کنه و در نهایت حاصل دسترنجش به سادگی به تاراج بره مسلما هیچ مذهب و هیچ قانونی این رو درست نمیدونه.
در پایان نتیجه گیری کلی من از صحبت های شما این بود که برای اکثر موارد قصد دارین با فرا افکنی و پاسخ بی ارتباط خواننده حداقل عمومی رو گیج کنید ولی دوست عزیز این روش یه کاربر حرفه ای که دوست داره بحثش به نتیجه برسه نیست.
راستش اگه شما من رو (به قول یکی از بچه ها) نابود هم کنی من ناراحت نمیشم اما بشرط اینکه حداقل چند کلمه به معلوماتم اضافه بشهمن برگشتم کلی تغییر دادم تا لحن نوشته علمی بشه شرمنده اگر در ابتدا تند بود
با ارزوی موفقیت برای شما دوست عزیزم
Qt - A cross-platform application and UI framework
با کامپایلرهای قدرتمند GCC در Linux و MinGw در Windows
دیدگاه
-
پاسخ : نرم افزاری برای برنامه نویسی AVR به زبان c
با سلامنوشته اصلی توسط sallysatسلام
خوشحالم از اینکه یه پایه بحث پیدا کردم
من هم از اینکه بتونیم یک بحث سازنده داشته باشیم خوشحالآ میآشوم.
خوب من هم همین رو میآگم اگر شما با اسمبلی کد بزنی چون هوش انسان پشت سرشه معمولا خروجی خیلی تولید میآشه. در جاآهایی که سرعت خیلی مهمه (مثل همون USB که مثال زدم) قسمت حیاتی باید حتما به صورت اسمبلی نوشته بشه چون کامپایلر از پسش بر نمیآآید. ولی خوب میآتوان قسمتآهای دیگر را که به قول معروف time-critical نیستند را به زبان c و یا زبانآهای دیگر نوشت.نوشته اصلی توسط sallysatمسلما قبول دارم خیلی هم بحثشون با هم جداست کسی این دو تا رو با هم مقایسه نکرده یا لااقل من ندیدم صحبت من سر موضوع کدویژن بود که شما ظاهرا منظورمو نگرفتید
اینکه همواره سریعتر از کامپایلر است قبول ندارم و معتقدم که یه زبان برنامه نویسی دقیقا مثل یه وسیله میمونه اگه قدرت اسمبلی رو اندازه قدرت یه بنز در نظر بگیری و قدرت c رو در حد یه پراید خوب مسلما اگه راننده بنز ناشی باشه حتی همون پراید هم میتونه ازش جلو بزنه و اما اینکه چه فایده ای خوب مسلما اگه یه کم بیشتر تجربه پیدا کنی تو این موضوع تجدید نظر میکنی
اهمیت اسمبلی تو کارهای با اهمیت زمانی بالا مثلا یه گیرنده کد ریموت کنترل و...غیر قابل انکاره
به هر حال از هر فردی بپرسیم براش مشخصه که یک کد اسمبلی نسبت به یک کد C کار باهاش سختآتره حداقل من که اینآ طوری هستم یعنی یک پروژه به من بدهند که ۱۰۰۰ خط C باشد و بگویند که تغییرش بده در مقایسه با یک کد اسمبلی خیلی کوچکتر به مراتب راحتآترم با سی کار کنم.نوشته اصلی توسط sallysatبله عزیز من و شما هم رشته ایم و خیلی خوب حرف همو درک میکنیم اگه شما احتمالا مطلبی در این مورد در طراحی سیستم عامل شنیده اید یا دیده اید من با اقای سیلبرشاتس در این مورد هم عقیده ام و قصد ندارم سخنان ایشون رو نقض کنم اما یادمون باشه ما قرار نیست برای میکرو سیستم عامل بسازیم واما قابل استفاده و نگهداری نبودن رو دیگه خواهشن خودتون اصلاحش کنید شما خدای نکرده نرم افزار خوندید نمی خواین یه نگاه به دوروبرتون به کتابخونه بیسکام به کتابخونه کدویژن و حتی به Appnotes های avr studio بندازین ببینین از این کدهای غیر قابل استفاده و نگهداری چطور استفاده میکنن؟؟به حق چیزهای ندیده و نشنیده.
علاوه بر این شما چرا کدآهای میکرو رو خیلی کوچک در نظر میآگیری. مثلا اگر قرار باشه که یک embedded-webserver توی AVR درست کنید خوب مشخصه حجم کد خیلی بزرگ میآشه! این حجم از کد به زبان اسمبلی برای من غیر قابل تصوره. در ضمن فرض کنیم که این کد را یک شیر مردی با اسمبلی درست کرد، حالا واقعا اگر قرار باشد کسی تغییری در این دهاآهزار خط اسمبلی بدهد به نظرتون کار سادهآای میآآید؟
بله من هم همون کد را دیدهآام البته بعدآها یک پیادهآسازی بهتر و تقریبا آزاد برای USآB درست شد اینجا. در این پیادهآسازی ترکیبی از اسمبلی و سی استفاده شده است (قسمتآهای حساس با اسمبلی است). همین هم باعث شده که از این کد صدآها جا برای پروژهآهای مختلف استفاده شود. چون کاربران میآتوانند به راحتی و با زبان سی از آن استفاده کنند. من هم این USB را به عنوان مثالی برای پروژه ترکیبی بین سی و اسمبلی مثال زدم.نوشته اصلی توسط sallysatدیگه واقعا جالب شد راستشو بخواین اوایل سال 2004 که شما و من با C اصلا فکر همچین کاری هم به ذهنتون راه نمیدادید شرکت atmel یه پروتکل استاندارد تحت نام avr309 ارائه داد چطور ندیدید؟
اصلا کامپایلر گنو (gcc معروف) کلا آزاده منطقی نیست که قسمتی از آن بسته باشد. این avr-libc هم سورسش اینجا است (با یه JFGI میآتوانستید پیداش کنید): http://download.savannah.gnu.org/releases/avr-libc/نوشته اصلی توسط sallysatالبته چون برای شما عزیزه خداکنه ناراحت نشین ولی راستش من منظورم کتابخونه استاندارد خودشه نه کتابخونه هایی که تو اینترنت پیدا میشه و اگه یه سر به همین کتابخونه ( منظورم avr-lib ) بزنین خودتون میبینین که فقط هدرهاش قابل مشاهدست و توابع رو به صورت کامپایل شده گذاشته البته امیدوارم جسارت نباشه
خوب الحمدالله این مشکل شما که حل شد.
من که دقیق نفهمیدم مشکل شما چی هست شما گفتید که gcc خروجی lst و اسمبلی تولید نمیآکنه ولی من گفتم که با avr-objdump درست میآکنه. شما به پروژهآای که من گفتم نگاه کردی؟ توی اون هم lst هست و هم اسمبلی ؟ بازهم شما یک توضیح بیشتر بده تا من بفهمم.نوشته اصلی توسط sallysatبله من تمام ملحقاتش رو هم تست کرده بودم و بعد این مطلبو بیان کردم
avr-objdump.exe که شما میفرمایین با دادن object خروجی اسمبلی رو میده اما فقط اون کدی رو که خودتون نوشتین مثلا این طور فرض کنید شما فقط یه دستور تو main مینویسی و کامپایل میکنی اگه مثلا میکرو رو mega16 انتخاب کرده باشین بیش از 180 بایت کد تولید میکنه یعنی 90 خط مثلا من میخوام بدونم تو این 70 خط (20 خطش مربوط به INTERRUPT VECTOR TABLE) خط چیکار کرده ولی خروجی همین avr-objdump با سویچ -s همون 2 خطه!!!
حالا من هی می گم نره و شما باز دوباره احتمالا میگی بدوش
من آشنایی با اینآهایی که شما معرفی کردی ندارم اگر یک توضیح بیشتری بدی متشکر میآشوم.نوشته اصلی توسط sallysatدر مورد فایل list هم که خروجی خود کامپایلر هست دقیقا به همین صورته اهمیت این فایل وقتی بیشتر روشن میشه که شما قصد دیباگ کردن یه پروژه بزرگ روبصورت حرفه ای مثلا با avrddx بخوای فایل sdi مورد ساپورت isis رو بسازی که ظاهرا برای شما اصلا مهم نیست!
خوب همین PORTB.1=1 که در کدویژن هست ولی در یک کامپایلر ANSI-C وجود نداره.نوشته اصلی توسط sallysatدر این مورد حرف شما درسته از حرف حساب نمیشه گذشت ولی راستشو بخواین من هنوز syntax رو ندیدم که تو ANSI C ساپورت بشه ولی تو کدویژن نشه
این مثال برای استدلال شما حکم تله رو داره! کامپایلر gcc اینقدر هوشمند هست که این رو تشخیص بده من برای شما این تست رو انجام دادهآام کد زیر را در نظر بگیرید:نوشته اصلی توسط sallysatراجع به اون دستور به PORTB.5 منظور من این نبود که به قول شما روشی که توی gcc این کار انجام میشه تو کدویژن نمیشه حالا دوتاشو با هم مقایسه میکنم تا کاملا روشن بشه
PORTD.5=1 معادل sbi portd,5 هستش اما برای یک کردن همین با اون روشی که شما میگین میشه :
PORTD |=0x20
که معادل اسمبلیش هم اینه (مثلا با r16 کار کنیم)
in r16,portd
ori r16,0x20
out portd,r16
حالا کدوم یکی بهینه است ؟ 1دستور یا 3 دستور؟ اگر هم باورت نمیشه خودت تست کن
کد:#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>
خوب دیدید که این مشکل که شما در نظر گرفتهآ بودید وجود ندارد.
خوب من هم گفتم که ما در C دسترسی بیتی ندارم. ولی حالا چون نداریم بیایم مثل کدویژن کامپایلر رو از ANSI-C بودن بندازیم و یا مثل gcc به همون روشی که گفتم این کار رو انجام بدیم.نوشته اصلی توسط sallysatتوی خانواده 8086 هم که بنده عرض کردم همچین دستوری نداریم منظورم فکر کنم کامل مشخص شد و گر نه مشخصه که با and یا or کردن میشه یه بیت رو صفر یا یک کرد(که این کار دقیقا و با همین دو دستور in , out صورت میگیره).
در مورد xor کردن یه بیت هم که برای invert کردن به کار میره که شما فرمودید و اصلا موضوع بحث ما این نبود (موضوع بحث ما سر sbi , cbi و اینکه چرا در کدویژن syntax ی مثل portd.5 مشاهده میشه)
خوب باید گفت که خوشا به حال سازندگان بسکام! حتما مهندسین خیلی خفنی دارند همه کارآها رو با اسمبلی انجام میآدهند! ولی کدهای اسمبلی معمولا برای دیگران خیلی قابل استفاده نیست یعنی اگر همون پیادهآسازی را اگر دیگران قرار باشد استفاده کنند پدرشان در خواهد آمد.نوشته اصلی توسط sallysatبله مجدادا میگم حتی نیاز به یه سرچ ساده تو اینترنت هم نیست کتابخونه bascom رو اگه دارید یه نگاه کوچیک بندازید ببینید با C نوشته؟
خوب مشخصه که من باید بیشتر مطالعه و کار کنم.نوشته اصلی توسط sallysatمن هم خوشبختم ولی یه کامپیوتری به نظر من باید اطلاعات بیشتری از
تخریب چی؟ خوب این به نظرم اصولی نیست که شما بیای از ابتدا تمام تعرفآها رو بیاری چرا سازندگاه خودشون این رو نگذاشتند؟ علاوه بر این من فکر نکنم کامپایلر کدویژن اگر دسترسی بیتی نباشه بتونه اون رو به عنوان مثال با SBI جایگزین کنه. البته این باید تست شود.نوشته اصلی توسط sallysatبله خوب معلومه که شما ازادی فکر خودتون رو دارید و میتونید هر جوری عشقتونه فکر کنید ولی این جوابی برای یه بحث سازنده نیست و بیشتر رنگ و بوی تخریب داره.
به عنوان مثال یک کامپایلر که نتوان آن را از command-line صدا زده بشه به نظرم یه ابزار آماتوری به حساب میآآید البته این نظر شخصی است.نوشته اصلی توسط sallysatشک نکن که یه ادم حرفه ای دوست داره کارشو با سرعت هر چه بیشتر انجام بده و من نفهمیدم منظور شما از یه ابزار حرفه ای و ابزار اماتور چیه؟
درسته مبحث خیلی به بحث ارتباط نداره.نوشته اصلی توسط sallysatاین مطلب درسته مربوط به بحث ما نیست ولی
نیازی نیست انها بدهند (بدهید) مشکل که فقط یه کامپایلر نیست شما که کامیوتر خوندی بهتر میدونی که یه دانشجوی کامپیوتر اگه admin رو نداشته باشه و برای نصب هر نرم افزار مکافات بکشه... این مشکل رو همون طور که حدث زدم در همین راستا بیان نمودید اما برای خیلی ها مطرح نیست حتی اماتورهایی مثل بنده هم میتونن پسوورد رو داشته باشن و سپس در همان محیط یوزر محدود و یه راست کلیک و run as به راحتی اجرا کنند.http://www.loginrecovery.com
خوب خوبه شما هم تجربه لینوکس را دارید. علاوه بر این بر خلاف شما به نظرم کاربران جدی و حرفهآای در اکثر مواقع از لینوکس استفاده آمیآکنند. (شما امکان بلادرنگ realtime را در نظر بگیرید آیا این امکان در ویندوز وجود داره؟ این نیاز برای یک کاربر حرفهآای در ویندوز وجود نداره!)نوشته اصلی توسط sallysatدر مورد لینوکس بله ولی بحث ما در مورد سیستم عاملی بود که موجود عزیز شما روش اجرا میشه منظورم(DOS) بنده هم ubunta رو روی سیستم دارم و هم suse رو قبلا داشتم ,ولی متاسفانه به دلیل ساپورت نرم افزاری پایین (فعلا) عملا استفاده 100% از این سیستم عامل فعلا برای یه کاربر حرفه ای مقدور نیست.
خوشحالم در این موضوع اتفاق نظر داریم.نوشته اصلی توسط sallysatالبته من هم در این مورد ابراز ناخرسندی کردم چون تقریبا میشه گفت ضد حتی حقوق بشره
اون بشری که ممکنه چند سال روی یه نرم افزار کار کنه و در نهایت حاصل دسترنجش به سادگی به تاراج بره مسلما هیچ مذهب و هیچ قانونی این رو درست نمیدونه.
من که اصلا همچین قصدی نداشتم و به نظرم هم این طور ننوشته باشم. حالا بهتر خوانندگان در این مورد قضاوت کنند.نوشته اصلی توسط sallysatدر پایان نتیجه گیری کلی من از صحبت های شما این بود که برای اکثر موارد قصد دارین با فرا افکنی و پاسخ بی ارتباط خواننده حداقل عمومی رو گیج کنید ولی دوست عزیز این روش یه کاربر حرفه ای که دوست داره بحثش به نتیجه برسه نیست.
آقا این حرفها چی هست. ما که قصد جدل نداریم میآخواهیم در یک محیط دوستانه بحث علمی بکنیم. من در ابتدا که پست دادم برگشتم یه نگاهی انداختم احساس کردم که لحنم مناسب یک صحبت علمی نبوده (در واقع این یادآوری یک دوست خوب در کانال IRC بود) بعد برگشتم و لحن را تصحیح کردم هیچ منتی هم وجود نداره.نوشته اصلی توسط sallysatراستش اگه شما من رو (به قول یکی از بچه ها) نابود هم کنی من ناراحت نمیشم اما بشرط اینکه حداقل چند کلمه به معلوماتم اضافه بشه
من هم آرزوی موفقیت برای شما دارم و منتظر جواب هستم!من دوست دارم آزاد فکر کنم، نرمآافزارآ و سختآافزارهای آزاد را به کار ببرم و اگر توانستم نرمآافزار، سختآافزار و محتوای آزاد درست کنم!
دیدگاه
-
پاسخ : نرم افزاری برای برنامه نویسی AVR به زبان c
سلام .از همه دوستان ممنونم بحث خیلی تخصصی شده ولی من به عنوان یه مبتدی با کدویژن اصلا راحت نیستم .یه برنامه را سه بار نوشتم داخل سه فایل متفاوت با سورس متفاوت دوبار خطا گرفت هر دو بار هم خطاهاش متفاوت بودند ولی بار سوم اصلا خطا نگرفت و کامپایل شد نمیدونم ایراد از چیه ؟ولی حالا بعد از این همه بحث بالا خره چی پیشنهاد می کنیدکدویژن یا avrgcc?"هنگامی که دری از خوشبختی به روی ما بسته میشود ، دری دیگر باز می شود ولی ما اغلب چنان به دربسته چشم می دوزیم که درهای باز را نمی بینیم." هلن کلر
دیدگاه
-
پاسخ : نرم افزاری برای برنامه نویسی AVR به زبان c
سلام.
گفتم که سوییچ از gcc به کدویژن می تونه براتون مشکل باشه.
در مورد کدویژن به نظر من بهترین نسخه 1.25.9 است که دوستان لینک دانلودش را در قسمت دانلود نرم افزارهای تخصصی گذاشته اند. شما از این نسخه استفاده کن اگه مشکلی داشت دوباره بحث را ادامه بدیم.
موفق باشید.
دیدگاه
-
پاسخ : نرم افزاری برای برنامه نویسی AVR به زبان c
با سلام خدمت شما دوست عزیز
حرفتون کاملا صحیحه ولی هیچ بحثی توش نیست اما مواردی هست که در ادامه توضیح میدم.نوشته اصلی توسط manianخوب من هم همین رو میآگم اگر شما با اسمبلی کد بزنی چون هوش انسان پشت سرشه معمولا خروجی خیلی تولید میآشه. در جاآهایی که سرعت خیلی مهمه (مثل همون USB که مثال زدم) قسمت حیاتی باید حتما به صورت اسمبلی نوشته بشه چون کامپایلر از پسش بر نمیآآید. ولی خوب میآتوان قسمتآهای دیگر را که به قول معروف time-critical نیستند را به زبان c و یا زبانآهای دیگر نوشت.
من راستش کارم با میکرو جنبه الکترونیک داره که اون هم به کمک عقل ناقصم با همون اسمبلی از پسش برمیام توی زمینه هایی که زیاد گیر دارم بیشتر به کتابخونه bascom متوسل میشم کتابخونش تقریبا کامل و به زبان اسمبلی هستش (چون خودتون میتونید تصور کنید که اگه قرار بود به زبون بیسیک بنویسن چی میشد) نویسندگان این کتابخونه ها هم یک شخص یا فرد خاص نیست بلکه تقریبا هر کتابخونه یه نویسنده خاص داره و در ابتدای کتابخونه نام و webpage شخصی اون فرد به همراه ایمیلش موجوده از نظر خانایی به نظر من هیچ مشکلی (نه تنها برای من بلکه برای هر کسی که زمینه کار با اسمبلی رو هم داشته باشه) وجود نداره (تقریبا توضیحات متن برنامه ها کامله)نوشته اصلی توسط manianبه هر حال از هر فردی بپرسیم براش مشخصه که یک کد اسمبلی نسبت به یک کد C کار باهاش سختآتره حداقل من که اینآ طوری هستم یعنی یک پروژه به من بدهند که ۱۰۰۰ خط C باشد و بگویند که تغییرش بده در مقایسه با یک کد اسمبلی خیلی کوچکتر به مراتب راحتآترم با سی کار کنم.
علاوه بر این شما چرا کدآهای میکرو رو خیلی کوچک در نظر میآگیری. مثلا اگر قرار باشه که یک embedded-webserver توی AVR درست کنید خوب مشخصه حجم کد خیلی بزرگ میآشه! این حجم از کد به زبان اسمبلی برای من غیر قابل تصوره. در ضمن فرض کنیم که این کد را یک شیر مردی با اسمبلی درست کرد، حالا واقعا اگر قرار باشد کسی تغییری در این دهاآهزار خط اسمبلی بدهد به نظرتون کار سادهآای میآآید؟
از طرفی من با c هم هیچ مشکلی ندارم بلکه برعکس c , c++, c# زبونهای مورد علاقه من هستن ولی بین برنامه نویسی سخت افزاری و برنامه نویسی کامپیوتر تفاوت خیلی زیادی قائلم .شاید من اشتباه میکنم ولی چند ساله که همین اشتباه رو انجام میدم و ناراضی نیستم.
از نظر طولانی بودن کد هم راستش من برای هر divice که باهاش کار میکنم برای خودم کتابخونه دارم.که برای بکار بردن تو یه پروژه جدید ممکنه در حد فقط چند خط تغییرات لازم باشه.
راستش من کتابخونه ای که روی سیستم دارم کتابخونه ایست که به همراه پکیج winavr به تاریخ 21/12/2007 ارائه شده در مورد کتابخونه ای که معرفی کردید به موقع بحث و مقایسه با کتابخونه کدویژن خواهیم کرد.نوشته اصلی توسط manianاصلا کامپایلر گنو (gcc معروف) کلا آزاده منطقی نیست که قسمتی از آن بسته باشد. این avr-libc هم سورسش اینجا است (با یه JFGI میآتوانستید پیداش کنید): http://download.savannah.gnu.org/releases/avr-libc/
خوب الحمدالله این مشکل شما که حل شد.
دوست من من اگه وجود نداشت که خدای نکرده مریض نیستم بیام راجع بهش بحث الکینوشته اصلی توسط manianخوب دیدید که این مشکل که شما در نظر گرفتهآ بودید وجود ندارد.
راه بندازم مطمئن باش اگه تست نکرده بودم به شما نمیگفتم تست کنید از طرفی من نه با سازندگان کد ویژن فامیلم نه با gcc نه کدویژن به طور کلی به درد من میخوره نه gcc طوری که با شروع اولین بحث ابتدا معایب کلی کدویژن رو گفتم و حاضرم در مورد هر کدومش توضیح بدم
این نمونه کدیست که من دقیقا مشابه شما نوشتم.
خوب این هم خروجی dissassembly که دقیقا از تو command کپی کردم چون عکسش رو هم میخوام بذارم.کد:#include <avr/io.h> int main(void) { PORTB |=(1<<PB5); while(1); return(0); }
کد: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 نیست؟
در مرتبه اول این یک فایل اسمبلی نیست چرا که یه فایل اسمبلی استاندارد رو با avrasm32 که ساختار command-line داره و شما هم عشق command-line هستین به راحتی اسمبل میشه (مثل اسمبلی خروجی کدویژن) و کد هگز و سایر فایل های مربوطه از جمله LST رو تولید میکنه در ثانی اگر کد هگز مربوط به هر دستور و شمارنده بایتها که پشت دستورات گذاشته بردارین تازه میشه یک فایل اسمبلی avr خوب الان لطفا به اون برنامه بالا یه نگاه بندازید و خروجی کامپایلر رو هم مشاهده کنید نوشته پروگرم= 172 درسته ؟ خوب 172 بایت از حافظه کد ما اشغال شده یعنی دقیقا 86 دستور خوب حالا تعداد دستوراتی رو که تو main برامون گذاشته میشمریم میشه 12 دستور خوب بقیش کو؟نوشته اصلی توسط manianمن که دقیق نفهمیدم مشکل شما چی هست شما گفتید که gcc خروجی lst و اسمبلی تولید نمیآکنه ولی من گفتم که با avr-objdump درست میآکنه. شما به پروژهآای که من گفتم نگاه کردی؟ توی اون هم lst هست و هم اسمبلی ؟ بازهم شما یک توضیح بیشتر بده تا من بفهمم.
مسلمه که هر کامپایلر باید یه سری 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 ذخیره بشه این مساله در پیچیدگی زمانی هم نقش مهمی رو بازی میکنه)
و در درجه سوم حجم کد خروجیست
خوب باشه پس شما 1 دفعه هم که شده اون هدر io.h رو از اول برنامت وردار بعد ببین این رو چرا اضافه میکردی؟ایا سازنده گذاشت یا خودتون اضافه نمودید؟نوشته اصلی توسط manianخوب این به نظرم اصولی نیست که شما بیای از ابتدا تمام تعرفآها رو بیاری چرا سازندگاه خودشون این رو نگذاشتند؟
دوست عزیزم درسته به بحث ما ارتباط نداره ولی مگه شما از کدوم linux استفاده میکنی همونطور که خودت بهتر از من میدونی سیستم عامل های بلادرنگ (real time) رو با پوسته گرافیکی نمیسازند و معمولا زیاد شاخ و برگ بهش نمیدن و لازمه real time بودن هم تک پردازشی بودن یه سیستم عاملهنوشته اصلی توسط manianعلاوه بر این بر خلاف شما به نظرم کاربران جدی و حرفهآای در اکثر مواقع از لینوکس استفاده آمیآکنند. (شما امکان بلادرنگ realtime را در نظر بگیرید آیا این امکان در ویندوز وجود داره؟ این نیاز برای یک کاربر حرفهآای در ویندوز وجود نداره!)
مسلما اکثر برنامه نویسان در این مورد اتفاق نظر دارند.نوشته اصلی توسط manianخوشحالم در این موضوع اتفاق نظر داریم.
من معذرت میخوام حتما شما درست میفرمایید.نوشته اصلی توسط manianمن که اصلا همچین قصدی نداشتم و به نظرم هم این طور ننوشته باشم. حالا بهتر خوانندگان در این مورد قضاوت کنند.
همه چیز تو مثالی که آوردم مشخصه.نوشته اصلی توسط manian
علاوه بر این من فکر نکنم کامپایلر کدویژن اگر دسترسی بیتی نباشه بتونه اون رو به عنوان مثال با SBI جایگزین کنه. البته این باید تست شود.
دوست عزیزم من که از طرز نوشتنم مشخص بود که شوخی میکنم من هم با کسی دعوا ندارم فقط میخوام از اطلاعاتمون رو با هم share کنیم.نوشته اصلی توسط manianآقا این حرفها چی هست. ما که قصد جدل نداریم میآخواهیم در یک محیط دوستانه بحث علمی بکنیم
کانال IRC دیگه چیه؟نوشته اصلی توسط manian
در واقع این یادآوری یک دوست خوب در کانال IRC بود
در پایان باید بگم شما هیچ وقت نمیتونی یک کامپایلر رو به طور کلی بدردنخور عنوان کنی من تنها هدفم این بود که شاید شما دوست عزیز در مواضعتون نسبت به کدویژن تجدید نظر کنید بنده حقیر کوچیک شما هستم و مسلما هنوز زمان زیاد لازم دارم تا به تجربه شما برسم ولی "باید باور داشته باشیم که میتوانیم".
بنده طی دو سه روز آینده یه سفر دارم ولی در صورت تمایل تا به نتیجه رسیدن بحث در ادامه همراه خواهم بود.
Qt - A cross-platform application and UI framework
با کامپایلرهای قدرتمند GCC در Linux و MinGw در Windows
دیدگاه








دیدگاه