اطلاعیه

Collapse
No announcement yet.

کاربرد دقیق swstack ، $hwstack$ و framesize$ در زبان بسکام چیست ؟

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

    کاربرد دقیق swstack ، $hwstack$ و framesize$ در زبان بسکام چیست ؟

    سلام
    شاید براتون پیش اومده باشه که در برنامه ها یا مثال های اموزشی این سه کودو swstack ، $hwstack$ و framesize$ دیده باشن و ندونسته باشین که چه کدی هستش و به چه دردی میخوره ؟

    توضیحاتی راجع به کاربرد دقیق swstack ، $hwstack$ و framesize$ در زبان بسکام

    هر دستور برای اجرا نیاز به مقداری فضا در ram و یا sram میکروکنترلر نیاز دارد . به عنوان مثال در دستوراتی مانند call یا فانکشن ها و ...
    برای این کار باید در ابتدای برنامه مقادیر و ادرس هایی در رم و اس رم ( پشته ) ذخیره شوند تا میکروکنترلر مسیر اصلی اجرای برنامه را فراموش ننمایید ،
    که بعد از اجرای دستور call به مسیر اصلی برنامه باز گردد و روال عادی برنامه را طی کند .
    این امر ، امری اجتناب ناپذیری میباشد و به صورت خودکار انجام میگیرد .
    اگر در دستورات از دستورات ه call یا go آ‌و ... استفاده نکنید خود میکروکنترلر برای اجرا دستورات مداوم به بخش ها و آدرس ها مختلف سرکشی مینماید .
    میکروکنترلر بعد از اجرا پروسه مورد نظر نیاز دارد به مسیر اصلی برگردد و ادرس قبلی اجرا را داشته باشد .
    هنگامی که در برنامه مقادیر را تعیین میکنیم یا متغیر را میسازیم در حین اجرای برنامه به یک فضای موقتی برای ادرس ها نیازمندیم .
    فضای موقتی توسط دستوراتی که در ادامه اشاره میشود تعیین میگردد . حال ممکن است فضای مورد نیاز به صورت پیش فرض برای برنامه شما کافی نباشد و باید ان را تعیین نمایید . در بعضی موارد ان را افزایش میدهیم که به کمک دستورات زیر قابل اجرا میباشد :

    hwstack$ : همان فضای سخت افزار پشته میباشد که توسط شما در برنامه تعیین میشود و مقدار فضای مورد نیاز برای پشته را در رم میکروکنترلر تعیین مینماید .
    به عبارتی اگر در برنامه های حجیم میکروکنترلر شما اینتراپت دریافت نمایید یا مثلا با دستور GOSUB یا call به یک لیبل خاصی پرش نماید ، در ابتدا برنامه محلی آدرسی فعلی برنامه را ، که در حال اجرا ان برنامه میباشد را در پشته ذخیره مینماد ، برای این کار ۲ بایت در نظر گرفته میشود . وقتی شما از دستور RETURN استفاده میکنید و میکروکنترلر باید به محل قبلی اجرای برنامه رجوع نمایید آدرس محل قبلی را دوباره از پشته فراخوانی مینماید و به محل قبلی باز میگردد . مقدار پیشفرض hwstack$ برابر با ۳۲ میباشد . اگر در برنامه ای متوجه شدید که میکروکنترلر بعد از RETURN به محل قبلی خود باز نمیگردد باید این مقدار را زیاد نمایید .
    بیشتر کدها در حین اجرا از پشته استفاده مینمایند ، مقدار زیاد hwstack$ توسط میکروکنترلر مورد استفاده قرار میگیرد .

    swstack$ : این مقدار برای مقدار دهی نرم افزاری فضای پشته میباشد که وظیفه آن همانند hwstack$ میباشد اما به طور نرم افزاری مقدار فضا پشته را تعیین مینماید . مقدار پیش فرض swstack$ برابر با 10 میباشد .

    framesize$ : فضایی برای اعداد و حروف در روتین و اجرا برنامه میباشد . به عنوان مثال اگر شما در برنامه از دستور print استفاده نمایید ،
    مقداری که در پرینت برای نمایش در نظر گرفته میشود ، ابتدا باید به باینری تبدیل شود سپس ارسال شود . برای تبدیل به یک بافر نیاز میباشد که مقدار ان توسط framesize$ تعیین میشود . حداقل مقدار framesize$ برابر با 24 و مقدار پیش فرض framesize$ برابر با ۴۰ میباشد .

    نکته :
    برای دانستن مقدار فضای لازم برای اجرا برنامه ، در صورت عمل نکردن صحیح میکرو کنترلر یک راه حل بسیار عالی وجود دارد ، با استفاده از کتابخانه "stackcheck.lib" میتوانید به مقدار مورد نیاز برای فضای پشته و ... دسترسی پیدا نمایید . برای این کار میتوانید از دستور _hw_lowest استفاده نمایید .
    در حالت پیش فرض مقدار برگشتی از این دستور &HFFFF میباشد . که در حین اجرای برنامه مقدار برگشتی توسط دستور _hw_lowest با مقدار &HFFFF مقایسه میشود ، اگر مقدار کمتر باشد باید مقدار را افزایش میدهد .
    اگر میکروکنترلر به مقدار فضای نرم افزاری پشته بیشتر نیاز داشته باشد مقدار فضای مورد نیاز برای پشته نرم افزاری را میتوان توسط دستور _sw_lowest بدست اورد و برای مقدار مورد نیاز برای فرم سایز هم میتوان از دستور _fw_highest استفاده نمود .

    نقل از :
    http://micro-avr.blogfa.com
    خواستن توانستن است !

    #2
    پاسخ : کاربرد دقیق swstack ، $hwstack$ و framesize$ در زبان بسکام چیست ؟

    نوشته اصلی توسط bstar2 نمایش پست ها
    نکته :
    برای دانستن مقدار فضای لازم برای اجرا برنامه ، در صورت عمل نکردن صحیح میکرو کنترلر یک راه حل بسیار عالی وجود دارد ، با استفاده از کتابخانه "stackcheck.lib" میتوانید به مقدار مورد نیاز برای فضای پشته و ... دسترسی پیدا نمایید . برای این کار میتوانید از دستور _hw_lowest استفاده نمایید .
    در حالت پیش فرض مقدار برگشتی از این دستور &HFFFF میباشد . که در حین اجرای برنامه مقدار برگشتی توسط دستور _hw_lowest با مقدار &HFFFF مقایسه میشود ، اگر مقدار کمتر باشد باید مقدار را افزایش میدهد .
    اگر میکروکنترلر به مقدار فضای نرم افزاری پشته بیشتر نیاز داشته باشد مقدار فضای مورد نیاز برای پشته نرم افزاری را میتوان توسط دستور _sw_lowest بدست اورد و برای مقدار مورد نیاز برای فرم سایز هم میتوان از دستور _fw_highest استفاده نمود .

    نقل از :
    http://micro-avr.blogfa.com
    سلام دوستان
    درمورد این قسمت و کتابخانه کتابخانه "stackcheck.lib و دستور hw_lowest کسی توضیحی داره؟ منم برنامه ام اعداد و حروف رو در روتین برنامه زیاد استفاده کردم میکرو هنگ میکنه مطمعنم از اینه و نیاز به تنظیم پشته داره ولی نمدونم چه مقدار درست قرار بدم
    در جهان هرگز مشو مدیون احساس کسی - تا نباشد رایگان مهرت گروگان کسی
    گوهر خود را نزن بر سنگ هر ناقابلی - صبر کن پیدا شود گوهر شناس قابلی

    دیدگاه

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