PDA

View Full Version : كار اين دستور چيه ؟! define FUNC(x) 0x29,x



sharin
یک شنبه 28 اسفند 1390, 17:17 عصر
سلام.

مي خواستم بدونم دستور زير چكار مي كنه ... ؟!


#define HID_UsageMax(x) 0x29,x
توي كتاب ها دنبالش گشتم ، اما يافت نشد !
مي دونم به اين سبك مي شه تابع تعريف كرد و عملكردش رو نوشت ، اما 0x29,x رو نمي تونم درك كنم!
حتي اگر احتمالي ،‌چيزي هم مي ديد ،‌بگيد ، كمك مي كنه ...

پيشاپيش ممنون از جواب هاتون.

بهروز عباسی
یک شنبه 28 اسفند 1390, 19:43 عصر
#define HID_UsageMax(x) 0x29,x
دستور #define مقدار 0x29,x بصورت یک مقدار ثابت بهHID_UsageMax(x) اختصاص میده که احتمالاً HID_UsageMax(x) باید یک ارایه باشه مقداربه عضو X ام اون داده شده

sharin
دوشنبه 29 اسفند 1390, 09:44 صبح
ممنونم ، اما هنوز يه جاي كار مي لنگه !!
نحوه ي استفاده اش رو ببينيد ...

در يه فايل هدر ، يه سري مقادير داريم كه اين ها هم جزئشون هستن.

.
.
.
#define HID_Usage(x) 0x09,x
#define HID_UsagePage(x) 0x05,x
.
.
.
#define HID_USAGE_PAGE_GENERIC 0x01
#define HID_USAGE_GENERIC_MOUSE 0x02
.
.
.

در فايل ديگري هم اينطوري استفاده شده ...


const BYTE HID_ReportDescriptor[] = {
HID_UsagePage(HID_USAGE_PAGE_GENERIC),
HID_Usage(HID_USAGE_GENERIC_MOUSE),...
}

با توجه به فرمش ، در واقع اين مقادير دارن به آرايه داده مي شن.
خود اين مقادير هم فرمشون [] نيست و () هست ...

نظرتون چيه ؟!

بازم ممنونم ...

sharin
دوشنبه 29 اسفند 1390, 14:41 عصر
فكر كنم فهميدم ، نظر شما چيه ...؟

در مطالبي كه در پست قبلي گذاشتم :

#define HID_USAGE_PAGE_GENERIC 0x01
و همينطور:

#define HID_UsagePage(x) 0x05,x

خوب اينجا اگر x=HID_USAGE_PAGE_GENERIC باشه ،‌پس x=0x01 خواهد بود.
در كد زير :

HID_UsagePage(HID_USAGE_PAGE_GENERIC)
اين تابع ورودي 0x01 رو مي گيره و پردازش تابع

HID_UsagePage(x)
به اين صورته كه مقدار X رو كه برابر 0x01 هست رو در كنار 0x05 كه يك مقدار ثابت هست قرار مي ده و حاصل مي شه 0x0501 كه 2 بايت هست.
اون BYTE كه در پست قبل بود هم همون unsigned char هست ( كد زير )

typedef unsigned char BYTE;

2 بايت = 2 بايت
اينجوري جور در مي ياد ، نظرتون چيه ؟

sharin
سه شنبه 01 فروردین 1391, 18:33 عصر
آهان ...
جالب بود ...

پس در برنامه ي بالا اگر در main كد زير رو داشته باشيم.


val=PRINT_ARGUMENT_TRIPLE(PRINT_ARGUMENT_DOUBLE);
در صورتي كه val دو بايت باشه ، حاصل مي شه ؟؟؟ ---> 0x0302
درسته؟ ( چون در مورد من همچين استفاده اي ازش شده )

sharin
سه شنبه 01 فروردین 1391, 22:43 عصر
ممنونم . بابت لينك ها هم ممنون .

مثال ها ، ديدم رو باز تر كرد و مثالها رو متوجه شدم ،‌اما موضوع اينه كه شما براي هر 2 مثالي كه زديد از يه تابع كه خودتون هم تعريف كرديد استفاده كرديد.
ولي در موردي كه باهاش برخورد كردم ( پست 3 ، حتما ببينيدش ) از تابع واسطي استفاده نشده ... ( پست 3 رو ببينيد متوجه مي شيد )
مي خوام بدونم مقادير خانه هاي اون آرايه با اين اوصاف چي مي شه ...
فقط همين رو بگيد كافيه، متوجه مي شم.( همون خانه ي 1 )


راستي كد زير:

#define TRUE (1)
چرا 1 رو توي ( ) گذاشته ؟


بازم ممنون از لطفتون.