اطلاعیه

Collapse
No announcement yet.

پاک کردن محتویات pc و stack در زبان c

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

    پاک کردن محتویات pc و stack در زبان c

    سلام به همگی
    من یه موضوع ایجاد کردم قبلا به این نام : برگشت ار اینتراپت به یه جای خاص از برنامه
    ولی به نتیجه نرسیدم.
    من میخام محتوایات pc و stack رو ریست یا همون پاک کنم تو برنامه.باید چیکار کنم؟
    اینجور که فهمیدم باید از دستورات اسمبلی استفاده کنم.دستورش چیه؟
    میشه نمونه کد برام بزارید.مبتدی هستم.
    ممنون

    #2
    پاسخ : پاک کردن محتویات pc و stack در زبان c

    سلام
    فکر کنم اینا خوب و کافی باشه:


    http://www.avr-tutorials.com/general...-stack-pointer

    و

    http://www.avrfreaks.net/index.php?n...ic&t=64671

    خودشون بود؟ به کارت اومد؟

    دیدگاه


      #3
      پاسخ : پاک کردن محتویات pc و stack در زبان c

      مرسی داداش.یه چیزایی فهمیدم اما هنوز نمیدونم باید تو برنامه خودم چی بنویسم.ب
      باید چه کدی بزارم تا ریست بشه stack؟؟؟
      اگه میشه بیشتر راهنماییم کن

      دیدگاه


        #4
        پاسخ : پاک کردن محتویات pc و stack در زبان c

        نوشته اصلی توسط magyd
        مرسی داداش.یه چیزایی فهمیدم اما هنوز نمیدونم باید تو برنامه خودم چی بنویسم.ب
        باید چه کدی بزارم تا ریست بشه stack؟؟؟
        اگه میشه بیشتر راهنماییم کن
        ریست بشه!؟
        کامپایلرت چیه؟

        دیدگاه


          #5
          پاسخ : پاک کردن محتویات pc و stack در زبان c

          اره داداش.codevision

          دیدگاه


            #6
            پاسخ : پاک کردن محتویات pc و stack در زبان c

            من اینجا مطرح کردم سوالتون رو و جواب رو هم می تونید بخونید:

            http://www.avrfreaks.net/index.php?n...c&t=132483

            ولی واقعا سوالتون یه جورایی انگار اشتباهه. واقعا چرا می خوایین این کار رو بکنید؟ کاش کدهاتون رو قرار می دادید تا در صورت امکان بهترین کمک رو بهتون میکردیم. اگه دقت کنید متوجه می شید که آقای کلیف هم گفته این کار احمقانه ایه!

            دیدگاه


              #7
              پاسخ : پاک کردن محتویات pc و stack در زبان c

              داداش من شرمنده هستم تو زحمت افتادی
              بفرما داداش
              این کدها بنده :
              #include <mega32.h>
              #include <Delay.h>

              void main () {
              DDRB=0b00000011 ; //output
              PORTB=0b11111100;
              DDRD=0b00000000; // in with pull up
              PORTD=0b1111111;
              MCUCR=00001111; // int0 va int1 ( fa'al labe)
              GICR=11000000; //masking
              GIFR=00000000; //flag
              #asm ("sei&quot //enable int
              while (1) {

              if(PINB.6==0 || PINB.5==0){ //limit sw chap ya rast
              PORTB.0=0; // khamosh shodan motor
              PORTB.1=0;
              delay_ms(80);
              PORTB.0=0;
              PORTB.1=1; // baste shodan darb
              delay_ms(140);
              delay_ms(100); // zamane baste shodane kamel 5 sec
              delay_ms(100);
              delay_ms(100);
              delay_ms(100);
              PORTB.0=0;
              PORTB.1=0; // khamosh shodan motor
              }; // if
              }; //while
              }; //main
              interrupt [ EXT_INT0 ] void int0 (){

              while (PINB.6==1 && PINB.5==1 ){
              PORTB.0=1; // baz shodane darb
              PORTB.1=0;
              };
              };

              وقتی اینتراپت میاد و زیر وقفه انجام میشه برمیگرده به جایی که اینتراپت اومده که اگه اونجا روی delay ها باشه و وقفه بیاد ،وقفه رو نمیبینه.واسه همین میخام ریست بشه و بره از اول.
              نخندید بهما...راه دیگه خوب بلد نیستم.
              اینم کاری که میخام بکنم :

              یه درب کشویی داریم.
              2تا میکرو سوییچ سمت چپ و راست درب.
              1 چشم که به عنوان اینتراپت تعریف شده است بالای درب.(خودم اینتراپت تعریفش کردم چون باید درب در هر حالتی که هست مثلا بسته یا درحال بسته شدن وقتی چشم دید شروع به باز شدن کنه!
              زمان بسته شدن کامل درب 5 ثانیه است.
              وقتی اینتراپت میاد (یعنی چشم میبینه).باید درب باز بشه و تا زمانی که بخوره به میکروسووییچ چپ یا راست روشن بمونه تا درب تا انتها باز بشه ولی یعد از زمان کوناهی خاموش میشه بعضی وقتا هم قاط میزنه انگار..(رو تغذیه خازن هست و تغذیه موتور از میکرو جداست).
              خروجی ها مشکل نداره.راش انداختم و کار میده فقط این برنامه و اینتراپت رو ببینید.مرسی دوستان

              دیدگاه


                #8
                پاسخ : پاک کردن محتویات pc و stack در زبان c

                کی گفته وقتی روی تاخیر هستش وقفه کار نمیکنه؟
                شما مطمئن هستی؟ تست کردی؟

                دیدگاه


                  #9
                  پاسخ : پاک کردن محتویات pc و stack در زبان c

                  من کدهاتو توی همون تاپیک فریکس برات گذاشتم می خواستم یه بعضی اشتباهاتت رو بهت بگم که دیدم آقای کارتمن هم گفتن. دیگه ننوشتم(اشتباهات خنده داری داشت که البته من بهشون دست نزدم، تعجب میکنم! کدویژن هیچ اخطاری نسبت به اون اشتباهات بهت نداد؟ واقعا کامپایلش کرد؟). اگه دوباره نگاه کنی متوجه میشی ایشون بهترین راهنمایی رو کردن. واقعا همونطور که ایشون گفتن نیازی به دستکاری استک نبود. روزی که من اون تاپیک شما رو دیدم و اون فرد هم به شما گفت استک رو دستکاری کنید به نظرم کاملا همچین کاری اشتباه اومد.

                  1- شما یادت رفته بود 0b رو قبل 3 تا ریجستر بذاری.
                  2- استفاده از وقفه خارجی برای این کار اشتباهه(ممکنه وقفه ناخواسته ایجاد کنه)
                  3- طبق گفته ایشون یکی از تایمر ها رو در مد CTC به همراه وقفه برای هر 10 میلی ثانیه فعال کنید(باهاش چک کنید و کنترل کنید).

                  ایشون یکی از افراد فعال و فوق العاده باسواد و با تجربه در این زمینه ها هست. می تونید به تعداد پست های ایشون دقت کنید.

                  دیدگاه


                    #10
                    پاسخ : پاک کردن محتویات pc و stack در زبان c

                    داداش دستت درد نکنه.منو بیش از این شرمنده نکن.. :biggrin:
                    میدونم ناشی هستم ولی باز ممنون که هوا مارو داشتی
                    سالاری عزیز. :smile:

                    دیدگاه


                      #11
                      پاسخ : پاک کردن محتویات pc و stack در زبان c

                      شما چرا لقمه رو دور سرت میچرخونی!!!
                      نه نیاز به اینتراپت داری نه تنظیمات خاص
                      شماتیک مدارتو بذار تا بهتر کمکت کنیم

                      دیدگاه


                        #12
                        پاسخ : پاک کردن محتویات pc و stack در زبان c

                        شماتیک براش نکشیدم اما الگوریتم به این شکله :
                        یه درب کشویی داریم.
                        2تا میکرو سوییچ سمت چپ و راست درب.
                        1 چشم که به عنوان اینتراپت تعریف شده است بالای درب.(خودم اینتراپت تعریفش کردم چون باید درب در هر حالتی که هست مثلا بسته یا درحال بسته شدن وقتی چشم دید شروع به باز شدن کنه!
                        زمان بسته شدن کامل درب 5 ثانیه است.
                        وقتی اینتراپت میاد (یعنی چشم میبینه).باید درب باز بشه و تا زمانی که بخوره به میکروسووییچ چپ یا راست روشن بمونه تا درب تا انتها باز بشه ولی یعد از زمان کوناهی خاموش میشه بعضی وقتا هم قاط میزنه انگار..
                        میشه یه موتور dc چپگرد - راست گرد با دو تا میکرو سوییج و یه چشم

                        دیدگاه


                          #13
                          پاسخ : پاک کردن محتویات pc و stack در زبان c

                          rozeh جان میشه اون بند 3 رو بیشتر توضیح بدی!!!
                          البته خیلی بیشتر. :biggrin:
                          چطوری باید رو درست کنم؟!!
                          مرسی داداش

                          دیدگاه


                            #14
                            پاسخ : پاک کردن محتویات pc و stack در زبان c

                            نوشته اصلی توسط magyd
                            rozeh جان میشه اون بند 3 رو بیشتر توضیح بدی!!!
                            البته خیلی بیشتر. :biggrin:
                            چطوری باید رو درست کنم؟!!
                            مرسی داداش
                            خواهش میکنم :smile:. ولی لزومی به توضیح من نیست یه جستجو ساده که همه چیز رو نشون میده:

                            http://www.picpars.com/189/%D8%A2%D9...86-CodeVision/

                            و یا:

                            http://newscience.blogfa.com/8609.aspx

                            و یا:

                            http://e-m-r.mihanblog.com/post/50

                            شاید این صفحه با کدهاش کمکت هم بکنه:

                            http://jumptuck.com/2010/08/01/garage-door-code-button/

                            دیدگاه


                              #15
                              پاسخ : پاک کردن محتویات pc و stack در زبان c

                              نوشته اصلی توسط rozeh
                              روزی که من اون تاپیک شما رو دیدم و اون فرد هم به شما گفت استک رو دستکاری کنید به نظرم کاملا همچین کاری اشتباه اومد.
                              اگر منظور جنابعالی به بنده هست باید بگم جوابی که داده شد در پاسخ به سوال خاصی بود که کاربر magyd پرسیده بودند و هیچ توضیحی در مورد دلیل اینکه نیاز به برگشت به مکان خاصی از برنامه پس از برگشت از وقفه دارند ندادند.در واقع پاسخ داده شده با توجه به عنوان تاپیکی که انتخاب نموده بودند و نوع سوالی که مطرح کردند کاملا صحیح و بی عیب است.
                              http://www.eca.ir/forum2/index.php?t...1774#msg461774

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

                              دیدگاه

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