با سلام ،
دوست عزیز شما در حال استفاده از ورژنی قدیمی از اینترنت اکسپلورر هستید ، برای اینکه مشکلات ناشی از نمایش را نداشته باشید ، لطفا اقدام به دریافت مرورگری مناسب کرده و یا از ورژن قدیمی ما استفاده نمایید.


امتیاز موضوع:
  • 4 رأی - میانگین امتیازات: 5
  • 1
  • 2
  • 3
  • 4
  • 5
سوال فرق بین کد Absolute و Relocatable در MPLAB IDE
#1
Wink 
دو تا سوال برام پیش اومده:

1) MPASM جزئی از همون MPLAB IDE هستش دیگه، فرقی خاصی ندارن که؟

2) این عکسه . . .



İmage


توی (Project Wizard) چرا Relocatable را که انتخاب میکنم و بعد Build All را که میزنم خطا میده ولی Absolute را که انتخاب میکنم این مشکل بوجود نمیاد؟
پاسخ
#2


1)

MPASM کامپایلر هستش و فقط کارش اینه که کدهای نوشته شده به زبان اسمبلی رو به Hex تبدیل میکنه. ( MPASM رو میشه بصورت مجزا و بدون نصب MPLAB IDE استفاده کرد )

ولی MPLAB IDE یه محیطی هستش برای توسعه نرم افزار. این محیط هم ویراشگر برای نوشتن کد داره، هم کدهای نوشته شده رو کامپایل میکنه و هم یه شبیه ساز برای تست برنامه های نوشته شده داره.



2)

کدهای نوشته شده در اسمبلی هم میتونه یه برنامه کامل و مجزا باشه ( Absolute ) و هم میتونه یه زیر برنامه باشه ( Relocatable ) که به تنهایی به کار نمیاد و باید مثل کتابخونه در برنامه اصلی تعریف بشه.
برنامه هایی که به صورت Absolute نوشته میشن رو نمیشه بصورت برنامه Relocatable کامپایل کرد و برای همین هستش که پیغام خطا میده.


امیدوارم تونسته باشم منظورمو برسونم.

در پست بعدی یه مثال مینویسم تا بهتر متوجه بشین.
support.wle.ir
پاسخ
#3
اول یه برنامه معمولی مینویسم.

مثلا یه برنامه میخوام بنویسم که LED های وصل شده به PORTB رو تو میکروی PIC16F628A به فاصله چند میلی ثانیه روشن و خاموش کنه. ( برای ایجاد تاخیر از حلقه استفاده میکنم )



کد:
LIST P=16F628A    
INCLUDE "P16F628A.INC"

ORG 0x00

CNTR_1 EQU 0x20
CNTR_2 EQU 0x21

CLRF PORTB
BSF STATUS, 5
CLRF TRISB
BCF STATUS, 5

START
COMF PORTB, 1
CALL DELAY
GOTO START

DELAY
MOVLW 0xFF
MOVWF CNTR_1

LOOP1
MOVLW 0xFF
MOVWF CNTR_2

LOOP2
DECFSZ CNTR_2, 1
GOTO LOOP2
DECFSZ CNTR_1, 1
GOTO LOOP1
RETURN

END



حالا اگه قرار باشه ما همش برنامه هایی رو بنویسیم که داخلشون تاخیر باشه باید اون قسمت Delay رو بنویسیم. بجای اینکار اون قسمت Delay رو توی یه زیربرنامه مجزا بصورت Relocatable مینویسیم و داخل پروژه اصلی زیربرنامه Delay نوشته شده در Relocatable رو فراخوانی میکنیم.

البته این فقط یه مثال ساده هستش و شاید بگین زیاد بدرد نمیخوره ولی میشه این مثال رو زد:

شما توی یک برنامه Relocatable همه عملیات ریاضی ( جمع، تفریق، ضرب، تقسیم، به توان رسوندن و ... ) رو به صورت زیربرنامه های جدا از هم مینویسین و از این به بعد اگر شما همش بخوایین برنامه هایی بنویسین که اعمال ریاضی توشون لازمه کافیه این فایل رو به پروژه اضافه کنین و فقط زیربرنامه هایی که احتیاج دارین رو فراخوانی کنین.
support.wle.ir
پاسخ
#4


حالا همین برنامه رو میخواییم بصورت Absolute و Relocatable بنویسیم

1) اول زیر برنامه Relocatable رو مینویسیم:



کد:
GLOBAL CNTR_1, CNTR_2, DELAY

UDATA
CNTR_1 RES 1
CNTR_2 RES 1


DELAY CODE

DELAY
MOVLW 0xFF
MOVWF CNTR_1

LOOP1
MOVLW 0xFF
MOVWF CNTR_2

LOOP2
DECFSZ CNTR_2, 1
GOTO LOOP2
DECFSZ CNTR_1, 1
GOTO LOOP1
RETURN

END


همون طور که میبینین تو برنامه فقط متغییر ها ( این متغییرها چون باید در برنامه اصلی هم استفاده بشه، بصورت Global تعریف شده ) و زیر برنامه نوشته شده.

ضمنا ما تو این مثال فقط یه زیربرنامه نوشتیم,

میشه با اضافه کردن X CODE کلی زیربرنامه نوشت. بجای X اسم زیربرنامه تون رو بنویسین.



2) حالا برنامه Absolute رو مینویسیم:



کد:
LIST P=16F628A
INCLUDE "P16F628A.INC"

EXTERN CNTR_1, CNTR_2, DELAY

ORG 0x00

CLRF PORTB
BSF STATUS, 5
CLRF TRISB
BCF STATUS, 5

START

COMF PORTB, 1
CALL DELAY
GOTO START

END


در برنامه اصلی متغبرها و زیربرنامه هایی که توی Relocatable تعریف شده و ما میخواییم تو برناممون استفاده کنیم رو Extern میکنیم.


حالا میتونین یه پروژه جدید ایجاد کنین و این دو فایل رو بهش Add کنین. بعد از زدن Build All برنامه کامپایل میشه.

به همین سادگی Bu



اگه فقط بخوایین برنامه Relocatable بنویسین اون موقع در همون پنجره ای که عکسش رو گذاشته بودین باید Relocatable رو انتخاب کنین.

support.wle.ir
پاسخ
#5



Angel

ممنون


مواردی را که گفتین امتحان کردم... Big Grin



پاسخ
#6


امیدوارم که مفید واقع شده. موفق باشید Df 




support.wle.ir
پاسخ
مشترک شدن در این موضوع


پرش به انجمن:

کاربرانِ درحال بازدید از این موضوع: 1 مهمان

انتخاب پوسته :

دسترسی سریع
درباره ما
انجمن سرزمین الکترونیک در 20 شهریور 91 تاسیس شده ، که همیشه سعی کرده با ظاهری متفاوت و سرعتی خوب رضایت کاربران را جلب کند ، امیدواریم توانسته باشیم گامی کوچک در پیشرفت فناوری در ایران برداشته باشیم...
نیرو گرفته از MyBB 1.8.6 با فارسی سازی مای بی بی ایران - طراحی شده در : ملت دیزاین
© تمامی حقوق برای انجمن سرزمین الکترونیک محفوظ می باشد .

پوسته‌ی انجمن: