نوشته اصلی توسط
sh90
آمکانش هست یکم بیشتر توضیح بدین و نمونه کدی از نحوه استفاده از اون بنویسین
باتشکر
خیلی ساده هستش. نگران نباشید. یه ریجستر 96 بیتیه. یه ریجستر رو چطور می خونید؟ خیلی راهت مقدارش روی توی هر نوع متغیری می تونی بریزی. نمی دونم کامپایلر شما اسم ریجستر روی توی هدر میکرو براتون گذاشته یا نه ولی اگه درست به خاطر بیارم کیل نذاشته. من نمی دونم میکروی شما چیه ولی می تونی به مرجع دستی(Reference Manual) میکروتون یه مراجعه بکنی تا آدرسش رو بدست بیاری. مثلا واسه STM32F103 من آدرس این رجیستر اینه: 0x1FFF F7E8
پس اینجوری یه ماکرو می نویسم:
کد:
#define STM32F103_ID ((uint32_t *)0x1FFFF7E8)
حالا با سه تا متغییر می خونمش:
کد:
uint32_t IDPart1 = STM32F103_ID[0];
uint32_t IDPart2 = STM32F103_ID[1];
uint32_t IDPart3 = STM32F103_ID[2];
حالا 3 تا متغییر ثابت هم توی مثلا تابع اصلی(Main) برنامه ت تعریف کن و توش مقدار همین رجیستر رو داشته باش(قبل از استفاده از میکروتون باید مقدار این ریجستر رو بخونید تا قبل از کامپایل و ریختنش توی میکرو بتونید توی این یه تا متغییر ثابت بریزیدش) و با این مقادیر مقایسه ش کن. اگه برابر بود ادامه برنامه رو بره وگر نه هیچ!.
با این روش حتی اگه کسی برنامه شما رو از روی حافظه بخونه و روی میکروی دیگه بریزه بازم کار نمیکنه. حتی اگه دقیقا یه میکرو عین همین میکرو رو بخره و بریزه روش کار نمیکنه. چون هر میکرو یه ID مخصوص خودش رو داره.
البته این روش یه دردسر هم داره. شما واسه هر بار پرگرم کردن هر میکرو باید IDش رو بخونی و توی اون متغیرهای ثابت بریزی.