پاسخ : نکاتی در برنامه نویسی C (کامپایلر IAR)
سوال بسیار خوبی را مطرح کردید. با توجه به نوع صورت مسئله شما که قصد دارید رجیسترهای پورت های مختلف را از طریق یک ساختار از پیش تعیین شده، تعریف کنید و اینکه بتوانید هر پورت را بصورت بیتی و بایتی مقداردهی کنید، می توانید از سه union در داخل struct مانند نمونه کد زیر استفاده کنید (این نمونه کد را در سیمولاتور IAR تست کردم و به خوبی عمل می کند):
در این شرایط مثلا PortA.dir یا PortA.out یا PortA.in بصورت بایتی هم قابل دسترسی هستند.
سوال بسیار خوبی را مطرح کردید. با توجه به نوع صورت مسئله شما که قصد دارید رجیسترهای پورت های مختلف را از طریق یک ساختار از پیش تعیین شده، تعریف کنید و اینکه بتوانید هر پورت را بصورت بیتی و بایتی مقداردهی کنید، می توانید از سه union در داخل struct مانند نمونه کد زیر استفاده کنید (این نمونه کد را در سیمولاتور IAR تست کردم و به خوبی عمل می کند):
کد:
typedef struct { union { unsigned char in; unsigned char in0:1; unsigned char in1:1; unsigned char in2:1; unsigned char in3:1; unsigned char in4:1; unsigned char in5:1; unsigned char in6:1; unsigned char in7:1; }; union { unsigned char dir; unsigned char dir0:1; unsigned char dir1:1; unsigned char dir2:1; unsigned char dir3:1; unsigned char dir4:1; unsigned char dir5:1; unsigned char dir6:1; unsigned char dir7:1; }; union { unsigned char out; unsigned char out0:1; unsigned char out1:1; unsigned char out2:1; unsigned char out3:1; unsigned char out4:1; unsigned char out5:1; unsigned char out6:1; unsigned char out7:1; }; } PORT_STRUCT;
در این شرایط مثلا PortA.dir یا PortA.out یا PortA.in بصورت بایتی هم قابل دسترسی هستند.
دیدگاه