سلام دوستان
چندتا سوال فوق تخصصی در مورد برنامه نویسی وابسته به سخت افزار avr داشتم.
1. متاسفانه کاری پیش اومده که نمیتونم به صورت ساخت یافته برنامه بنویسم و مجبورم از دستورات پرش استفاده کنم. میخوام تا جایی که میشه اسمبلی نباشه و از goto استفاده کنم ( واسه قابلیت حمل برنامه ). میدونیم که goto به یک برچسب ( label ) میپره.حالا سوال اینه که به جای اسم برچسب میشه آدرس قرار داد ؟؟؟؟؟؟
یعنی مثلا goto 0x12fc;
یا اشاره گر مثل
int *ptr
ptr = 0x12fc
goto ptr
2. وقتی روتین وقفه اجرا میشه، آدرس برنامه در حال اجرا، که در sp هست در کدوم پشته ذخیره میشه؟ در هنگام پرش به توابع که در hardware stack ذخیره میشه چون با دستور CALL اسمبلی میپره به تابع. حالا در زمان وقفه هم به همین صورته یا در data stack ذخیره میشه؟ گفتم شاید وقفه ها با توابع عادی فرق کنن.
با خود c میشه پشته رو تغییر داد؟
هدف از سوالا اینه که میخوام در حال اجرای یک برنام عادی، وقتی وقفه اجرا شد، در داخل روتین وقفه، ادرس برنامه اصلی رو از پشته بردارم و آدرس دلخواه خودم رو جای آدرس قبلی ذخیره کنم تا با تموم شدن روتین وقفه از جای جدید ادامه بده برنامه رو.
با خود c میشه پشته رو تغییر داد؟
خلاصه اینکه این تغییر ادرسها حتما باید با اسمبلی باشه یا جوری میشه با goto انجام داد.