سلام
تصمیم گرفتم تو این تاپیک هر چیزی از winavr که حسش اومد بنویسم. پراکنده اما مفید.
چگونه با WinAVR یک برنامه BootLoader بنویسیم؟
اولش باید بگم برای نوشتن BootLoader چی لازم داریم :
1. برنامه باید تو فایل hex از آدرس معیینی شروع بشه. یعنی اگه با ponyprog یه فایل hex رو باز کنید می بینید که از آدرس 0000 شروع شده که این اول flash memory هستش. در حالی که برنامه باید در آخر فظای Flash قرار بگیره که تو Mega16 مثلا 0x1c00 هستش.
2. آشنایی با توابع فایل <avr/boot.h> که من خورم هم آشنا نیستم هنوز، ولی تو user guideش یه مثال داره که من از همون استفاده کردم.
3. پریدن به آدرس مورد نظر در فظای فلش که تو برنامه نویسی C کمی قلق داره.
خوب اول این برنامه رو فرظا نوشتیم. این برنامه بعد از پروگرام شدن روی میکرو یه برنامه دیگه که تو آرایه newProg قرار داره رو تو page شماره 0 از فظای فلش میریزه. کار Bootloader هم تقریبا همینه، فقط Bootloader از بیرون اطلاعات رو میگیره که من نخواستم مثال پیچیده بشه.
وقتی این برنامه رو کامپایل می کنید، فایل hex از آدرس 0000 شروع میشه که این بده و ما میخوایم از آدرس 0x1c00 شروع بشه.

حالا باید به WinAVR بگیم که برو تو آدرس 0x1c00 و قبلش رو خالی بذار. پس میریم تو منوی Project/Configuration option/memory settings و یه فیلد جدید به نام .text میسازیم،( نمیدونم اسم قحطی بود؟ولی فقط باید همین اسم باشه، این تعریف شده است) و ok میکنیم و بعد از کامپایل میبینم که برنامه از آدرس مورد نظر تو hex قرار گرفته. پوگرام کنید و حالش رو ببرید.


برنامه ای که تو آرایه newProg ریختم یه چراق چشمک زن روی PORTC هستش. به PORTC چند تا LED بزنید تا نتیجه کار رو ببینید. برای اینکه مطمئن بیشد بعد از شروع چشمک دوباره با پروگرامر فلش میکرو رو Verify کنید که میبینید اررور میده
تصمیم گرفتم تو این تاپیک هر چیزی از winavr که حسش اومد بنویسم. پراکنده اما مفید.
چگونه با WinAVR یک برنامه BootLoader بنویسیم؟
اولش باید بگم برای نوشتن BootLoader چی لازم داریم :
1. برنامه باید تو فایل hex از آدرس معیینی شروع بشه. یعنی اگه با ponyprog یه فایل hex رو باز کنید می بینید که از آدرس 0000 شروع شده که این اول flash memory هستش. در حالی که برنامه باید در آخر فظای Flash قرار بگیره که تو Mega16 مثلا 0x1c00 هستش.
2. آشنایی با توابع فایل <avr/boot.h> که من خورم هم آشنا نیستم هنوز، ولی تو user guideش یه مثال داره که من از همون استفاده کردم.
3. پریدن به آدرس مورد نظر در فظای فلش که تو برنامه نویسی C کمی قلق داره.
خوب اول این برنامه رو فرظا نوشتیم. این برنامه بعد از پروگرام شدن روی میکرو یه برنامه دیگه که تو آرایه newProg قرار داره رو تو page شماره 0 از فظای فلش میریزه. کار Bootloader هم تقریبا همینه، فقط Bootloader از بیرون اطلاعات رو میگیره که من نخواستم مثال پیچیده بشه.
وقتی این برنامه رو کامپایل می کنید، فایل hex از آدرس 0000 شروع میشه که این بده و ما میخوایم از آدرس 0x1c00 شروع بشه.

حالا باید به WinAVR بگیم که برو تو آدرس 0x1c00 و قبلش رو خالی بذار. پس میریم تو منوی Project/Configuration option/memory settings و یه فیلد جدید به نام .text میسازیم،( نمیدونم اسم قحطی بود؟ولی فقط باید همین اسم باشه، این تعریف شده است) و ok میکنیم و بعد از کامپایل میبینم که برنامه از آدرس مورد نظر تو hex قرار گرفته. پوگرام کنید و حالش رو ببرید.


برنامه ای که تو آرایه newProg ریختم یه چراق چشمک زن روی PORTC هستش. به PORTC چند تا LED بزنید تا نتیجه کار رو ببینید. برای اینکه مطمئن بیشد بعد از شروع چشمک دوباره با پروگرامر فلش میکرو رو Verify کنید که میبینید اررور میده

دیدگاه