NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 3405 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 12 از 12

موضوع: Embedded Data base

  1. #1
    کاربر فعال
    تاریخ عضویت
    Nov 2009
    نوشته ها
    115
    تشکر
    77
    تشکر شده 83 بار در 35 پست

    Icon16 Embedded Data base

    سلام دوستان.
    میخواستم ب÷رسم تا به حال دیتا بیسی برای میکروکنترلرهای که قابلیت نصب سیستم عامل(آندرویدو لینوکس و ...) ندارند تولید شده.
    یه چیزایی سرچ کردم مثل همستر و sqlLite اما مشخص نکرده برای میکرومنترلرهای مانند lpc1768 هم قابل استفاده هست یا نه.
    ممنون میشم راهنماییم کنید.
    میخوام ببینم اگر روش کار نشده انجامش بدم

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نوشته ها
    Many
     

  3. #2
    کاربر فعال
    تاریخ عضویت
    Nov 2009
    نوشته ها
    115
    تشکر
    77
    تشکر شده 83 بار در 35 پست

    پیش فرض

    شاید بیشتر توضیح بدم بهتره
    ببنید وقتی ما می خواهیم با MMC/SD یا فلش مموری ها کار کنیم الزاما با فایلها سر و کار داریم(اگر از ساختار fat استفاده کنیم که عاقلانهست استفاده کنیم). حال زمانی هست که میخواهیم یکری اطلاعات رو توی یه فایل ذخیره و بازیابی کنیم. در اینجا چون اطلاعات مهم هستند یعنی در واقع فایل مورد نظر دیتا بیس ما هست بهتره یک نرم افزار امن این کار رو انجام بده چون کاربر احتمال داره با یک اشتباه در قسمتی از برنامه کلا دیتا بیس رو پاک کنمه یا اطلاعات را به هم بریزه(البته نرم افزار دیتا بیس قابلیتهایی مثل جستجوی خیلی سریع هم از طریق شاخص گذاری فراهم میکنه). این کار رو در کامپیوتر نرم افزار هایی مثل SQL یا ORACEL انجام میده حالا میخوام بدونم برنامه برای میکروکنترلرهایی که قابلیت نصب سیستم عامل های رایج مثل آندروی یا windowCE رو ندارد مثل همین میکروکنترلرهای با هسته ARM7 یا cortexM3 وجود داره یا نه. من هرچی خودم گشتم دقیقا گفته نشده بود برنامه های موجود(همستر و sqlLite و ...) می تونند رو این میکرونترلرها هم کار کنند یا نه. حالااگر دوستان برنامه ایی میشناسند معرفی کنند ممنون میشم. قصد طراحی همچین چیزی رو دارم اما نمی خوام راه رفته رو دوباره برم.

  4. #3
    کاربر فعال
    تاریخ عضویت
    Nov 2009
    نوشته ها
    115
    تشکر
    77
    تشکر شده 83 بار در 35 پست

    پیش فرض

    یعنی خدایی اینقدر مبحث سنگینه!!!

  5. #4
    کاربر فعال
    تاریخ عضویت
    Jun 2007
    نوشته ها
    106
    تشکر
    50
    تشکر شده 93 بار در 60 پست

    پیش فرض

    مبحث سنگین نیست ولی بعید میدونم کسی روی این میکرو تا حالا از این کارا کرده باشه! sqlite رو تقریبا تو هر محیطی میشه برد ولی به نظر من برای این میکرو باز هم سنگین هست! بازده سیستم اونقدر پایین میاد که کار های دیگه رو ممکنه مختل کنه!
    نمیدونم ماهیت داده های شما چیه ولی منطقی تر هست از قالب های ساده تر مثل csv استفاده کنید که هم راحت تر هست و هم سریع تر!
    http://en.wikipedia.org/wiki/Comma-separated_values

  6. تشکرها از این نوشته :


  7. #5
    کاربر فعال
    تاریخ عضویت
    Nov 2009
    نوشته ها
    115
    تشکر
    77
    تشکر شده 83 بار در 35 پست

    پیش فرض

    ممنوناز پاسختون. ماهیت داده ها که هر چیزی می تونه باشه هر نوع آبجکتی یا هر نوع از انواع اولیه.
    با محاسباتی که کردم فکر نمیکنم انقدرم بخواد سنگین باشه حالا نمیدونم sqllite مگه کار خواستی انجام میده. من از همه ساختارهای پیشرفته مثل درخت B+ و یا درهم سازی هم میخوام استفاده کنم که بیس دیتابیس هایی مثل ORACEL و SQL هست
    من تو فکرشم بنویسمش فقط نمیخواستم کار تکراری کنم

  8. #6
    کاربر فعال
    تاریخ عضویت
    Jun 2007
    نوشته ها
    106
    تشکر
    50
    تشکر شده 93 بار در 60 پست

    پیش فرض

    هیج کاری هم نکنه باید بتونه یه کوئری کامل رو پارس کنه دیگه!
    اگر دوست دارید این کار رو پیاده کنید توصیه میکنم همین sqlite رو کامپایل کنید. چون ربطی به نوع سیستم عامل نداره نباید موردی باشه. سورسش:
    https://sqlite.org/download.html
    راهنمای کامپایل:
    https://sqlite.org/howtocompile.html
    داشتم میگشتم راجع به این قضیه یکی تو stackoverflow یه مورد دیگه رو معرفی کرده بود به اسم GDBM . من باهاش کار نکردم ولی به نطر فقط به صورت key/value دیتا رو ذخیره میکنه و از sqlite سبکتر هست:
    http://www.gnu.org.ua/software/gdbm/

  9. تشکرها از این نوشته :


  10. #7
    کاربر فعال
    تاریخ عضویت
    Nov 2009
    نوشته ها
    115
    تشکر
    77
    تشکر شده 83 بار در 35 پست

    پیش فرض

    سلام
    به صورت key/value یعنی چه جور؟
    ممنون میشم کمی بیشتر توضیح بدی

  11. #8
    کاربر فعال
    تاریخ عضویت
    Jun 2007
    نوشته ها
    106
    تشکر
    50
    تشکر شده 93 بار در 60 پست

    پیش فرض

    MAP تا حالا استفاده کردید؟ key/value دقیقا همون سیستم هست.
    مثلا داده ها به این صورت ذخیره شدند:
    کد:
    "data aval"    1
    "data dovom"  2
    "data akhar" 100
    حالا اگه صدا کنید getValue("data dovom") به شما 2 رو بر می گردونه. جنس کلید و داده هر نوعی میتونه باشه و بر عکس ظاهر ساده که داره خیلی کاربردی هست و توی اکثر زبون ها پیاده سازی شده. مثالی که تو این لینک هست رو یه نگاه بندازید بیشتر متوجه میشید. (کد با جاوا هست ولی متوجه میشید)
    http://www.tutorialspoint.com/java/j...hmap_class.htm


    اگر جاوا رو متوجه نشدید. C++ رو ببینید.
    http://www.cplusplus.com/reference/map/map/
    ویرایش توسط shahin : 05-04-2014 در ساعت 19:19 دلیل: قرار دادن لینک c++

  12. کاربران : 2 تشکر کرده اند از شما shahin برای ارسال این پست سودمند:


  13. #9
    کاربر ارشد 1nafar آواتار ها
    تاریخ عضویت
    Jul 2007
    نوشته ها
    2,745
    تشکر
    1,266
    تشکر شده 4,874 بار در 1,377 پست

    پیش فرض

    سلام
    به نظر من اجرای چنین پروژه ای با توجه به وجود تنوع در عناصر ذخیره سازی داده ( حافظه ها ) زیاد قابل توجیح نیست .
    معمولا من از حافظه های زیر ذخیره کردن داده استفاده میکنم :
    این قطعات به صورت استاندارد برای ذخیره سازی داده استفاده میشن و می شه گفت دیتابیس میکروکنترلر هستند :
    1- حافظه های EEPRM سریال ( با پروتکل I2C مثل AT24C512)
    2- حافظه های فلش سریال ( با پروتکل SPI مثل AT45DB163 )
    3- حافظه های FLASH و EEPROM موازی ( مثل AT28C64 ) .
    سایر حافظه ها مثل MMC یا SD یا ... برای ذخیره سازی داده های مهم پیشنهاد نمیشن و استفاده از اونا ممکنه باعث ایجاد خطا بشه ( از بین رفتن داده ، ایجاد خطا در هنگام خوندن یا نوشتن ، در دسترس نبودن ( جدا شدن توسط کاربر از میکروکنترلر ) و ... ) .
    تمامی این قطعات دارای پایه ای به نام WP یا Write Protect هستند ، یا صفر یا یک شدن این پایه ، حافظه به حالت فقط خوندنی میره و به نوعی دیتابیس در برابر نوشتن محافظت میشه .
    برنامه نویس میتونه با توجه به نوع داده ای که داره ، این حافظه ها رو تقسیم بندی کنه و به هر بخش ، یک نام یا شماره رو اختصاص رو بده .
    مثال :
    در یک پروژه که از میکروکنترلر AT91SAM7X256 به عنوان کنترل کننده اصلی استفاده شده ، کلیه داده های در یک AT24C512 ذخیره میشن ، در برنامه میکروکنترلر از توابع زیر برای خوندن و نوشتن حافظه استفاده میشه :
    کد:
    //-----------------------------------------------------------------------------
    // reads data from a slave on the TWI bus. An optional
    
    unsigned int Eeprom_Read(
        unsigned int iaddress)
    {    // Set STOP signal if only one byte is sent
          unsigned char Data1,Data2;
    	   unsigned short eedata=0;
            AT91C_BASE_TWI->TWI_CR |= AT91C_TWI_STOP;
            // Start read
    		// Set slave address and number of internal address bytes
        AT91C_BASE_TWI->TWI_MMR = 0;
        AT91C_BASE_TWI->TWI_MMR = (2 << 8) | AT91C_TWI_MREAD | (0x50 << 16);
        // Set internal address bytes
        AT91C_BASE_TWI->TWI_IADR = 0;
        AT91C_BASE_TWI->TWI_IADR = iaddress;
    
        // Send START condition
        AT91C_BASE_TWI->TWI_CR = AT91C_TWI_START;
    
            // Read all bytes, setting STOP before the last byte
           
    
                  AT91C_BASE_TWI->TWI_CR |= AT91C_TWI_STOP;
                
                // Wait for byte then read and store it
    						while(!((AT91C_BASE_TWI->TWI_SR & AT91C_TWI_RXRDY) == AT91C_TWI_RXRDY));
                Data1 = AT91C_BASE_TWI->TWI_RHR;
    									
            // Wait for transfer to be complete
    				while(!((AT91C_BASE_TWI->TWI_SR & AT91C_TWI_TXCOMP) == AT91C_TWI_TXCOMP));
    
        AT91C_BASE_TWI->TWI_IADR = iaddress+1;
    
        // Send START condition
        AT91C_BASE_TWI->TWI_CR = AT91C_TWI_START;
    
            // Read all bytes, setting STOP before the last byte
           
    
                  AT91C_BASE_TWI->TWI_CR |= AT91C_TWI_STOP;
                
                // Wait for byte then read and store it
    						while(!((AT91C_BASE_TWI->TWI_SR & AT91C_TWI_RXRDY) == AT91C_TWI_RXRDY));
                Data2 = AT91C_BASE_TWI->TWI_RHR;
    									
            // Wait for transfer to be complete
    				while(!((AT91C_BASE_TWI->TWI_SR & AT91C_TWI_TXCOMP) == AT91C_TWI_TXCOMP));
            
        			   eedata=(Data2<<8)|Data1;
        return eedata;
    }
    
    //------------------------------------------------------------------------------
    // sends data to a slave on the TWI bus. An optional callback
    
    unsigned char Eeprom_Write(
        unsigned int iaddress,
        unsigned int pData)
    {
    
     unsigned short temp2;
    				// Set slave address and number of internal address bytes
        AT91C_BASE_TWI->TWI_MMR = 0;
        AT91C_BASE_TWI->TWI_MMR = (2 << 8) | (0x50 << 16);
        // Set internal address bytes
        AT91C_BASE_TWI->TWI_IADR = 0;
        AT91C_BASE_TWI->TWI_IADR = iaddress;	
    		minDel();  
    			  temp2=(pData<<8);
    	          WRITE_PROTECT=0;
    minDel();
               // Wait before sending the next byte
              while(!((AT91C_BASE_TWI->TWI_SR & AT91C_TWI_TXRDY) == AT91C_TWI_TXRDY));
             AT91C_BASE_TWI->TWI_THR = (temp2>>8);      
    				// Wait for transfer to be complete
    				while(!((AT91C_BASE_TWI->TWI_SR & AT91C_TWI_TXCOMP) == AT91C_TWI_TXCOMP));
    					minDel();
    					minDel();
    					minDel();
    
    		    AT91C_BASE_TWI->TWI_IADR = iaddress+1;	
    		minDel();  
    			  
               // Wait before sending the next byte
              while(!((AT91C_BASE_TWI->TWI_SR & AT91C_TWI_TXRDY) == AT91C_TWI_TXRDY));
             AT91C_BASE_TWI->TWI_THR =(pData>>8);      
    				// Wait for transfer to be complete
    				while(!((AT91C_BASE_TWI->TWI_SR & AT91C_TWI_TXCOMP) == AT91C_TWI_TXCOMP));
    					minDel();
    					minDel();
    					minDel();
    					WRITE_PROTECT=0;
    //– In multiple data write operation, when both THR and shift register are empty, a STOP condition is automatically
    //sent and we dont need to setd stop bit .   
        return 0;
    }
    داده ها که همگی دارای طول 16 بیت هستند ( از 0 تا 65535) در دو بایت از حافظه ی EEPROM ذخیره میشن ، پس برای نوشتن داده کافیه که به صورت زیر عمل بشه :
    کد:
    					 Eeprom_Write(154,Cold_overload_I_ib_setting[1]) ;
    				    
    					 Eeprom_Write(156,Cold_overload_I_ib_setting[2]) ;
    				    
    					 Eeprom_Write(158,Cold_overload_I_ib_setting[3]) ;
    				    
    					 Eeprom_Write(160,Cold_overload_I_ib_setting[4]) ;
    				    
    					 Eeprom_Write(162,Cold_overload_I_ib_setting[5]) ;
    				    
    					 Eeprom_Write(164,Cold_overload_I_ib_setting[6]) ;
    				    
    					 Eeprom_Write(166,Cold_overload_I_ib_setting[7]) ;
    				    
    					 Eeprom_Write(168,Cold_overload_I_ib_setting[8]) ;
    				    
    					 Eeprom_Write(170,Cold_overload_I_ib_setting[9]) ;
    				    
    					 Eeprom_Write(172,Cold_overload_I_ib_setting[10]) ;
    				    
    					 Eeprom_Write(174,Cold_overload_I_ib_setting[11]) ;
    				    
    					 Eeprom_Write(176,Cold_overload_Time_setting[1]) ;
    				    
    					 Eeprom_Write(178,Cold_overload_Time_setting[2]) ;
    				    
    					 Eeprom_Write(180,Cold_overload_Time_setting[3]) ;
    و برای خوندن داده کافیه دستور زیر اجرا بشه :
    کد:
    VAR=Eeprom_Read(DATA_ID);
    همون طور که مشاهده میکنید ، این روش که به صورت معمول در اغلب برنامه ها استفاده میشه ، همون روشی هست که اقای shahin توضیح دادن . به بیان ساده تر در میکروکنترلر به دلیل دسترسی ساده به لایه های سخت افزاری ، امکان خوندن و نوشتن داده میتونه در بالاترین سرعت و با کمترین خطا ، در صورت استفاده از قطعه ی ذخیره ساز استاندارد ( سه مورد ذکر شده ) انجام بشه ؛ در این حالت نیازی به ایجاد توابع سا سخت افزار های اضافه نیست .

  14. کاربران : 2 تشکر کرده اند از شما 1nafar برای ارسال این پست سودمند:


  15. #10
    مدیرکل انجمنها
    تاریخ عضویت
    May 2011
    نام
    احسان صفامنش
    نوشته ها
    1,763
    تشکر
    919
    تشکر شده 2,261 بار در 1,056 پست

    پیش فرض

    توضیحی که 1nafar عزیز دادن در سطح سخت افزار هست و برای داده های کوچک مناسب هست و بدون خطا. البته تا وقتی که به دلایلی مثلا بزرگ شدن پایگاه داده خودمون خرابش نکنیم.
    شما میتونید با همین وسایل استاندار ذخیره سازی مطمئن، سطح برنامه نویسی رو بالاتر بیارید و یک کتابخونه بنویسید که بدون درگیر شدن با رجیسترها و مانند توابع cmsis امکانات اولیه ی یک دیتابیس رو فراهم کنید.
    ولی پیشنهاد میکنم اول خوب فکر کنید که واقعا حاضرید تا آخرش برید و وسط راه رها نکنید چون پیچیده میشه و زمان میبره.
    ویرایش توسط esisafa : 07-04-2014 در ساعت 00:37

  16. کاربران : 2 تشکر کرده اند از شما esisafa برای ارسال این پست سودمند:


  17. #11
    کاربر فعال
    تاریخ عضویت
    Nov 2009
    نوشته ها
    115
    تشکر
    77
    تشکر شده 83 بار در 35 پست

    پیش فرض

    سلام
    صحبت شما را در مورد اطلاعاتی در حجم کم قبول دارم اما در بعضی مواقع نیاز هست که حجم بالایی از اطلاعات را اونم با فرمتی مشخص ذخیره کنیم اون موقع هست که واقعا به چیزی مثل دیتا بیس لازم داریم چون الزاما کاربر مجبور به استفاده از sd یا nand و یا حتی شاید هارد و فلش بشه که دیگه برای درک بهتر مطالب باید از fat استفاده کنیم و در نتیجه از لایه سخت افزار دور شده ایم.
    یه مثال :شما فرض کنید دستگاهی هند هلدی می سازید که قرار آمارگیری کنه و در مواقعی نیاز به جستجو در اطلاعات ذخیره شده هم داره. حالا فرض کنید برای هر فرد یک رکورد که مجموعه ایی از خصوصیت فرد هست می خواد ذخیره بشه. یکی از مشکلات رایج که دیتا بیس می تونه حلش کنه جستجو در بین اطلاعات وارد شده(فرض کنید هر رکورد 500 بایت و ما 20000 نفر وارد کرده ایم) با توجه به اینکه در اغلب میکروکنترلر ها سرعت خواندن از دیوایس هایی جانبی کمه سرعت جستجوی ما به چند ده ثانیه میرسه. و یا اینکه بدلیل یک خطای برنامه نویسی که مستقیم با فایلها کار میکرده تمام رکورد های بالا پاک بشه و یا ...
    من خودم چندین مورد پروژه دیدم و کار کردم(شایدم برای من زیادی پیش اومده) که قراره حجم زیادی اطلاعات رو بگیره و ذخیره سازی کنه که اونجا واقعا دیتابیس لازمه. در واقع احساس نیاز شدید من رو به این سمت سوق داده. حالا فقط برای اینکه کار تکراری انجام ندم طرح سوال کردم که چنین چیزی وجود داره یا نه چون هر چی سرچ کردم به جواب دقیقی نرسیدم برای سیستم های بدون سیستم عامل.
    البته تقریبا در عید قسمت اصلی یعنی ساختار ایندکس گذاری توسط درختهای b رو انجام دادم(یکی از قابلیت هاش اینه که می تونه یک رکورد رو در بین 100 میلیون رکورد تنها به 3 دسترسی به فایل پیدا کنه اونم بدون هیچ بافر اضافه ایی) .

  18. #12
    تازه وارد
    تاریخ عضویت
    Dec 2014
    نوشته ها
    1
    تشکر
    0
    تشکر شده 0 بار در 0 پست

    پیش فرض

    سلام دوستان خسته نباشید
    آقا من هم از آی سی at28c64b خواستم استفاده کنم یک حافظه استاتیک موازی هست طبق دیتا شیت ابتدا آدرس رو اعمال میکنم و پالس های پای های ce , oe , wr را به ترتیب برای نوشتن و خواندن به صورت دستی اعمال میکنم (با استفاده از کلید های پول آپ) ولی هر کاری میکنم نمیتونم عمل نوشتن رو انجام بدم در هر حالت که خواندن رو فعال میکنم کلا خروجی ها یک میشه!!! چطوری باید توی این حافظه دیتا نوشت؟؟؟
    میشه راهنمایی کنین واقعا چیز ساده ای نمیدونم مشکل کجاست
    کاربر ارشد 1nafar گفتن من کار کردم اگه میشه خواهشا کمکم کنین ممنون

موضوعات مشابه

  1. نرم افزار تبدیل WAV به Data Base
    توسط sajjad_AD در انجمن سایر موارد مرتبط با میکرو کنترلرها
    پاسخ: 2
    آخرين نوشته: 01-04-2015, 16:12
  2. Cadence IC 610 Base & ISR
    توسط oktan در انجمن دانلود نرم افزارهای برق و الکترونیک
    پاسخ: 2
    آخرين نوشته: 15-12-2013, 17:50
  3. 2D Soccer Simulation Base
    توسط Romanof در انجمن پرسش و پاسخ (نرم افزارهای تخصصی)
    پاسخ: 2
    آخرين نوشته: 30-09-2010, 15:39
  4. Windows Embedded Compact 7
    توسط arsalan681 در انجمن مباحث کلی ARM
    پاسخ: 0
    آخرين نوشته: 04-06-2010, 12:24
  5. درخواست نرم افزار IAR Embedded Workbench for
    توسط naeemafar در انجمن در خواست نرم افزارو كرك
    پاسخ: 6
    آخرين نوشته: 13-02-2010, 19:14

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •