اطلاعیه

Collapse
No announcement yet.

ارور برنامه avr

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

    ارور برنامه avr

    سلام خدمت اساتید برنامه زیر رو فکر می کنم بدون اشکال باشه ولی تو کدویژن ارور می ده دلیلشم معلوم نیست (ایراد سمیکالون می گیره) دوستان لطفاً نگاهی بهش بندازید با تشکر
    کد:
    #include <mega32a.h>
    #define zero PORTB.0
    #define one PORTB.1
    #define mode PORTB.2
    flash unsigned char out[15]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F};
    bit a[4];
    int i=0;
    void enter (bit a[],unsigned char b[]){
    int x;
    x = atol(a);
    PORTC = x;
    PORTA = b[x];
    }
    
    
    void main(void)
    {
     PORTB = 0xFF;
     DDRB = 0x00;
     PORTA = 0x00;
     DDRA = 0xFF;
     PORTC = 0x00;
     DDRC = 0xFF;
    
    
    while (1)
          {
                if (zero==0){
                   if (i < 3){
                       a[i]=0;
                       i++;
                       }
                   if (i==3){
                       a[i]=0;
                       enter(a,out);
                       i = 0;
                    }
                   while (zero==0){};
                }
                if (one==0) {
                   if (i < 3){
                       a[i]=1;
                       i++;
                   }
                   if (i==3){
                       a[i]=1;
                       enter(a,out);
                       i = 0;
                   }
                   while (one==0){};
                }
    
    
          }
    }

    #2
    پاسخ : ارور برنامه avr

    نوشته اصلی توسط mohsen74 نمایش پست ها
    سلام خدمت اساتید برنامه زیر رو فکر می کنم بدون اشکال باشه ولی تو کدویژن ارور می ده دلیلشم معلوم نیست (ایراد سمیکالون می گیره) دوستان لطفاً نگاهی بهش بندازید با تشکر
    کد:
    #include <mega32a.h>
    #define zero PORTB.0
    #define one PORTB.1
    #define mode PORTB.2
    flash unsigned char out[15]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F};
    bit a[4];
    int i=0;
    void enter (bit a[],unsigned char b[]){
    int x;
    x = atol(a);
    PORTC = x;
    PORTA = b[x];
    }
    
    
    void main(void)
    {
     PORTB = 0xFF;
     DDRB = 0x00;
     PORTA = 0x00;
     DDRA = 0xFF;
     PORTC = 0x00;
     DDRC = 0xFF;
    
    
    while (1)
          {
                if (zero==0){
                   if (i < 3){
                       a[i]=0;
                       i++;
                       }
                   if (i==3){
                       a[i]=0;
                       enter(a,out);
                       i = 0;
                    }
                   while (zero==0){};
                }
                if (one==0) {
                   if (i < 3){
                       a[i]=1;
                       i++;
                   }
                   if (i==3){
                       a[i]=1;
                       enter(a,out);
                       i = 0;
                   }
                   while (one==0){};
                }
    
    
          }
    }
    مربوط به کدوم خط میشه خطا مورد نظر
    اللهم صل علی محمد و ال محمد و عجل فرجهم
    پیامبر اکرم(ص):زکات علم نشر آن است.
    در کشور هاي غربي انتقال تجربيات و دانش به افراد مبتدي يک پيشرفت محسوب شده و به آن مديريت دانش مي گويند. ولي متاسفانه اين فرهنگ هنوز در کشور ايران رايج نشده است !!!

    دیدگاه


      #3
      پاسخ : ارور برنامه avr

      مربوط به خط تعریف آرایه a

      دیدگاه


        #4
        پاسخ : ارور برنامه avr

        نوشته اصلی توسط mohsen74 نمایش پست ها
        مربوط به خط تعریف آرایه a
        سلام
        کدویژن چون قواعد من در آوردی زیاد داره، خطاهایی هم که میگیره خیلی وقتا من در آوردیه! شما نوع آرایه a رو از bit به چیزی مثل unsigned char تغییر بدید، احتمالا درست بشه. البته خود من از شانس همین امروز آرایه ای از نوع unsigned char به صورت گلوبال تعریف کرده بودم ایراد گرفت، مجبور شدم به int تغییر بدم تا درست بشه!!!!
        در آخر پیشنهاد میکنم حتما برید سمت اتمل استودیو. خود منم اگر دانشگاه و سیستم آموزش مسخرش نبود، حتی فایل نصب کدویژن رو هم نگه نمیداشتم که روزی بخوام نصب کنم.

        دیدگاه


          #5
          پاسخ : ارور برنامه avr

          تشکر مهندس آرایه رو عوض کردم با unsig... حالا دو جا ایراد می گیره کلاً کلافم کرده برا شیفت به سمت اتمل منبع مناسبی که از 0 تا 100 داشته باشه سراغ ندارید؟

          دیدگاه


            #6
            پاسخ : ارور برنامه avr

            نوشته اصلی توسط mohsen74 نمایش پست ها
            تشکر مهندس آرایه رو عوض کردم با unsig... حالا دو جا ایراد می گیره کلاً کلافم کرده برا شیفت به سمت اتمل منبع مناسبی که از 0 تا 100 داشته باشه سراغ ندارید؟
            از int استفاده کنید. اون تابعی که بهش آرایه رو ارجاع میدید رو هم باید اصلاح کنید.
            اما در مورد اتمل استودیو؛ اگر به کار با رجیسترها تسلط دارید، تقریبا هیچ منبعی برای یادگیری خود میکروکنترلر نمیخواد. فقط میمونه مسائل حاشیه ای مثل توابع تاخیر و سرویس وقفه و... که همینجا بپرسید جواب میگیرید. فقط کمی زحمت داره چون دیگه از کتابخونه lcd و دماسنج و.. به صورت شسته رفته داخل IDE خبری نیست و باید یا خودتون بنویسید، یا از توی اینترنت پیدا کنید. در عوض کدهاتون بهینه تر میشه، تسلط خودتون به زبان c بالا میره و از قواعد من در آوردی و ارورهای الکی هم خبری نیست.
            جدیدترین ویرایش توسط hossein.m98; ۱۹:۰۷ ۱۳۹۸/۰۸/۰۱.

            دیدگاه


              #7
              پاسخ : ارور برنامه avr

              نه مثل اینکه درست شدنی نیست ! مهندس یه نگاهی بنداز ببین کجا اشتباه کردم بازم ارور می ده
              کد:
              #include <mega32a.h>
              #define zero PORTB.0
              #define one PORTB.1
              #define mode PORTB.2
              flash unsigned char out[15]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F};
              int a[4];
              int i=0;
              void enter (int a[],unsigned char b[]){
              int x;
              x = atol(a);
              PORTC = x;
              PORTA = b[x];
              }
              
              
              void main(void)
              {
               PORTB = 0xFF;
               DDRB = 0x00;
               PORTA = 0x00;
               DDRA = 0xFF;
               PORTC = 0x00;
               DDRC = 0xFF;
              
              
              while (1)
                    {
                          if (zero==0){
                             if (i < 3){
                                 a[i]=0;
                                 i++;
                                 }
                             if (i==3){
                                 a[i]=0;
                                 enter(a,out);
                                 i = 0;
                              }
                             while (zero==0){};
                          }
                          if (one==0) {
                             if (i < 3){
                                 a[i]=1;
                                 i++;
                             }
                             if (i==3){
                                 a[i]=1;
                                 enter(a,out);
                                 i = 0;
                             }
                             while (one==0){};
                          }
              
              
                    }
              }

              دیدگاه


                #8
                پاسخ : ارور برنامه avr

                نوشته اصلی توسط mohsen74 نمایش پست ها
                نه مثل اینکه درست شدنی نیست ! مهندس یه نگاهی بنداز ببین کجا اشتباه کردم بازم ارور می ده
                کد:
                #include <mega32a.h>
                #define zero PORTB.0
                #define one PORTB.1
                #define mode PORTB.2
                flash unsigned char out[15]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F};
                int a[4];
                int i=0;
                void enter (int a[],unsigned char b[]){
                int x;
                x = atol(a);
                PORTC = x;
                PORTA = b[x];
                }
                
                
                void main(void)
                {
                 PORTB = 0xFF;
                 DDRB = 0x00;
                 PORTA = 0x00;
                 DDRA = 0xFF;
                 PORTC = 0x00;
                 DDRC = 0xFF;
                
                
                while (1)
                      {
                            if (zero==0){
                               if (i < 3){
                                   a[i]=0;
                                   i++;
                                   }
                               if (i==3){
                                   a[i]=0;
                                   enter(a,out);
                                   i = 0;
                                }
                               while (zero==0){};
                            }
                            if (one==0) {
                               if (i < 3){
                                   a[i]=1;
                                   i++;
                               }
                               if (i==3){
                                   a[i]=1;
                                   enter(a,out);
                                   i = 0;
                               }
                               while (one==0){};
                            }
                
                
                      }
                }
                ها تازه فهمیدم. شما اسم آرگومان تابع رو هم a گذاشتید که این غلطه!!! یا اسم آرایه یا اسم آرگومان تابع رو تغییر بدید.

                دیدگاه


                  #9
                  پاسخ : ارور برنامه avr

                  مهندس اگه درست متوجه شده باشم بصورت کد زیر هنوز اشکال می گیره !
                  کد:
                  #include <mega32a.h>
                  #define zero PORTB.0
                  #define one PORTB.1
                  #define mode PORTB.2
                  flash unsigned char out[15]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F};
                  int a[4];
                  int i=0;
                  void enter (int c[],unsigned char b[]){
                  int x;
                  x = atol(c);
                  PORTC = x;
                  PORTA = b[x];
                  }
                  
                  
                  void main(void)
                  {
                   PORTB = 0xFF;
                   DDRB = 0x00;
                   PORTA = 0x00;
                   DDRA = 0xFF;
                   PORTC = 0x00;
                   DDRC = 0xFF;
                  
                  
                  while (1)
                        {
                              if (zero==0){
                                 if (i < 3){
                                     a[i]=0;
                                     i++;
                                     }
                                 if (i==3){
                                     a[i]=0;
                                     enter(a,out);
                                     i = 0;
                                  }
                                 while (zero==0){};
                              }
                              if (one==0) {
                                 if (i < 3){
                                     a[i]=1;
                                     i++;
                                 }
                                 if (i==3){
                                     a[i]=1;
                                     enter(a,out);
                                     i = 0;
                                 }
                                 while (one==0){};
                              }
                  
                  
                        }
                  }

                  دیدگاه


                    #10
                    پاسخ : ارور برنامه avr

                    نوشته اصلی توسط mohsen74 نمایش پست ها
                    مهندس اگه درست متوجه شده باشم بصورت کد زیر هنوز اشکال می گیره !
                    کد:
                    #include <mega32a.h>
                    #define zero PORTB.0
                    #define one PORTB.1
                    #define mode PORTB.2
                    flash unsigned char out[15]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F};
                    int a[4];
                    int i=0;
                    void enter (int c[],unsigned char b[]){
                    int x;
                    x = atol(c);
                    PORTC = x;
                    PORTA = b[x];
                    }
                    
                    
                    void main(void)
                    {
                     PORTB = 0xFF;
                     DDRB = 0x00;
                     PORTA = 0x00;
                     DDRA = 0xFF;
                     PORTC = 0x00;
                     DDRC = 0xFF;
                    
                    
                    while (1)
                          {
                                if (zero==0){
                                   if (i < 3){
                                       a[i]=0;
                                       i++;
                                       }
                                   if (i==3){
                                       a[i]=0;
                                       enter(a,out);
                                       i = 0;
                                    }
                                   while (zero==0){};
                                }
                                if (one==0) {
                                   if (i < 3){
                                       a[i]=1;
                                       i++;
                                   }
                                   if (i==3){
                                       a[i]=1;
                                       enter(a,out);
                                       i = 0;
                                   }
                                   while (one==0){};
                                }
                    
                    
                          }
                    }
                    گفتید ارور مربوط به تعریف a هستش؟ متن ارور چیه؟ برای اطمینان (از قبال کدویژن) تعریف enter رو به شکل زیر تغییر بدید:
                    void enter (int *c,unsigned char *b)

                    راستی تابع atol قراره چکار کنه؟ در مورد ارجاع آدرس متغیر قرار گرفته در فلش، مطمئنید نباید کار دیگه ای هم انجام بدید؟ ترجیحا بجای کلمه flash قبل از تعریف out از const استفاده و تست کنید.

                    دیدگاه


                      #11
                      پاسخ : ارور برنامه avr

                      ارورها رو براتون می نویسم (مربوط به آخرین کد )
                      کد:
                      Error: D:\avr program\test3.c(28): can't specify more than one memory attribute
                      Error: D:\avr program\test3.c(33): undefined symbol 'atol'
                      Error: D:\avr program\test3.c(35): a value of type 'unsigned char *' can't be assigned to an entity of type 'sfrb'
                      Error: D:\avr program\test3.c(56): function argument #1 of type 'int [4]' is incompatible with required parameter of type 'int * []'
                      Error: D:\avr program\test3.c(68): function argument #1 of type 'int [4]' is incompatible with required parameter of type 'int * []'
                      در مورد دستور atol تبدیل رشته 0 و 1 آرایه a به یک مقدار برا ریختن تو متغیر ایکسه که باقی ماجرا تو ادامه اومده
                      چیزای رو که گفتید انجام دادم نشد .
                      خدا خیرت بده ببینم می تونی اشکال برنامه رو بگیری

                      دیدگاه


                        #12
                        پاسخ : ارور برنامه avr

                        نوشته اصلی توسط mohsen74 نمایش پست ها
                        ارورها رو براتون می نویسم (مربوط به آخرین کد )
                        کد:
                        Error: D:\avr program\test3.c(28): can't specify more than one memory attribute
                        Error: D:\avr program\test3.c(33): undefined symbol 'atol'
                        Error: D:\avr program\test3.c(35): a value of type 'unsigned char *' can't be assigned to an entity of type 'sfrb'
                        Error: D:\avr program\test3.c(56): function argument #1 of type 'int [4]' is incompatible with required parameter of type 'int * []'
                        Error: D:\avr program\test3.c(68): function argument #1 of type 'int [4]' is incompatible with required parameter of type 'int * []'
                        در مورد دستور atol تبدیل رشته 0 و 1 آرایه a به یک مقدار برا ریختن تو متغیر ایکسه که باقی ماجرا تو ادامه اومده
                        چیزای رو که گفتید انجام دادم نشد .
                        خدا خیرت بده ببینم می تونی اشکال برنامه رو بگیری
                        خوب ارور اول داره میگه توی خط 28 متغیری تعریف شده که چندتا ویژگی حافظه ای داره و به اصطلاح نمیتونه بسازدش (احتمالا به عبارت unsigned در تعریف آرایه داره گیر میده. مشابه اون چیزی که خود من امروز گرفتارش شدم). دومین ارور هم داره میگه atol اصلا تعریف نشده. ارور سوم داره میگه آدرس نوع unsigned char رو به sfrb ارجاع بده که من نمیدونم sfrb چیه. مورد چهار و پنج هم داره ایرادی به ارجاع آرایه به تابع میگیره که من نمیفهمم چی میگه.

                        دیدگاه


                          #13
                          پاسخ : ارور برنامه avr

                          خب مهندس بجای atol باید چی بزارم ؟ شاید تمامی ارورها سرمنشاشون اونه؟

                          دیدگاه


                            #14
                            پاسخ : ارور برنامه avr

                            نوشته اصلی توسط mohsen74 نمایش پست ها
                            خب مهندس بجای atol باید چی بزارم ؟ شاید تمامی ارورها سرمنشاشون اونه؟
                            اصلا این atol از کجا اومده؟ شاید مربوط به هدری باشه و شما فراموش کردید هدرش رو اضافه کنید. حقیقتا من نفهمیدم چه انتظاری از این تابع دارید وگرنه می گفتم چکار کنید. سعی کنید خودتون عملکردش رو دستی بنویسید. برای موارد دیگه هم اون آرایه out رو نوعش رو به char یا int تغییر بدید و از کلمه flash صرف نظر کنید. تابع رو هم مثل اونی که در چند پست قبلی گفتم تعریفش تو تغییر بدید. در مورد sfrb هم چون نمیدونم چیه ایده ای ندارم

                            دیدگاه


                              #15
                              پاسخ : ارور برنامه avr

                              مهندس تغییراتی تو کد بصورت دستی دادم که فقط یک ارور می گیره اونم مربوط به همون atol هست در مورد این دستور تو کتاب جابرالوندی استفاده کرده تو یه برنامه تو صفحه 224 که جلوش توضیح داده :
                              کد:
                              num=atol(str_num)
                              این کد برا تبدیل رشته کاراکتری تنظیم شده به عدد صحیحه .
                              تابع رو برا گرفتن رشته صفر و یک های درون آرایه a می خوام که درون رجیستر پورت c نشون داده بشه وبعدش بر اساس وزن بیتی که داره اندیکس یک مقدار درون آرایه out رو به خروجی پورت a ببره راهی بنظرتون می رسه؟
                              کد:
                              #include <mega32a.h>
                              #define zero PORTB.0
                              #define one PORTB.1
                              #define mode PORTB.2
                              unsigned char out[15]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F};
                              int a[4];
                              int i=0;
                              void enter (int c[],unsigned char b[]){
                              int x;
                              x = atoi(c);
                              PORTC = x;
                              PORTA = b[x];
                              }
                              
                              
                              void main(void)
                              {
                               PORTB = 0xFF;
                               DDRB = 0x00;
                               PORTA = 0x00;
                               DDRA = 0xFF;
                               PORTC = 0x00;
                               DDRC = 0xFF;
                              
                              
                              while (1)
                                    {
                                          if (zero==0){
                                             if (i < 3){
                                                 a[i]=0;
                                                 i++;
                                                 }
                                             if (i==3){
                                                 a[i]=0;
                                                 enter(a,out);
                                                 i = 0;
                                              }
                                             while (zero==0){};
                                          }
                                          if (one==0) {
                                             if (i < 3){
                                                 a[i]=1;
                                                 i++;
                                             }
                                             if (i==3){
                                                 a[i]=1;
                                                 enter(a,out);
                                                 i = 0;
                                             }
                                             while (one==0){};
                                          }
                              
                              
                                    }
                              }
                              دلیل: ادغام دو پست برای جلوگیری از اسپم

                              مهندس به اولشم پیش پردازنده زیر رو بکار بردم ولی افاقه نکرد
                              کد:
                              #include <stdlib.h>

                              دیدگاه

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