CMSIS مخفف Cortex Microcontroller Software Interface Standard و یک استاندارد برای معماری Cortex هست که توسط ARM ایجاد شده و توسط شرکت های سازنده چیپست های مبتنی بر ARM پشتیبانی میشود. هدف این استاندارد کمک به برنامه نویسها برای ایجاد نرم افزارهای قابل استفاده مجدد برای سیستم های مبتنی بر ARM Cortex-M می باشد. بطوریکه بتوانند برنامه نوشته شده را بر روی چیپستهای تولید کننده های مختلف استفاده نمایند.
سری پردازنده های Cortex-M3 اولین هسته ARM هست که به طور اختصاصی برای میکروکنترلرها طراحی شده و دارای ویژگی های مشترکی مانند (NVIC, Timer, Debug-hardware) هستند که برای میکروکنترلرها لازم بوده و برای برنامه نویسها این امکان رو ایجاد میکند تا برنامه ها را با کمترین تلاش روی میکروکنترلرهای مختلف پورت کنند.
آخرین بررسی ها روی هزینه های پیاده سازی سیستم های نهفته (Embed) نشان میدهد که پیچیدگی نرم افزاری این سیستمها و هزینه های طراحیشان با گذشت زمان بیشتر و بیشتر شده و استفاده از یک استاندارد میتواند باعث کاهش پیچیدگی سیستمها و در نتیجه کاهش هزینه طرح ها شود. هدف CMSIS هم دقیقا همین منظور است.

CMSIS را میتوان به 3 لایه کاربردی تقسیم نمود :
• Core Peripheral Access Layer (CPAL)
• Middleware Access Layer (MWAL)
• Device Peripheral Access Layer (DPAL)
لایه اول که پایین ترین لایه هست مربوط به آدرس ها و روش های دسترسی به بخش هایی ابتدایی مثل رجیسترهای CPU ، واحد NVIC و دیباگ هست که در هر سیستم مبنی بر هسته Cortex-M وجود دارد.این لایه توسط ARM ایجاد میشد. core_cm3.h
لایه دوم هم توسط ARM ایجاد میشود ولی تولید کننده ها میتوانند برای سازگاری با محصولاتشان تغییراتی اعمال نمایند. این لایه شامل یک سری توابع API برای دسترسی به تجهیزات جانبی هست. system_device.h
لایه سوم مستقیما توسط تولید کننده ها ایجاد شده و شامل آدرس سخت افزاری رجیستر ها و توابع دسترسی به قابلیتهای خاص هست. device.h
مثلا برای STM32 :

برنامه های نوشته شده با CMSIS در سه بعد کارخانه سازنده چیپ، میکروکنترلر و کامپایلر ممکن است با هم تفاوت داشته باشند. برای حذف مشکل متفاوت بودن کامپایلرها در فایلهای مشترک core_cm3.c و core_cm3.h طوری نوشته شده اند که نوع کامپایلر شناسایی شده و تعریف های مخصوص هر کدام اعمال میشند. به طور مثال برای اینکه تابع ماکرو ASM و INLINE بدون مشکل توسط هر سه کامپایلر تشخیص داده شود کدهای زیر در فایل core_cm3.h نوشته شده اند :
/* define compiler specific symbols */
#if defined ( __CC_ARM )
#define __ASM __asm
#define __INLINE __inline
#elif defined ( __ICCARM__ )
#define __ASM __asm
#define __INLINE
#define __nop __no_operation
#elif defined ( __GNUC__ )
#define __ASM asm
#define __INLINE inline
#endif
در حال حاضر CMSIS از سه کامپایلر مشهور زبان C ، ARM RealView (armcc) ، IAR EWARM (iccarm) وGNU Compiler Collection (gcc) پشتیبانی میکند.
علاوه بر اینکه توابع نوشته شده برای هسته Cortex-M شامل سطرهای راهنما برای چگونگی پشتیبانی تجهیزات مختلف میباشند CMSIS با استاندارد MISRA-C 2004 نیز سازگار شده است.این استاندارد شامل مجموعه ای از قوائد ایمنی سازی برای زبان برنامه نویسی C می باشد که توسط Motor Industry Software Reliability Association ایجاد شده است.
نویسنده : رامین جعفرپور
سری پردازنده های Cortex-M3 اولین هسته ARM هست که به طور اختصاصی برای میکروکنترلرها طراحی شده و دارای ویژگی های مشترکی مانند (NVIC, Timer, Debug-hardware) هستند که برای میکروکنترلرها لازم بوده و برای برنامه نویسها این امکان رو ایجاد میکند تا برنامه ها را با کمترین تلاش روی میکروکنترلرهای مختلف پورت کنند.
آخرین بررسی ها روی هزینه های پیاده سازی سیستم های نهفته (Embed) نشان میدهد که پیچیدگی نرم افزاری این سیستمها و هزینه های طراحیشان با گذشت زمان بیشتر و بیشتر شده و استفاده از یک استاندارد میتواند باعث کاهش پیچیدگی سیستمها و در نتیجه کاهش هزینه طرح ها شود. هدف CMSIS هم دقیقا همین منظور است.

