اطلاعیه

Collapse
No announcement yet.

جداسازی اعداد از متن در C یا c++ برای میکرو AVR

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

    #91
    پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

    لینک کتابخانه:

    دیدگاه


      #92
      پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

      باسلام.
      خب برادر من تقصیر خودته دیگه!این کدویژن در حالتی که خریداری بشه هم کامپایلر استاندارد و جالبی نیست چه برسه نسخه های کرک.
      من به شما پیشنهاد میکنم از avr-gcc استفاده کنید ،این کامپایلر بااستاندارد های c مطابقت کامل داره همچنین داکیومنت استاندارد خودشو داره که بروز هم هست:http://savannah.nongnu.org/projects/avr-libc/
      به شخصه pdf داکیومنت رو پرینت کردم همیشه هم کنار دستمه ،انگلیسی سطح بالایی هم نداره میشه راحت خوندش.
      برای درک کار با رجیستر ها هم بهتره آموزش های مهندس کی نژاد رو استفاده کنید با اختلاف کامل ترین و بهترین آموزش AVR هست.البته بهتره register summary چند تا از میکرو های پر کاربرد مثل مگا 32 ،مگا 8،مگا 16 ،تاینی 13 رو هم پرینت بگیرید تا بهشون راحت دسترسی داشته باشید.

      درکل اگه برای کار ساده ای مثل جدا کردن عدد از رشته نشه از امکانات استاندارد c استفاده کرد حتما مشکلات بدتری هم بوجود خواهد اومد!

      دیدگاه


        #93
        پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

        ممنون
        سلام عادت کردم به این نرم افزار منهای ایراداتش واقعا محیط عالی داره
        ممنون

        دیدگاه


          #94
          پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

          فرصت شد کدتتون رو تست کردم فقط puts رو تو ترمینالم نشون می ده و ssanf رو نشون نمی ده:
          کد:
          [FONT=Yekan]puts(raw_data);
          [/FONT][FONT=Yekan]        sscanf(raw_data,"%*s%f%*s",&data);[/FONT]
          دلیل: ادغام دو پست برای جلوگیری از اسپم

          یعنی خروجی فقط اینه:
          کد:
          "SS      120.23454g"

          دیدگاه


            #95
            پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

            باسلام.
            اون puts صرفا جهت تست بود و وجودش اصلا مهم نیست، شما صرفا از بخش sscanf استفاده کنید تا عدد اعشاری در متغیر دیتا ذخیره بشه.
            بعد از اون میتونید هر بلایی سر دیتا بیارید.
            کد:
            [CPP]
            int extract(char raw_data){
                float data;
                sscanf(raw_data,"%*s%f%*s",&data);
                return data;
            }
            [/CPP]
            این هم یه نمونه تابع که میتونید به راحتی ازش استفاده کنید(البته فایل stdio.h حتما اینکلود بشه و تابع حتما بالای برنامه معرفی بشه)

            دیدگاه


              #96
              پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

              سلام مهندس جان تو کد ویژن وقتی %f هست هیچکاری اتفاق نمی افته حتی خطا هم نمی گیره.

              دلیل: ادغام دو پست برای جلوگیری از اسپم

              راستی سوالی دارم:
              همزمان تو نرم افزار دوتا while باشه با اجرا شدن اولی دومی از کار می افته این راحلش چیه ایا باید از اینتراپت خارجی استفاده کرد

              دیدگاه


                #97
                پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

                نوشته اصلی توسط flightsazan نمایش پست ها
                سلام مهندس جان تو کد ویژن وقتی %f هست هیچکاری اتفاق نمی افته حتی خطا هم نمی گیره.دلیل: ادغام دو پست برای جلوگیری از اسپمراستی سوالی دارم:همزمان تو نرم افزار دوتا while باشه با اجرا شدن اولی دومی از کار می افته این راحلش چیه ایا باید از اینتراپت خارجی استفاده کرد
                استفاده از while های مختلف و یا حتی تو در تو از لحاظ برنامه نویسی ایرادی ندارد.

                دیدگاه


                  #98
                  پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

                  نوشته اصلی توسط flightsazan نمایش پست ها
                  سلام مهندس جان تو کد ویژن وقتی %f هست هیچکاری اتفاق نمی افته حتی خطا هم نمی گیره.

                  دلیل: ادغام دو پست برای جلوگیری از اسپم

                  راستی سوالی دارم:
                  همزمان تو نرم افزار دوتا while باشه با اجرا شدن اولی دومی از کار می افته این راحلش چیه ایا باید از اینتراپت خارجی استفاده کرد
                  خطا نمیگیره چون از نظر قواعد نحوی مشکلی وجود نداره. اگر قرار به خطا باشه هم خطای هنگام اجراس که توی میکروکنترلر نمیشه دیدش.
                  بعدشم من و دوستان بارها گفتیم کدویژن کلا به درد نمیخوره و انتظاری ازش نباید داشت. خوبه خودتم دیدی scanf کدویژن اعشاری نداره؛ دیگه چه اصراری داری از این شبه کمپایلر بیمار استفاده کنی؟؟؟ یا دنبال راه دیگه باش، یا اگر میخوای حتما scanf استفاده کنی برو روی یک کمپایلر درست حسابی.
                  در مورد دوتا while هم، دوتا while داریم تا دوتا while! دوتا while چه شکلی منظورته؟؟؟ میکروکنترلر AVR تک هسته ایه و این معنیش اینه در هر لحظه تنها یک خط برنامه اجرا میشه. نباید انتظار داشته باشی هیچ دو خطی که حتی کنار هم هستن در یک لحظه با هم اجرا بشن.

                  دیدگاه


                    #99
                    پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

                    سلام
                    اول ممنون در حال یادگیری اتمل هستم.
                    دوم منظورم یه تابع نوشتم دارای وایل بود بعد چون تابه اصلی هم وایل داره اجراش دوتا یکی متوقف میشه
                    سوم چطور می تونم رشته دریافتی از پورت سریال رو داخل گیمه قرار بدم
                    علت:
                    کد:
                    char str[] =  "sd       2234.453g";
                    بخودی خود صحیح هست ولی وقتی می خواهم عدد ثابت بهش ندم و از ترمینال که من تایپ می کنم دیتا بگیره مشکل دار میشه
                    مثلا له این شکل:
                    کد:
                    char str[] = getchar();
                    دلیل: ادغام دو پست برای جلوگیری از اسپم

                    ظاهرا هر دو تا char هستند

                    دلیل: ادغام دو پست برای جلوگیری از اسپم

                    (data type) expression
                    حال برای آنکه نقش اپراتور cast را بهتر متوجه شوید، به نتیجه و عملکرد دو مجموعه دستورهای زیر توجه کنید.
                    مثال اول مثال دوم
                    float x ; short int x ;
                    printf ("%d\n",(int)x) ; printf ("%s\n",(char)x) ;

                    در مثال اول برای متغیر x که از نوع float اعلان شده است، 4 بایت حافظه پیش*بینی می*شود. ولی در نتیجه اجرای دستور printf سطر دوم، به دلیل دستور (int)x مقدار آن به نوع int تبدیل می*گردد و نمایش داده می*شود. بنابراین، اگر برای مثال محتوای حافظه به*صورت
                    0.26 E+7
                    باشد، مقدار 2600000 نمایش داده خواهد شد.
                    همین*طور در مثال دوم برای متغیر x که از نوع short int اعلان شده است، 2 بایت حافظه پیش*بینی می*شود، ولی درنتیجه اجرای دستور printf سطر دوم، به دلیل (char)x مقدار آن به نوع کاراکتر تبدیل می*گردد و محتوای دو بایت حافظه مزبور به*صورت یک رشته دوبایتی نمایش داده می*شود. به همین دلیل است که در فرمت چاپ مقدار متغیر مزبور، از فرمت "%s" که برای رشته است استفاده شده است. حال اگر برای مثال محتوای حافظه مربوط به متغیر x به صورت 1 2 3 4 باشد، موقع نوشتن به صورت رشته "1 2 3 4" چاپ می*شود.
                    در اینجا به اختصار یادآور می*شویم که فرمتهای "%s", "%c", "%f", "%d" به ترتیب برای متغیرهای از نوع مقادیر صحیح، اعشار، کاراکتر و رشته به کار می*روند.
                    این تو اینترنت دیدم

                    دلیل: ادغام دو پست برای جلوگیری از اسپم

                    نمی دونم با این روش میشه دیتا رو درون گیومه قرار داد

                    دیدگاه


                      پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

                      نوشته اصلی توسط flightsazan نمایش پست ها
                      سلام
                      ...
                      نمی دونم با این روش میشه دیتا رو درون گیومه قرار داد
                      با سلام
                      وقتی متغیری میخواهید تعریف کنید که از نوع رشته یا به عبارتی آرایه کاراکتری باشه برای اینکه کامپایلر متوجه بشه باید در دو طرف اون گیومه بگذارید. ولی وقتی شما دیتا را از پورت سریال میخوانید طبیعتا باید قبلا برای آن بافری از نوع char تعریف کرده باشید که دیتای دریافتی درون آن قرار بگیرد. در اینحالت دیگر نیازی نیست که خودتان گیومه به آن اضافه کنید.

                      دیدگاه


                        پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

                        درسته:
                        کد:
                        data = getchar();
                        حال می خواهم بریزم تو این مجددا:
                        کد:
                        char data[] = data;
                        نمیشه-
                        ممنون

                        دلیل: ادغام دو پست برای جلوگیری از اسپم

                        مشکل اینه که برای ورود دیتا گزینه تعریف شده این دستور است:
                        بالای بلوک یابالای تابع اصلی:
                        کد:
                        unsigned char data=0;
                        دلیل: ادغام دو پست برای جلوگیری از اسپم

                        ولی انچه من می خواهم این است:
                        کد:
                        char data[] = "ss     2345.56g";
                        جدیدترین ویرایش توسط flightsazan; ۰۳:۱۰ ۱۴۰۰/۰۴/۲۴.

                        دیدگاه


                          پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

                          الان یه موضوع جالب دیدم ولی کار نمی کنه:
                          سایت کد ویژن:
                          اعلام کرده :
                          V3.16 Commercial Release
                          • Compiler
                            • Added floating point support in (s)scanf. It can be enabled in the Project|Configure|C Compiler|Code Generation|(s)scanf options menu.
                            • Added support for the SSD1306 OLED display controller, with code examples.
                            • Added a new enhanced function parameter passing Mode 2 that allocates the 1 or 2 byte function parameter(s) to register(s) inside the function, allowing further code size reduction and increasing program execution speed. It can be enabled in the Project|Configure|C Compiler|Code Generation|Enhanced Parameter menu. If this option is enabled for older projects, that use C functions written using inline assembly, these functions must be enclosed between #pragma dstack_par+ and #pragma dstack_par- directives, in order to force using the old parameter storage Mode 1 in the data stack.
                            • Improved the code generation for inline functions.
                            • Made various improvements in the code generator.
                            • Added support for generating ELF production files for device programming in Atmel Studio.
                            • Added the #pragma fuses and #pragma lock_bits directives to enable setting the fuses and lock bits from the source file and storing them in the ELF file.
                            • Added support for programming the Moteino boards from www.lowpowerlab.com/Moteino.
                            • Fixed: an exception occured in the Atmel Studio extension if programming errors occured during program uploading to an Arduino board.

                          • CodeWizardAVR
                          • Fixed: in the code generated for ATtiny441/841 chips, the REMAP register must be initialized before enabling the USART0. Otherwise it will not have any effect.
                          • Fixed: in the CodeWizardAVR generated code for ATtiny441/841 chips, the REMAP register must be initialized before enabling the SPI. Otherwise it will not have any effect.
                          • Added PRR register initialization in the code generated for the ATtiny441/841 chips.
                          • Fixed: The CodeWizardAVR for Xmega chips dind't place the _ALTERNATE_GETCHAR_ and _ALTERNATE_PUTCHAR_ macro definitions before #include <stdio.h> when alternate versions of the getchar and putchar functions were defined.
                          • Added the possibility to load and save ELF production files.
                          • Chip Programmer
                          دلیل: ادغام دو پست برای جلوگیری از اسپم

                          تو این ورژن sscanf اعشار رو میشناسه

                          دلیل: ادغام دو پست برای جلوگیری از اسپم

                          کد:
                          http://www.hpinfotech.ro/cvavr-revision3.html
                          دلیل: ادغام دو پست برای جلوگیری از اسپم

                          کرک نسخه جدیدش نیست
                          3.45

                          دیدگاه


                            پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

                            از دستور زیر استفاده می کنم ولی کار نمی کند:
                            کد:
                            [FONT=Yekan] while (1)[/FONT]    {               
                                char str[];///= "sd      0.45g";
                                
                                 data= getchar();
                                 
                                 sscanf(str,"%c", data );
                                 // gets(*str);  
                                 puts(str);  
                                  putchar(0X0d);          
                            [FONT=Yekan]      printf("your data input%s: ",str);
                            [/FONT]
                            ,ولی در عمل اتفاقی نمی افتد
                            ممنون

                            دلیل: ادغام دو پست برای جلوگیری از اسپم

                            راستی امروز ترازو رو بررسی کردم در وزن صفر و ماکزیمم گرمی است و روش نمایش همانطور هست که قبلا ذکر کردم

                            دیدگاه


                              پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

                              نوشته اصلی توسط flightsazan نمایش پست ها

                              راستی امروز ترازو رو بررسی کردم در وزن صفر و ماکزیمم گرمی است و روش نمایش همانطور هست که قبلا ذکر کردم
                              با سلام
                              اگر رشته ارسالی را بررسی کردی و محل شروع و پایان کاراکتری وزن در صفر و ماکزیمم یکسانه اینقدر خودت را درگیر اعشار نکن. اون قسمت رشته که وزن را شامل میشه از رشته جدا کن.

                              دیدگاه


                                پاسخ : جداسازی اعداد از متن در C یا c++ برای میکرو AVR

                                - اعشار رو باید جدا کنید از رشته
                                جدیدترین ویرایش توسط znasim; ۰۹:۵۵ ۱۴۰۰/۰۴/۲۷.

                                دیدگاه

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