اطلاعیه

Collapse
No announcement yet.

کتابخانه عالی برای eeprom نوشتم !!

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

    کتابخانه عالی برای eeprom نوشتم !!

    سلام
    یک کتابخونه برای 24c02 نوشتم که نیاز به دونستن ادرس و چند بیتی بودن متغیر نیست فقط بهش میگی برو فلان متغیر رو توی این متغیر(مال ایپرام) ذخیره کن و بعد برای خوندن میگیم فلان متغیر ایپرام رو کپی کن داخل این متغیر!!
    ی پا جدول FAT نوشتم

    خوب توضبحات مهم
    اول این که داخل مین قبل از معرفی کتابخونه ایپرام میایم مقدار i2c مورد نظر رو با تابع برمیگردونیم اینجوری

    I2C_HandleTypeDef read_i2c_in_main (void) {return hi2c1;}

    #include "EEPROM.h"


    مرحله بعد اینجا اسم متغیر هامونو تعریف میکنیم
        enum 
    {
    _x = 0 , // char 1
    _y , // int 2
    _z , // long 4
    _mohsen, //long 4
    _ELEC, //long 4
    _javan , // char 1

    number_of_variables
    }variables;


    مرحله بعد اینجا نوع متغیر رو تعین میکنیم

    int EEPROM_24Cxx::init(void)
    {
    byte_of_valu [_x] = _char;
    byte_of_valu [_y] = _int;
    byte_of_valu [_z] = _long;
    byte_of_valu [_mohsen] = _long;
    byte_of_valu [_ELEC] = _long;
    byte_of_valu [_javan] = _int;


    و در اخر داخل مین برنامه ایپرام را init میکنیم تا جدول ادرس ساخته بشه

    eeprom.init();



    حالا فقط کافیه کد بزنید مثلا

    int intt =0;
    eeprom.write(intt , eeprom._javan);
    HAL_Delay(2);
    eeprom.read(&intt, eeprom._javan);


    حالا از دوستان خواهشی دارم که اگر از کد استفاده کرددند و خطایی دیدند اطلاع بدند رفع کنم!!
    و این که متغیر long رو هنوز اضاف نکرده ام چون مغزم جواب کرده و نمیدونم که چند بایتی هست!!!! حالا واقعا متغیر long چند بایت اشغال میکنه؟؟

    این هم هدر فایل (کلیک کنید)
    انجام پروژه هاي برنامه نويسي اندرويد
    [glow=red,2,300]نرم افزار نقشه هاي پاور کامپيوتر اندوريد[/glow]
    http://cafebazaar.ir/app/?id=com.atxdroid

    #2
    پاسخ : کتابخانه عالی برای eeprom نوشتم !!

    #define _bool 1;
    #define _char 1;
    #define _int 2;
    #define _long 4;
    تو هدر فابلت نوشته 4 تا که درسته


    دیدگاه


      #3
      پاسخ : کتابخانه عالی برای eeprom نوشتم !!

      خیالم راحت شد پس امشب long هم اضاف میکنم
      انجام پروژه هاي برنامه نويسي اندرويد
      [glow=red,2,300]نرم افزار نقشه هاي پاور کامپيوتر اندوريد[/glow]
      http://cafebazaar.ir/app/?id=com.atxdroid

      دیدگاه


        #4
        پاسخ : کتابخانه عالی برای eeprom نوشتم !!

        نوشته اصلی توسط mohsen.hex نمایش پست ها
        سلام
        یک کتابخونه برای 24c02 نوشتم که نیاز به دونستن ادرس و چند بیتی بودن متغیر نیست فقط بهش میگی برو فلان متغیر رو توی این متغیر(مال ایپرام) ذخیره کن و بعد برای خوندن میگیم فلان متغیر ایپرام رو کپی کن داخل این متغیر!!
        ی پا جدول FAT نوشتم
        [...]
        با سلام و درود
        اینکه نتیجه ی زحمات خود را جهت کمک به دیگران به اشتراک می گذارید بسیار اقدام شایسته و ارزشمندی است و چنین مواردی موجب ترغیب سایرین جهت اشتراک گذاری دانسته ها و دستاوردها سودمند خود می شود.

        دیدگاه


          #5
          پاسخ : کتابخانه عالی برای eeprom نوشتم !!

          دوست عزیز بسیار عالی بود فقط اگر بتونید برای ایپرام های 24c512 هم یه کتابخونه بنویسید خیلی عالی میشه یا مثلا یه کتابخونه که همه سری های 24cxx از 24c02 الی 24c1024 رو پشتیبانی کنه . من خودم برای 24c16 یه کتابخونه درست کردم که بد هم نشوده داره خوب کار میکنه.اگر کسی از دوستان نیاز داشت بگه ارسال کنم

          دیدگاه


            #6
            پاسخ : کتابخانه عالی برای eeprom نوشتم !!

            نوشته اصلی توسط mohsen.hex نمایش پست ها
            ...
            حالا از دوستان خواهشی دارم که اگر از کد استفاده کرددند و خطایی دیدند اطلاع بدند رفع کنم!!
            و این که متغیر long رو هنوز اضاف نکرده ام چون مغزم جواب کرده و نمیدونم که چند بایتی هست!!!! حالا واقعا متغیر long چند بایت اشغال میکنه؟؟
            سلام
            بسیار کار خوبی کردید. من فایل شما رو سریع یه نگاهی کردم. با C++ نوشتین و از شیئ گرایی استفاده کردید. خیلی خوبه که دارید با OOP کار میکنید. حتما ادامه بدید. البته به نظر هنوز با C++ و ویژگی هاش خوب آشنا نیستید. من از همین جا به همه دوستان توصیه میکنم C++ رو یاد بگیرید. خصوصا OOP. نکته ها:

            1- ما برای اینکه بدونیم متغییر هامون چند بیتی هستش معمولا سعی میکنیم که از typedefهای توی هدر فایل stdint.h استفاده کنیم. مثلا اینو ببین:




            مثلا اگه من یه متغییر نیاز دارم که از 0 تا 255 باشه میام از uint8_t استفاده میکنم. حالا اگه می خوای بدونی چرا این کار رو کردن برو بگرد. اگه پیدا نکردی بگو تا برات منبع بذارم.(در مورد اپراتور sizeof هم جستجو کن)
            2- هدفت از تابع init چیه؟ چرا بجاش برای کلاست یه کنستراکتر(constructor) ننوشتی؟
            3- تو کلاس دوبار یه اکسس مودیفایر(Access Modifier) رو تعریف کردی. این نوع کدنویسی برای یه بقیه کدنویس های حرفه ای قابل قبول نیست. درستش کن. حیفه!

            نوشته اصلی توسط kamy007 نمایش پست ها
            #define _bool 1;
            #define _char 1;
            #define _int 2;
            #define _long 4;
            تو هدر فابلت نوشته 4 تا که درسته



            کاربر Kamy قبلا ازتون خواهش کردم در مورد چیزی که اطلاع ندارید نظری ندید(لااقل تو بخش من). ما گناه میکنیم که مودبانه به یک کسی موردی رو متذکر میشیم. حتما باید عصبی بشیم؟
            موارد بالا تعریفی از نویسند کد اصلی هستش که ممکنه الان این کامپایلر اون کامپایلر نباشه. برای C/C++ مقادیر متغییر ها با توجه به کامپایلر و حتی نوع پردازنده تغییر میکنه. الان ممکنه این پست شما استارتر تاپیک رو به دردسر بندازه. همینو می خواستی؟


            دیدگاه


              #7
              پاسخ : کتابخانه عالی برای eeprom نوشتم !!

              نوشته اصلی توسط روح الامین نمایش پست ها
              به نظر هنوز با C++ و ویژگی هاش خوب آشنا نیستید
              دقیقا درست گفتید!! حدود یک ماه هست زدم توی کار stm و c++ با کیل!!
              نوشته اصلی توسط روح الامین نمایش پست ها
              2- هدفت از تابع init چیه؟ چرا بجاش برای کلاست یه کنستراکتر(constructor) ننوشتی؟
              راستش بلد نبودم ولی الان نوشتم!!بسیار ممنون که توضیح دادید کلی از دغدغه های من حل شد!!\
              نوشته اصلی توسط روح الامین نمایش پست ها
              تو کلاس دوبار یه اکسس مودیفایر(Access Modifier) رو تعریف کردی.
              درست می فرمایید !!public دوم در حقیقت باید private باشه ولی برای دیباگ جدا از پابلیک اصلی زیر private گذاشتم که بعد فقط خط public رو پاک کنم که private بشه!!
              نوشته اصلی توسط روح الامین نمایش پست ها
              موارد بالا تعریفی از نویسند کد اصلی هستش
              کلش رو خودم نوشتم و از هیچ جایی الهام نگرفتم!!
              نوشته اصلی توسط روح الامین نمایش پست ها
              مثلا اگه من یه متغییر نیاز دارم که از 0 تا 255 باشه میام از uint8_t استفاده میکنم. حالا اگه می خوای بدونی چرا این کار رو کردن برو بگرد. اگه پیدا نکردی بگو تا برات منبع بذارم.(در مورد اپراتور sizeof هم جستجو کن)
              لطفا توضیح بدید چطوری میتونم کد را ساده تر کنم؟؟امید وارم روزی برد که این کتاب خونه رو همه استفاده کنند!!!
              جدیدترین ویرایش توسط mohsen.hex; ۲۳:۲۵ ۱۳۹۶/۰۶/۲۹.
              انجام پروژه هاي برنامه نويسي اندرويد
              [glow=red,2,300]نرم افزار نقشه هاي پاور کامپيوتر اندوريد[/glow]
              http://cafebazaar.ir/app/?id=com.atxdroid

              دیدگاه


                #8
                پاسخ : کتابخانه عالی برای eeprom نوشتم !!

                نوشته اصلی توسط mohsen.hex نمایش پست ها
                ...لطفا توضیح بدید چطوری میتونم کد را ساده تر کنم؟؟امید وارم روزی برد که این کتاب خونه رو همه استفاده کنند!!!
                ببینید اول باید بدونید چطور یه کتابخونه بنویسید. کتابخونه استاندارد معمولا دو تا فایل داره. یه فایل C (برای شما CPP) و یه هدر فایل(با فرمت H یا HPP)
                ما توی فایل C یا CPP همیشه تعاریف رو انجام میدیم(Definition). تعریف تابع، کلاس، متغییر، ساختار و غیره. همه چیز.
                تو فایل H یا HPP هم فقط اعلامیه ها(Declaration) رو انجام میدیم.
                الان شما توی یه فایل هدر اومدید تعاریف رو انجام دادید. این استاندارد نیست. اینایی که نوشتین باید توی یه فایل cpp باشه و بعد یه فایل هم-نام این فایل cppتون بعنوان هدر hpp بسازید و توش اعلام کنید. برای نوشتن کتابخونه استاندارد این دو صفحه برای روشن کردن شما خیلی خوبه:






                برای sizeof هم این دو خوبن:

                Source code to find the size of int, float, char etc in your system in C++ programming using sizeof operator..


                What is the main function of sizeof (I am new to C++). For instance int k=7; char t='Z'; What do sizeof (k) or sizeof (int) and sizeof (char) mean?


                برای stdint.h هم این صفحه بد نیست:



                کتاب زبان C++ مگه ندارین؟ انتظار ندارم کسی که شروع میکنه به یادگیری C/C++ بعد از یادگیری بلد باشه چطور کتابخونه بنویسه چطور متاسفانه منبع درست و حسابی نوشته نشده براش. حتی انگلیسی. من خودم حتی با کدنویس های اروپایی و امریکایی هم که صحبت میکردم قبول داشتن این حرف رو ولی نوشتن کنستراکتر و ... رو دیگه باید بلد باشید.

                دیدگاه

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