CMSIS را میتوان به 3 لایه کاربردی تقسیم نمود :
• Core Peripheral Access Layer (CPAL)
• Middleware Access Layer (MWAL)
• Device Peripheral Access Layer (DPAL)
لایه اول که پایین ترین لایه هست مربوط به آدرس ها و روش های دسترسی به بخش هایی ابتدایی مثل رجیسترهای CPU ، واحد NVIC و دیباگ هست که در هر سیستم مبنی بر هسته Cortex-M وجود دارد.این لایه توسط ARM ایجاد میشد. core_cm3.h
لایه دوم هم توسط ARM ایجاد میشود ولی تولید کننده ها میتوانند برای سازگاری با محصولاتشان تغییراتی اعمال نمایند. این لایه شامل یک سری توابع API برای دسترسی به تجهیزات جانبی هست. system_device.h
لایه سوم مستقیما توسط تولید کننده ها ایجاد شده و شامل آدرس سخت افزاری رجیستر ها و توابع دسترسی به قابلیتهای خاص هست. device.h
مثلا برای STM32 :

برنامه های نوشته شده با CMSIS در سه بعد کارخانه سازنده چیپ، میکروکنترلر و کامپایلر ممکن است با هم تفاوت داشته باشند. برای حذف مشکل متفاوت بودن کامپایلرها در فایلهای مشترک core_cm3.c و core_cm3.h طوری نوشته شده اند که نوع کامپایلر شناسایی شده و تعریف های مخصوص هر کدام اعمال میشند. به طور مثال برای اینکه تابع ماکرو ASM و INLINE بدون مشکل توسط هر سه کامپایلر تشخیص داده شود کدهای زیر در فایل core_cm3.h نوشته شده اند :
/* define compiler specific symbols */
#if defined ( __CC_ARM )
#define __ASM __asm
#define __INLINE __inline
#elif defined ( __ICCARM__ )
#define __ASM __asm
#define __INLINE
#define __nop __no_operation
#elif defined ( __GNUC__ )
#define __ASM asm
#define __INLINE inline
#endif
در حال حاضر CMSIS از سه کامپایلر مشهور زبان C ، ARM RealView (armcc) ، IAR EWARM (iccarm) وGNU Compiler Collection (gcc) پشتیبانی میکند.
علاوه بر اینکه توابع نوشته شده برای هسته Cortex-M شامل سطرهای راهنما برای چگونگی پشتیبانی تجهیزات مختلف میباشند CMSIS با استاندارد MISRA-C 2004 نیز سازگار شده است.این استاندارد شامل مجموعه ای از قوائد ایمنی سازی برای زبان برنامه نویسی C می باشد که توسط Motor Industry Software Reliability Association ایجاد شده است.
نویسنده : رامین جعفرپور
دیدگاه