سود:
- قابلیت تسریع پیش نویس های سیستم عامل میکروکنترلر، درایور و پیش نویس های ماشین حالت با هوش مصنوعی
- امکان بررسی وقفه، زمان بندی، نظارت و منطق کم مصرف با پشتیبانی هوش مصنوعی
- امکان تایید کد سیستم عامل تولید شده توسط هوش مصنوعی از طریق تجزیه و تحلیل استاتیک، تست سخت افزار و الزامات امنیتی
یک سیستم تعبیه شده یک دستگاه الکترونیکی است که پیرامون یک میکروکنترلر (کامپیوتر کوچکی که پردازنده، حافظه و تجهیزات جانبی را روی یک تراشه قرار می دهد) ساخته شده است که برای انجام یک کار خاص طراحی شده است: یک ترموستات، یک مودم، یک گره حسگر، یک درایور موتور. Firmware نرم افزاری است که مستقیماً سخت افزار این دستگاه را اجرا می کند. در این واحد نحوه استفاده از هوش مصنوعی به عنوان یک شتاب دهنده در توسعه سیستم عامل (نوشتن درایور، ماشین حالت، منطق وقفه و زمان، مدیریت کم مصرف) را خواهید دید. هوش مصنوعی در کدنویسی واقعا قدرتمند است. اما در دنیای جاسازی شده، کد با سخت افزار، زمان واقعی و اغلب امنیت در هم تنیده شده است. بنابراین هر خطی که هوش مصنوعی تولید میکند باید از طریق تجزیه و تحلیل استاتیک، بررسی ثبت/برگ دادهها و آزمایش واقعی سختافزار انجام شود.
کجا قوی است، کجا در میان افزار هوش مصنوعی خطرناک است
هوش مصنوعی در بخش "اسکلت" و "مرگ" سفتافزار بسیار قوی است: ساختار یک درایور I2C/SPI، چارچوب یک ماشین حالت (منطقی که حالتها و انتقالهای دستگاه را تعریف میکند)، یک پیادهسازی بافر حلقه، یک تجزیهکننده دستورالعمل، یک اسکلت آزمایشی. می تواند جدول ثبت را در یک دیتاشیت پیچیده بخواند و کد اولیه را تولید کند. می تواند یک خطا را توضیح دهد، هشدار کامپایلر را تفسیر کند.
جایی که مخاطره آمیز است، ماهیت سیستم تعبیه شده است:
- آدرسها و فیلدهای بیت را ثبت کنید: هوش مصنوعی ممکن است نقشه ثبت یک تراشه را اشتباه به خاطر بسپارد. هر آدرس و بیت باید از دیتاشیت تایید شود.
- زمان و زمان واقعی: یک عملیات چند میکروثانیه طول می کشد، هر چند وقت یکبار یک وقفه می رسد، به سخت افزار بستگی دارد. هوش مصنوعی پیش بینی می کند، شما اندازه می گیرید.
- همزمانی: اگر متغیرهای مشترک بین روال سرویس وقفه (ISR) و حلقه اصلی با دسترسی فرار و اتمی محافظت نشوند، خطاهای بی صدا و غیر قابل تکرار رخ می دهد.
- محدودیت منابع: سرریز پشته، نشت حافظه، مهلت زمانی نگهبان به معنای خرابی در تعبیه شده است.
وقفه، زمان بندی و نگهبان
وقفه زمانی رخ می دهد که یک رویداد رخ می دهد (داده ها رسیده، تایمر منقضی شده است)، پردازنده کار اصلی را رها می کند و به یک روال سرویس می پرد (ISR: Interrupt Service Routine). ISR ها حساس ترین کدهای موجود در سیستم تعبیه شده هستند. قوانین اساسی: ISR باید کوتاه باشد (کار طولانی به حلقه اصلی سپرده می شود)، نباید عملیات مسدودسازی (انتظار، چاپ) در آن وجود داشته باشد، متغیرهای مشترک باید محافظت شوند.
Watchdog یک مکانیسم امنیتی است که در صورت خرابی نرم افزار، دستگاه را به طور خودکار راه اندازی مجدد می کند. سیستم عامل به طور منظم آن را "تغذیه" می کند، اگر نه، سیستم تنظیم مجدد می شود. هوش مصنوعی این ساختارها را ترسیم میکند، اما مدت زمان نگهبان، اولویتهای وقفه و بودجه زمانبندی باید در برابر بار واقعی روی سیستم شما تأیید شود.
نکته: هنگام چاپ یک ISR در AI، به صراحت به آن دستور دهید که "ISR را کوتاه نگه دارد، بدون مسدود کردن، متغیرهای مشترک را با دسترسی فرار و اتمی علامت گذاری کنید، کار طولانی را با یک پرچم به حلقه اصلی واگذار کنید." سپس خط به خط کدی را که تولید می کند بررسی کنید که این قوانین واقعاً اعمال می شوند.
قدرت و امنیت کم
مدیریت انرژی کم در دستگاه های با باتری بسیار مهم است: به خواب رفتن پردازنده، خاموش کردن تجهیزات جانبی، بیدار شدن با یک رویداد. هوش مصنوعی تغییر حالت خواب و منطق بیداری را ترسیم می کند، اما مصرف جریان واقعی فقط با اندازه گیری مشخص می شود (متر جریان در سطح میکرو آمپر). AI گفتن "در این حالت ~2 μA می کشد" یک حدس است.
از منظر امنیتی، دستگاههای تعبیهشده به طور فزایندهای به شبکه متصل میشوند و آسیبپذیریهای میانافزار (سرریز بافر، ورودی تایید نشده، رمزنگاری ضعیف، رابط اشکالزدایی باز) خطرات جدی هستند. ممکن است هوش مصنوعی اصول کدنویسی ایمن را به شما یادآوری کند، اما امنیت کد تولید شده توسط ابزارهای تجزیه و تحلیل استاتیک، بررسی کد و تست امنیتی در صورت لزوم تأیید می شود. در سیستم های حیاتی ایمنی (پزشکی، خودرو، صنعتی) خروجی هوش مصنوعی هرگز نباید جایگزین فرآیندهای مورد نیاز توسط تاییدیه مهندس صالح و استاندارد ایمنی مربوطه شود (به عنوان مثال IEC 61508، ISO 26262).
سه کیف کوچک
مورد 1 - متغیر مشترک محافظت نشده. یک مهندس از هوش مصنوعی کد دریافت UART را درخواست می کند. کد یک شمارنده را در ISR افزایش می دهد و حلقه اصلی این شمارنده را می خواند. اما شمارنده فرار نیست و خواندن چند بایت اتمی نیست. دستگاه بیشتر اوقات کار می کند، اما گاهی اوقات شمارش داده ها را اشتباه می خواند و خطا تکرار نمی شود. تجزیه و تحلیل استاتیک و بررسی کد catch missing volatile; هنگامی که شمارنده محافظت می شود، خطا ناپدید می شود. درس: خطاهای همزمانی در کدهای هوش مصنوعی مکرر و موذیانه هستند. مطالعه و بررسی لازم است.
مورد 2 - بیت ثبت اشتباه است. یک کارآموز کد اولیه ADC تولید شده توسط هوش مصنوعی را آپلود می کند. ADC مقادیر غیرمنتظره را می خواند. با مقایسه آن با دیتاشیت، به نظر می رسد که هوش مصنوعی یک بیت پیکربندی را در مکان اشتباه تنظیم کرده است (نقشه برای یک نوع متفاوت از تراشه). هنگامی که بیت تصحیح شد، ADC به درستی کار می کند. درس: هر املای رجیستر را در برابر نوع صحیح دیتاشیت بررسی کنید.
مورد 3 - استفاده صحیح. یک مهندس از هوش مصنوعی یک اسکلت ماشین حالت برای یک پروتکل حسگر پیچیده می خواهد. حالت ها، انتقال ها، و شاخه های تایم اوت را توصیف می کند. هوش مصنوعی یک چارچوب تمیز و خوانا تولید می کند. مهندس این چارچوب را می گیرد، دسترسی هر ثبت را با دیتاشیت تأیید می کند، زمان بندی را با اسیلوسکوپ اندازه گیری می کند و آن را در سخت افزار آزمایش می کند. توسعه به جای چند روز در چند ساعت به پایان می رسد. درس: هوش مصنوعی اسکلت را سرعت می بخشد. مهندس تأیید را انجام می دهد.
الگوهای درخواستی قابل کپی
DRIVER SKELETON TEMPLATE"اسکلت یک درایور [I2C/SPI/UART] را برای [chip/Pipheral] بنویسید: توابع مقداردهی اولیه، خواندن، نوشتن، مدیریت خطا. آدرسهای ثبت و فیلدهای بیت را در PLACEHOLDER بگذارید (مثلا REG_XXX) و به جای آن توجه داشته باشید که «پر کردن زمان دادهها و تأیید آنها را تأیید کنید». هر تابع با یک خط نظر فرض می شود."
الگوی امنیت ISR"برای رویداد زیر یک پیش نویس سرویس وقفه (ISR) بنویسید: [رویداد]. قوانین: ISR را کوتاه نگه دارید، مسدود نکنید، متغیرهای مشترک را با دسترسی بی ثبات و اتمی علامت گذاری کنید، کار طولانی را با یک پرچم به حلقه اصلی محول کنید. در پایان کد، این قوانین را می توانم هرکدام را به صورت جزئی بنویسم."
STATE MACHINE Template"یک اسکلت ماشین حالت برای پروتکل/فرآیند زیر بنویسید: [وضعیتها، رویدادها، انتقالها و زمانبندیها را توصیف کنید]. اقدامات ورود/خروج و خطا/خطا را برای هر حالت مشخص کنید. مقادیر مخصوص سختافزار (رجیستر، مدت زمان) را بهعنوان مکاننماها بگذارید و توجه داشته باشید که باید تأیید شوند."
الگوی بازبینی کد "کد میانافزار زیر را از منظر تعبیهشده بررسی کنید و خطرات را پرچمگذاری کنید: متغیر مشترک محافظتنشده (فرار/اتمی)، عملیات طولانی/مسدود در ISR، خطر سرریز پشته، انتظار بدون مهلت زمانی، ثبت خطاها، فید داگ. پیشنهاد کنید که چگونه باید برای هر کدی تست/تأیید شود.
اعلان ضعیف / اعلان قوی
پیام ضعیف: "برای من یک راننده UART بنویس."
STRONG PROMPT: "یک چارچوب درایور دریافت UART مبتنی بر وقفه برای [میکروکنترلر] بنویسید. از یک بافر حلقه استفاده کنید؛ ISR را کوتاه نگه دارید و فقط در بافر بنویسید، در حلقه اصلی پردازش میشود. فهرستهای مشترک را فرار و اتمی کنید. آدرسهای ثبت را در نگهدارندهها بگذارید، علامتگذاری کنید تا از صفحه داده مورد نیاز برای تست تایید شوند، و در پایان عبارتهایی از کد مورد نیاز را فهرست کنید. زمان بندی."
اعلان ضعیف کدی را تولید می کند که سخت افزار و همزمان کور است. اعلان قدرتمند قوانین جاسازی شده و درخواست هایی را برای لیست تأیید اعمال می کند.
لایه های تأیید سیستم عامل
لایه
چه چیزی را می گیرد
نقش هوش مصنوعی
بررسی دیتاشیت
رجیستر/بیت اشتباه است
مکان یاب و یادداشت کنترل ایجاد می کند
آنالیز استاتیک (لینتر)
خطاهای فرار، نوع، مرزی
لیست قوانین و توضیح
هشدارهای کامپایلر
تبدیل ضمنی، مقدار استفاده نشده
نظر هشدار دهنده
تست در سخت افزار
زمان بندی، رفتار واقعی
پیشنهاد سناریوی آزمایشی
اسیلوسکوپ / آنالایزر
دقت سیگنال و پروتکل
نقطه اندازه گیری و موج مورد انتظار
احتیاط: فقط به این دلیل که یک سیستم عامل "کامپایل" می شود و "بیشتر اوقات کار می کند" به این معنی نیست که درست است. خطاهای همزمانی و زمان بندی فقط تحت شرایط خاصی رخ می دهد. به همین دلیل است که تجزیه و تحلیل استاتیک و آزمایش واقعی در سخت افزار ضروری است.
اشتباهات رایج
- عدم محافظت از متغیرهای مشترک داده های بین ISR و حلقه اصلی باید فرار و اتمی باشند.
- عدم تأیید آدرس/بیت ثبت با دیتاشیت. AI ممکن است نوع اشتباهی را ترسیم کند.
- طولانی نگه داشتن ISR یا مسدود کردن آن در آن. سیستم نمی تواند پاسخ دهد، وقفه ها از دست می روند.
- با فرض زمان بندی بدون اندازه گیری. زمان واقعی به سخت افزار بستگی دارد. با اسیلوسکوپ تایید شد
- گذاشتن کد امنیتی/ایمنی حیاتی برای تایید هوش مصنوعی. یک مهندس شایسته و فرآیند استاندارد مربوطه ضروری است.
به طور خلاصه
در این واحد شما از هوش مصنوعی به عنوان یک شتاب دهنده قدرتمند در تولید اسکلت سیستم عامل، درایور، ماشین حالت و طرح ISR استفاده کردید. اما در دنیای تعبیهشده، کد با سختافزار، زمان واقعی و امنیت در هم تنیده میشود: مقادیر ثبت/بیت از صفحه داده تأیید میشوند، همزمانی از تحلیل استاتیک تأیید میشود، زمانبندی از اسیلوسکوپ تأیید میشود، رفتار از آزمایش واقعی در سختافزار تأیید میشود. هوش مصنوعی اسکلت را در عرض چند دقیقه تحویل می دهد. مهندس کارکرد صحیح، ایمن و به موقع سیستم عامل را تأیید می کند. در سیستم های حیاتی ایمنی، خروجی هوش مصنوعی جایگزین فرآیندهای استاندارد ایمنی مربوطه و تاییدیه مهندس صالح نمی شود.
وظیفه کاربردی
یک وسیله جانبی (به عنوان مثال یک سنسور I2C) را انتخاب کنید. با الگوی «اسکلت راننده»، از هوش مصنوعی یک اسکلت راننده بخواهید که ثبتها را در نگهدارندههای مکان باقی میگذارد. سپس یک طرح ISR برای وقفه آماده داده از این حسگر با الگوی "ISR Security" ایجاد کنید. در نهایت، کدی را که با الگوی «بازبینی کد» تولید میکند از نظر خطرات جاسازی شده اسکن کنید و حداقل سه مرحله تأیید/آزمایش را بنویسید.
چک لیست
- [ ] من هر آدرس و بیت ثبت را از نوع برگه داده درست تأیید کردم.
- [ ] من متغیرهای مشترک بین ISR و حلقه اصلی را فرار و اتمی کردم.
- [ ] من ISR را کوتاه نگه داشتم، مسدودسازی نکردم، کار طولانی را به حلقه اصلی واگذار کردم.
- [ ] من قصد داشتم زمان بندی و رفتار واقعی را در سخت افزار و با یک اسیلوسکوپ آزمایش کنم.
- [ ] من کد را با تحلیل استاتیک و هشدارهای کامپایلر اسکن کردم.
- [ ] قطعات حیاتی امنیتی/ایمنی را به تایید یک مهندس ذیصلاح و فرآیند استاندارد مربوطه واگذار کردم.