ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





کاربران برچسب زده شده

نمایش نتایج: از 1 به 1 از 1
  1. #1
    2012/07/01
    میانه
    396
    17

    کاربرد دقیق 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
    خواستن توانستن است !
نمایش نتایج: از 1 به 1 از 1

موضوعات مشابه

  1. کمک در انتخاب hwstack , $swstack , $framesize
    توسط alimohammad_sh در انجمن میکروکنترلرهای AVR
    پاسخ: 1
    آخرين نوشته: 2018/11/10, 00:50
  2. کمک در انتخاب hwstack , $swstack , $framesize ( هرکي وارده کمک کنه)
    توسط کوروش22 در انجمن میکروکنترلرهای AVR
    پاسخ: 9
    آخرين نوشته: 2014/08/22, 12:32
  3. فرق بين $hwstack با $swstack
    توسط mostafa6369 در انجمن میکروکنترلرهای AVR
    پاسخ: 1
    آخرين نوشته: 2013/06/06, 17:46
  4. swstack , hwstack و framesize چیست؟
    توسط h.parvin.22 در انجمن میکروکنترلرهای AVR
    پاسخ: 6
    آخرين نوشته: 2011/09/10, 17:29
  5. معنی دقیق $ swstack = 128 $hwstack = 128 $framesize = 1024چیه ؟
    توسط Eng.Ramezani در انجمن میکروکنترلرهای AVR
    پاسخ: 17
    آخرين نوشته: 2011/05/16, 21:50

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •