آقای مدیر شما قبلا گفته بودید که به دلیل این که codevision خیلی خوب جواب کارهاتون رو نمی داد به winavr رو آواردید.
اگه کسی مثل من که نسبتا با کدویژن کار کرده بخواد بره سراغ winavr خیلی دچار مشکل میشه . اصلل winavr یه چیز دیگه ست.
اگه میشه بگید که چه طور تونستید مشکلات رو حل کنید و به winavr مسلط بشید.
مقدار زیادی help و PDF توش هست اما همین که زیده باعث میشه آدم سراغشون نره. اگه میشه راهنمایی های لازم رو بگید
ممنون
آره - منم می خوام برم WINAVR ولی اصلا ازش سر در نمی آرم :(
2 ماه و نیم پیش من یه پروژه رو شروع کردم و اون موقع چون می دونستم که winavr از codevision بهتره میخواستم از اول winavr کار کنم اما نشد. حالا بعد از 2 ماه ، پیش رفتن پروژه نارسایی های زیادی تو کدویژن پیدا شد و یه جورایی دیگه دلم نمیاد روش سرمایه گذاری کنم.
از یه چند روز پیش به طور جدی روش روی winavr کار کردم و چند تا مشکل رو دیدم که اینجا بیان میکنم.
1- برای نوشتن چند خط اسمبلی تو کدویژن به این ترتیب عمل میکنیم که اول مینویسیم #asm و در انتها مینویسیم #endasm . این روش رو تو win avr نتونستم پیدا کنم که چطور چند خط اسمبلی رو پشت سر هم بنویسم.
2- در کدویژن بعد از کامپایل کردن ، فایل اسمبلی معادل در خروجی ظاهر میشه ، اما تو winavr این طور نیست و من نفهمیدم چه طور میشه این کار رو کرد. با دیدین فایل اسمبلی میشه به کیفیت کار کامپایلر پی برد و من از فایل اسمبلی در خروجی کدوِیژن بود که به نارسایی هاش پی بردم.
3-ارتباط میان اسمبلی و C تو برنامه من خیلی مهمه . اصلا زبان C برای این اومده که بشه براحتی توش اسمبلی نوشت. و C یه زبان سطح میانیه نه سطح بالا. تو کدویژن من متغیر های گلوبال رو با یه @ تعیین مکان میکردم و با همین تعیین مکان تو اسمبلی استفاده میکردم. یه راه دیگه تو کدویژن این بود که اگه اسم متغیر col بود تو اسمبلی با _col قابل شناسایی بود(یه _ قبلش). مثلا lds r16 ,_col . تو winavr من این کار رو نفهمیدم چه کنم. استفاده از اسمبلی بیشتر در روتین های وقفه بود. و کلا جاهایی که احتیاج به سرعت بود. مسئله تعیین مکان به نظر من خیلی مهمه.
با تشکر اگه کسی میتونه ، کمک کنه.
برای اسمبلی نوشتن توی Winavr امکانات بیشتری داری می تونی متغیر بهش ارسال کنی در یافت کنی و یا حتی بعضی از رجیستر ها رو رزرو کنی تا خود کمپایلر ازش استفاده نکنه اینو ببین
کد:
asm volatile (
"in r26,0 ;Read PINF" "\n\t"
"in r27,0x19 ;Read PINA" "\n\t"
"LDI r28,8 ;FOR I=1 TO 4" "\n\t"
"1: LSL R26 ;C <- Rd(7)""\n\t"
"ROR %A0 ;RD(7) <- C" "\n\t"
"DEC r28" "\n\t"
"BRNE 1b ;next ROR" "\n\t"
"LDI r28,8 ;FOR I=1 TO 4" "\n\t"
"2: LSL R27 ;C <- Rd(7)""\n\t"
"ROR %B0 ;RD(7) <- C" "\n\t"
"DEC r28" "\n\t"
"BRNE 2b ;next ROR" "\n\t"
: "=r" (Res) : :"r28","r26","r27"
);
شما خودت این نکات رو از کجا یاد گرفتی؟ آیا pdf هایی که موقع نصب تو فولدر doc میریزه برای یادگیری کافیه؟ اون pdf ها و help ها خیلی در هم و برهمه. کتابی هست تا دانلود کنم؟
راستی بالاخره فایل اسمبلی رو میتونیم بعد کامپایل داشته باشیم یا نه؟
این ها تو هلپ خودش بود البته یکم گشتم ولی تو هلپش فکر کنم قسمت مثال هاش بود
و اون فیلا اسمبلی هم توی make file باید مشخص کنی که تولید بشه ولی این کارو می کنه
حالا یه سوال: شما الان همه کارهاتون رو با winavr انجام میدید؟ اصلا سراغ کدویژن نمیرید؟ منظورم اینه که شما نکته مثبتی رو تو کدویژن میبینید که تو winavr نباشه؟
یه سوال دیگه: کجای makefile رو باید تغییر بدم تا فایل اسمبلی رو هم بده؟
یه درخواست: اگه ممکنه چند تا از pdf ها که تو پوشه doc هست رو مشخص کن روش وقت بذارم بخونم. اونقدر زیادن که اصلا آدم نمیدونه از کجا شروع کنه. :roll:
من خیلی وقت سراغ الکترونیک نرفتم بیشتر کار وب می کنم کدویژن یکم راحت تره ولی ایرادات زیادی داره
PDF ها رو هم نمی خواد سراغشون بری یادمه یه help توی programfile داشت من از همون جا اینو دیدم یه سری مثال داشت از مثال هاش بهتر می شد سر در آورد الان نصب ندارم وگرنه آدرس دقیق می دادم
و اما makefile اولا با یه برنامه هست حتما با اون تغییر بده دستی کار سختیه و فکر کنم تو قسمت خروجی ها می تونی تعیین کنی چه فایل هایی رو به عنوان خروجی بهت بده
یه FAQ پیدا کردم که به سوالات رایج جواب داده و مثال هم زده. احتمالا منظور شما همینه.
تو برنامه mfile ، تو در قسمت output format سه تا گزینه داره :srec , ihex ,binary. تو هیچ کدوم فایل اسمبلی تو خروجی نمیده :roll:
تو قسمت debug اگه ext cof ... رو تیک بزنی می توین ببریش تو avrstudio اونحا c و assembly رو با هم می تونی ببینی