اطلاعیه

Collapse
No announcement yet.

cmsis چه اشتراکاتی در برنامه نویسی ایجاد می کند ؟؟

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    cmsis چه اشتراکاتی در برنامه نویسی ایجاد می کند ؟؟

    سلام
    خیلی وقت بود که می خواستم روی cmsis کار کنم و بلاخره شروع کردم
    خب چیزهایی که در موردش شنیده بودم با فکرم و با عمل جور در نمی اومد
    مثلا این که اگر قرار باشه برنامه رو روی یک میکروی دیگه سوییچ کنیم
    خب الان با استفاده از نرم افزار کیل وقتی روی میکروی stm32f407 بخواهیم cmsis کار کنیم
    مجبور به استفاده از توابع hal هستیم
    در صورتی که تا جایی که بنده می دونم این توابع فقط برای شرکت st هست
    یا مثلا بخش هایی توسط cmsis حمایت نمیشه
    مثلا واحد adc برای lpc1768 همین طور برای stm32f407
    خب اگر توضیحی در مورد این گونه مسائل و شبهات دارید بفرمایید
    اللهم صل علی محمد و ال محمد و عجل فرجهم
    پیامبر اکرم(ص):زکات علم نشر آن است.
    در کشور هاي غربي انتقال تجربيات و دانش به افراد مبتدي يک پيشرفت محسوب شده و به آن مديريت دانش مي گويند. ولي متاسفانه اين فرهنگ هنوز در کشور ايران رايج نشده است !!!

    #2
    پاسخ : cmsis چه اشتراکاتی در برنامه نویسی ایجاد می کند ؟؟

    متاسفانه ST، هرچقد تو سخت افزار قابل اعتماده، تو نرم افزار نیست. یه بار stdPeriph، یه بار HAL، یه بار LL. هر دفعه یه متلی در میاره. و فقط هم کتابخونه نیست. روی IDE هاش هم همینطوره. واس همین بنده ی حقیر برعکس همیشه، ترجیح میدم نرم سراغ چیزی که اس تی میگه ! من یه توصیف کلی رو اینا میدم، اگر اصلاحاتی هس دوستان زحمت بکشن :

    1) stdPeriph یه گام بالاتر از مقدار دادن محض به رجیستر بود. در اصل همونه، فقط با نامگذاری همه چیز و استفاده از یه سری struct سر راست بری هر پریفرال، کار رو راحت تر میکرد. الان منسوخ شده از سمت اس تی، اما بنظرم خیلی خوب بود.
    2) HAL، خیلی دیگه زیاده روی کرد. کلا یه لایه گنده گذاشت رو سخت افزار. با اینکه هیچکدوم از این لایه ها، جلوی اینو نمیگیرن که شما دستی بری مقدار دهی کنی یا درایورهای خودتو بنویسی، هال یکم کورکورانه میشد. حتا تولید کننده هایی مثل sysprog هم باش مشکل دارن. همین الان وقتی یه مثال میسازی با هال، تایمرش اشتباه تنظیم میشه تو مثال اولیه !

    من شخصا هر کاری کردم تا حالا که از هال استفاده نکنم. هرچند گاها مجبور شدم و واقعا برای نوشتن درایورهایی برای USB و ... که ناچاریم از کدهای ST استفاده کنیم، هال تنها گزینه س.

    3) LL دقیقا پاسخ اس تی به این مشکل گنده هال بود. LL میاد خیلی از تنظیمات رو بصورت اتمیک در اختیار میذاره. مثلا با یه تابع اینلاین، فلان ویژگی مثل بادریت یوآرت به تنهایی تنظیم بشه. هال اینطور نبود. برای تنظیم بادریت شما باید یه استراکت کامل رو دستکاری میکردی و با "یه خط کد سطح بالا" نمیتونستی تنظیمش کنی.

    stdPeriph، برای سخت افزارهای مختلف یه خانواده از ST پرتابله. ولی بین خانواده های مختلف نه.
    HAL با اضافه کردن کتابخون های Extended در کنار کتابخونه های استاندارد، بین خونواده های مختلف هم کار میکنه. یعنی شما کد پایه رو مینویسی که روی همه سخت افزارها جواب میده. اما سخت افزارهایی که همون پریفرال رو با ویژگی بیشتر دارن، میتونن با استفاده از کتابخونه اضافه ازش استفاده کنن. مشکل هال اینه که انقدر تو در توه که بدون خوندن اون رفرنس 1800 صفحه ایش، نمیشه باش کار کرد. یعنی شما برید دستی درایور بنویسید بعضا راحت ترین تا این هال رو بفهمید. مگر اینکه کورکورانه و آردویینو وار راحت باشین.
    LL رو حقیقتا نمیشه به تنهایی باش کار کرد. از نظر شدن، شدنیه ولی همه ی مثالها و کدهای آماده با HAL نوشته شدن. ناچارا میشه یه نیروی کمکی برای HAL برای برنامه نویسایی که شاکی بودن از HAL.

    CMSIS که از سمت ARM هس، قرار بوده بشه روی همه سخت افزارها پیاده ش کرد. واقعا هم میشه. ولی بسیار کلیه و جزییات زیادی برای هر پریفرال نداره که بدیهیه چرا. هر کتابخونه cmsis برای هر میکرو جدا نوشته شده. در اصل با همه امکانات کامل نوشته شده، فقط برای هر مدل، یه سری ویژگیا رو غیرفعال میکنه. فقط شما یکسان میبینیتش. تو هر سورسش یه بخش داره برای هر پریفرال به اسم capability chart. که تو یه آرایه با صفر و یک، مثل تیک زدن تو جدول، مشخص میکنه که این میکرو از کدوم ویژگیا میتونه استفاده کنه. مثلا یوآرت این مدل، ویژگی سیگنال RTS نداره ولی اون داره و ...
    شما هر پروژه ای با کایل (اسم این keil، کیل نیست، کایله. واژه آلمانیه.هر چند تو ویدئوهای انگلیسی هم حتا بش میگن کیل ولی وقتی ما میتونیم بگیم محمد، چرا بگیم مامادو) درست کنی، میتونی از همه شون استفاده کنی (بعضیا با اضافه کردن دستی کتابخونه ها، بعضیا همینطوری)
    برای stdperiph، کافیه فقط یه هدر خالی اضافه بشه. مثلا برای stm32F030 ، کافیه stm32f030x6.h اضافه بشه. ,توجه کنید اسم F030 از مدل مشخصه. با همین هدر همه ی رجیسترها در دسترس هستن.
    برای هال، اسم هدر مورد نظر به شکل STM32F0xx_hal_yyy هست که yyy اسم پریفراله. همونطور که میبینید دیگه دقیقا مدل F030 نیست. مدل عمومی شده F0xx . پس برای سویچ به F051 مثلا، مشکلی ندارن.
    برای LL مثلا بالاییه بجای هال میشه LL
    برای CMSIS اسم فایل ها، CMSIS_XXX هست که اون xxx اسم پریفراله. همه ی کتابخونه های ارایه شده cmsis، چه مربوط به درایور یه پریفرال باشن، چه کتابخونه دیگه ای (مثلا NN) ، به همین شکل هستن.
    سایت CMSIS هم اسم توابع ، شکلشون و نحوه ی اضافه کردنشونو نوشته.
    www.keil.com/pack/doc/CMSIS/Driver/html/group__common__drv__gr.html

    Si vis pacem, para bellum

    دیدگاه


      #3
      پاسخ : cmsis چه اشتراکاتی در برنامه نویسی ایجاد می کند ؟؟

      نوشته اصلی توسط tiranoid نمایش پست ها
      ......................
      برای CMSIS اسم فایل ها، CMSIS_XXX هست که اون xxx اسم پریفراله. همه ی کتابخونه های ارایه شده cmsis، چه مربوط به درایور یه پریفرال باشن، چه کتابخونه دیگه ای (مثلا NN) ، به همین شکل هستن.
      سایت CMSIS هم اسم توابع ، شکلشون و نحوه ی اضافه کردنشونو نوشته.
      www.keil.com/pack/doc/CMSIS/Driver/html/group__common__drv__gr.html

      سلام
      جمع بندی شما چیه ؟؟؟
      الان چه کنیم به نظر شما با توجه به اینکه خودتون هم اشاره کردید برای به طور مثال USB نمیشه به این راحتی تنظیم کرد و تابع نوشت
      stdPeriph رو همه شرکت های سازنده میکرو ارائه می کنند ؟؟
      cmsis حتما استاندارد هست و توسط IDE ها دست کاری نشده اند ؟؟ به طور مثال در دو نرم افزار مختلف امکانات یکسانی ارائه میشه؟؟
      اللهم صل علی محمد و ال محمد و عجل فرجهم
      پیامبر اکرم(ص):زکات علم نشر آن است.
      در کشور هاي غربي انتقال تجربيات و دانش به افراد مبتدي يک پيشرفت محسوب شده و به آن مديريت دانش مي گويند. ولي متاسفانه اين فرهنگ هنوز در کشور ايران رايج نشده است !!!

      دیدگاه


        #4
        پاسخ : cmsis چه اشتراکاتی در برنامه نویسی ایجاد می کند ؟؟

        CMSIS یکسان هست. ولی همه ی امکانات و همه ی پریفرال ها (مثلا تایمر) رو نداره. فقط پریفرال های ارتباطی رو داره (تا جایی که تو وبسایتش میبینم)
        کدی که شما بر اساس CMSIS مینویسید بین همه محیط ها و کنترلرها قابل جابجاییه.

        stdPeriph مال شرکت STه. ساده ترین لایه س (مثلا همون هدرهای io برای atmel studio که صرفا رجیسترها رو در دسترس میذاشتن)

        نتیجه نهایی : HAL
        و تغییر دادن پلتفرمتون به ST. حقیقتا ST چیزی کم نذاشته که بخوایم از بقیه استفاده کنیم. الان هیچ دلیل وجود نداره که مثلا بخوایم از LPC1768 استفاده کنیم. با اینکه ویژگی های منحصر بفردی داره، اما بسیار ناچیز در مقابل معادل هاش تو ST. بماند که قیمت ST بی رقیبه.
        Si vis pacem, para bellum

        دیدگاه


          #5
          پاسخ : cmsis چه اشتراکاتی در برنامه نویسی ایجاد می کند ؟؟

          نوشته اصلی توسط tiranoid نمایش پست ها
          CMSIS یکسان هست. ولی همه ی امکانات و همه ی پریفرال ها (مثلا تایمر) رو نداره. فقط پریفرال های ارتباطی رو داره (تا جایی که تو وبسایتش میبینم)
          کدی که شما بر اساس CMSIS مینویسید بین همه محیط ها و کنترلرها قابل جابجاییه.

          stdPeriph مال شرکت STه. ساده ترین لایه س (مثلا همون هدرهای io برای atmel studio که صرفا رجیسترها رو در دسترس میذاشتن)

          نتیجه نهایی : HAL
          و تغییر دادن پلتفرمتون به ST. حقیقتا ST چیزی کم نذاشته که بخوایم از بقیه استفاده کنیم. الان هیچ دلیل وجود نداره که مثلا بخوایم از LPC1768 استفاده کنیم. با اینکه ویژگی های منحصر بفردی داره، اما بسیار ناچیز در مقابل معادل هاش تو ST. بماند که قیمت ST بی رقیبه.
          خب اگر بخواهیم بحث رو محدود به یه شرکت نکنیم چی ؟؟
          یعنی در نهایت اگر قرار باشه برای میکرویی از هر شرکتی کد بزنیم باید رجیستری محض این کار رو بکنیم ولی از اون جایی که بحث هایی مثل USB پیش میاد مجبور به استفاده از cmsis هستیم
          و فقط تمامی اشتراکات بین میکروها همین قسمتی که گفتم میشه درسته ؟؟؟
          یعنی رجیستری برای بخش های غیر مشترک و cmsis برای بخش های مشترک
          حالا nxp باشه یا st و یا هر شرکت دیگه ای
          اللهم صل علی محمد و ال محمد و عجل فرجهم
          پیامبر اکرم(ص):زکات علم نشر آن است.
          در کشور هاي غربي انتقال تجربيات و دانش به افراد مبتدي يک پيشرفت محسوب شده و به آن مديريت دانش مي گويند. ولي متاسفانه اين فرهنگ هنوز در کشور ايران رايج نشده است !!!

          دیدگاه


            #6
            پاسخ : cmsis چه اشتراکاتی در برنامه نویسی ایجاد می کند ؟؟

            تا هرجا که CMSIS درایورشو داره، کدتونو با این CMSIS بزنید. هرچی نداشت دیگه باید زحمتشو خودتون بکشید برای هر میکرو.
            Si vis pacem, para bellum

            دیدگاه

            لطفا صبر کنید...
            X