سلام
به نظرم اومد برای دوستانی که از کامپایلر های CodeVision یا Bascom استفاده میکنند در مورد RAM و فضاهایی که کامپایلر برای اون در نظر میگیره و همچنین اهمیت تنظیم مقادیر Hw Stack و Soft Stack (Data Stack) کمی صحبت کنیم
در نرم افزار CodeVision فضای RAM به 6 ناحیه تقسیم میشه
1-32*8 Working register این رجیسترها همان R0, R1, R15, R22, R23, R24, R25, R26, R27, R28, R29, R30,R31 خودمونن،ممکنه از R2 تا R15 برای ذخیره متغییرهای بیتی محلی و عمومی استفاده بشه.
از R16 تا R21 برای تعریف متغییرهای int و char محلی استفاده میشه
2-I/O Registers که اعم از رجیستر های پورت سریال، تایمرها و غیره هستند
3- Data Stack برای تعریف متغییر های محلی، ارسال پارامتر به توابع و ذخیره مقادیر R0, R1, R15, R22, R23, R24, R25, R26, R27, R28, R29, R30,R31 استفاده میشه
4- Global Variables که برای تعریف متغییرهای سراسری و عمومی استفاده میشه
5- Hardware Stack که برای ذخیره آدرس برگشت از توابع ( Return ) استفاده میشه
6- Heap که برای تخصیص حافظه بوسیله توابع malloc,calloc,realloc و free استفاده میشه
javascript:void(0);
چند نکته تحربی :
1- ترجیحا پارامترها رو از نوع اشاره گرها تعریف کنید تا در مصرف حافظه صرفه جویی کنید
2- در صورت امکان از متغییرهای سراسری بجای متغییر های محلی استفاده کنید
3- مقدار Hardware Stack رو متناسب با عمق فراخوانیها و Data Stack رو متناسب با جمع متغییرهای محلی در فراخوانیهای تو در تو تعریف کنید. عدم تعریف درست یکی از دو مقدار Harsware Stack یا Data Stack میتونه منجر به عدم کارکرد صحیح برنامه شما در بعضی قسمتها یا در تمامی موارد بشه.
به نظرم اومد برای دوستانی که از کامپایلر های CodeVision یا Bascom استفاده میکنند در مورد RAM و فضاهایی که کامپایلر برای اون در نظر میگیره و همچنین اهمیت تنظیم مقادیر Hw Stack و Soft Stack (Data Stack) کمی صحبت کنیم
در نرم افزار CodeVision فضای RAM به 6 ناحیه تقسیم میشه
1-32*8 Working register این رجیسترها همان R0, R1, R15, R22, R23, R24, R25, R26, R27, R28, R29, R30,R31 خودمونن،ممکنه از R2 تا R15 برای ذخیره متغییرهای بیتی محلی و عمومی استفاده بشه.
از R16 تا R21 برای تعریف متغییرهای int و char محلی استفاده میشه
2-I/O Registers که اعم از رجیستر های پورت سریال، تایمرها و غیره هستند
3- Data Stack برای تعریف متغییر های محلی، ارسال پارامتر به توابع و ذخیره مقادیر R0, R1, R15, R22, R23, R24, R25, R26, R27, R28, R29, R30,R31 استفاده میشه
4- Global Variables که برای تعریف متغییرهای سراسری و عمومی استفاده میشه
5- Hardware Stack که برای ذخیره آدرس برگشت از توابع ( Return ) استفاده میشه
6- Heap که برای تخصیص حافظه بوسیله توابع malloc,calloc,realloc و free استفاده میشه
javascript:void(0);
چند نکته تحربی :
1- ترجیحا پارامترها رو از نوع اشاره گرها تعریف کنید تا در مصرف حافظه صرفه جویی کنید
2- در صورت امکان از متغییرهای سراسری بجای متغییر های محلی استفاده کنید
3- مقدار Hardware Stack رو متناسب با عمق فراخوانیها و Data Stack رو متناسب با جمع متغییرهای محلی در فراخوانیهای تو در تو تعریف کنید. عدم تعریف درست یکی از دو مقدار Harsware Stack یا Data Stack میتونه منجر به عدم کارکرد صحیح برنامه شما در بعضی قسمتها یا در تمامی موارد بشه.
دیدگاه