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

موضوع: حلقه بی نهایت برنامه در استارت آپ keil

  1. #1
    کاربر علاقه مند
    تاریخ عضویت
    May 2010
    نوشته ها
    67
    تشکر
    727
    تشکر شده 145 بار در 49 پست

    پیش فرض حلقه بی نهایت برنامه در استارت آپ keil

    با سلام
    ضمن تبريک سال نو.

    برای برد مبتنی بر at91sam7x256

    در keil ک.ر.ک شده ورژن 402 و 412 و الان 420 برنامه هاي تست چشمکزن و پالس مربعي روي پايه ها کار مي کنند.
    در ديباگ نيز شبيه سازي درست انجام مي شود.(بدون اينکه در کد sam7.s گير کند ، وارد برنامه اصلي کد C و main مي شود.)

    اما حجم برنامه من به بيش از 80 کيلو بايت رسيده ، و برنامه روي سخت افزار اجرا نمي شود،
    در شبيه ساز (ديباگ) مشاهده مي شود که برنامه در اين قسمت از startup :
    sam7.s
    گرفتار شده است(در خط سوم اين کدها - با اجرا توسط کليد تک پله اي : F11):


    IMPORT __main
    LDR R0, =__main
    BX R0

    دوستان گرامي، آيا به اين مسئله برخورد داشته ايد؟

    اين دو پاسخ هم در سايت keil کمکي نکرد!





    Vectors LDR PC,Reset_Addr
    LDR PC,Undef_Addr
    LDR PC,SWI_Addr
    LDR PC,PAbt_Addr
    LDR PC,DAbt_Addr
    NOP ; Reserved Vector
    ; LDR PC,IRQ_Addr
    LDR PC,[PC,#-0xF20] ; Vector From AIC_IVR
    ; LDR PC,FIQ_Addr
    LDR PC,[PC,#-0xF20] ; Vector From AIC_FVR


    Reset_Addr DCD Reset_Handler
    Undef_Addr DCD Undef_Handler
    SWI_Addr DCD SWI_Handler
    PAbt_Addr DCD PAbt_Handler
    DAbt_Addr DCD DAbt_Handler
    DCD 0 ; Reserved Address
    IRQ_Addr DCD IRQ_Handler
    FIQ_Addr DCD FIQ_Handler

    Undef_Handler B Undef_Handler

    SWI_Handler B SWI_Handler اين خط هم موقع استاپ (ديباگ) : محلي است که توقف نشان داده مي شود.

    PAbt_Handler B PAbt_Handler
    DAbt_Handler B DAbt_Handler
    IRQ_Handler B IRQ_Handler
    FIQ_Handler B FIQ_Handler


    در کدهای بالا ، لوپهای بی نهایت برای handler ها تشکیل شده،
    سئوال دیگر: برنامه به چه دلایلی به کدهای فوق پرش می کند؟

    با سپاس

    پ.ن: این پست در سایت همسایه هم ارسال شده ، به دلیل گرفتاری احتمالی دوستان در startup
    در اینجا هم ارایه شده تا پاسخ ها به عنوان راهنمایی به هر دو جا منتقل شود .

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

  3. #2
    مدیرکل سایت kavir آواتار ها
    تاریخ عضویت
    Jun 2007
    نام
    زارعی
    نوشته ها
    3,547
    تشکر
    1,218
    تشکر شده 5,684 بار در 1,801 پست

    پیش فرض

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

    اگر چه دیر ولی برگشتم به جمع دوستان قدیمی....

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


  5. #3
    کاربر علاقه مند
    تاریخ عضویت
    May 2010
    نوشته ها
    67
    تشکر
    727
    تشکر شده 145 بار در 49 پست

    پیش فرض

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

    فروم هاي سايت keil را دارم مطالعه مي کنم براي بررسي و رفع مشکل.
    فعلا با تيک زدن use micro lib در options برنامه از مشکل فوق عبور کرده و وارد main شده.

    حالا با Periodic Interval Timer : PIT :
    که براي تايمينگ کلي برنامه استفاده مي کنم مشکل ايجاد شده.

    مدارک اتمل نوشته که با رسيدن شمارش کانتر به عدد هدف ، بيت PITS فعال شده و نيز اينتراپت ايجاد مي شود.
    حالا براي پاک کردن PITS براي آماده سازي اينتراپت بعدي ،
    لازم است که هر بار که اينتراپت رخ داد ، رجيستر PIT_SR را بخوانيم، اين خواندن ضمنا باعث پاک شدن PITS مي شود.

    ولي خوب مي خوانيم ، ولي PITS پاک نمي شود.( در شبيه ساز روييت مي شود.)

    در نتيجه پشت سرهم ، پس از خروج از روتين سرويس به اين اينتراپت ، بدون فاصله زماني طراحي شده ، اينتراپت ايجاد مي شود و الي آخر.....

    با سپاس

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

    پیش فرض

    سلام
    اما حجم برنامه من به بيش از 80 کيلو بايت رسيده ، و برنامه روي سخت افزار اجرا نمي شود
    مشكل از نرم افزار نيست ، البته به اين نكته هم بايد توجه داشت كه حجم 80 كيلو بايت يه مقدار زياد هست ، شما حجم كد هگز رو در پنجره ي propertis مشاهده كرديد ؟
    بعضي وقت ها عدم مقدار دهي درست متغير ها ، استفاده از توابع تو در تو و دست كاري هاي غير ضروري در ويزارد نرم افزار باعث بوجود اومدن چنين مشكلاتي ميشه .
    ما در داخل sam7.s يه سري كد ها و توابع داريم كه در اونا مقدار دهي رجيتسر هاي مخصوص واحد pll و مديريت ريست و تايمر wotch dog انجام ميشه . در هنگام ايجاد شدن پروژه كامپايلر در مورد افزودن اين فايل از شما سوال ميكنه ( بعد از انتخاب ميكرو ) و شما ميتونيد با انتخاب گزينه ي no كاري كنيد كه اين فايل به پروژه افزوده نشه .
    در اين حالت بايد تنظيمات تايمر واچ داگ و pll و... به صورت دستي و با مقدار دهي رجيستر ها در داخل خود برنامه انجام بديد كه ميتونيد براي دريافت اطلاعات بيشتر به مجله ي pmm4 ( ويرايش دوم ) مراجعه كنيد .

    در اخر بهتره به شبيه ساز نرم افزار اعتماد نكنيد و برنامه رو با پروگرامر جيلينك ديباك كنيد و نتيجه رو در عمل ببينيد .

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


  8. #5
    کاربر علاقه مند
    تاریخ عضویت
    May 2010
    نوشته ها
    67
    تشکر
    727
    تشکر شده 145 بار در 49 پست

    پیش فرض

    نقل قول نوشته اصلی توسط 1nafar نمایش پست ها
    سلام

    مشكل از نرم افزار نيست ، البته به اين نكته هم بايد توجه داشت كه حجم 80 كيلو بايت يه مقدار زياد هست ، شما حجم كد هگز رو در پنجره ي propertis مشاهده كرديد ؟
    بعضي وقت ها عدم مقدار دهي درست متغير ها ، استفاده از توابع تو در تو و دست كاري هاي غير ضروري در ويزارد نرم افزار باعث بوجود اومدن چنين مشكلاتي ميشه .
    ما در داخل sam7.s يه سري كد ها و توابع داريم كه در اونا مقدار دهي رجيتسر هاي مخصوص واحد pll و مديريت ريست و تايمر wotch dog انجام ميشه . در هنگام ايجاد شدن پروژه كامپايلر در مورد افزودن اين فايل از شما سوال ميكنه ( بعد از انتخاب ميكرو ) و شما ميتونيد با انتخاب گزينه ي no كاري كنيد كه اين فايل به پروژه افزوده نشه .
    در اين حالت بايد تنظيمات تايمر واچ داگ و pll و... به صورت دستي و با مقدار دهي رجيستر ها در داخل خود برنامه انجام بديد كه ميتونيد براي دريافت اطلاعات بيشتر به مجله ي pmm4 ( ويرايش دوم ) مراجعه كنيد .

    در اخر بهتره به شبيه ساز نرم افزار اعتماد نكنيد و برنامه رو با پروگرامر جيلينك ديباك كنيد و نتيجه رو در عمل ببينيد .
    با سلام
    ضمن تشکر از جناب هاشمی،

    حجم برنامه با بهینه سازی های مختلف ، از 64 کیلو تا 125 کیلو تغییر می کند .
    چون برای یک دستگاه صنعتی تهیه شده و نیز از کدهای انتقالی پروژه های دیگر ( میکرو 8 بیتی )،
    استفاده شده و دارای کدهای حجیمی برای رابط کاربر و ذخیره و پردازش داده و چاپ است، لذا غیر منتظره نبوده است.

    از طرفی ، کیل در حالت دمو محدودیت تا 32 کیلو را برای حجم برنامه در نظر گرفته ، لذا احتمال اینکه ک.ر.ک نتواند
    بعضی کنترل داخلی کیل را بی اثر کند ، وجود دارد ،
    مثلا برای برنامه های حجیم ، در نسخه های دموی ک.ر.ک شده ، کدهای موذی ایجاد کنند.

    دو روز تلاش نمودم و برنامه را به کمپایلر IAR منتقل نمودم ( مقدار محدودی تغییرات نیاز داشت)
    لیکن آنجا هم رفتارهای غیر منتظره از برنامه رخ داد که زمان زیادی برای حل کردن می طلبید.
    و نیز دیباگر آن USER FRIENDLY نیست،
    و چون تجربه قدیمی در کیل داشتم ، دوباره برگشتم و با KEIL کلنجار می روم.

    علت گرفتاری برنامه ، به دلیل کدهای پنهان keil بین این خطوط از sam7.s


    IMPORT __main
    LDR R0, =__main
    BX R0



    و ابتدای تابع main میباشد.

    که در سایت خود keil هم اشاراتی دیده می شود.

    http://www.keil.com/support/docs/3512.htm




    کدهایی با لیبل __scatterload هم درون این کدها در دیبگر دیده می شود.

    با رجوع به این بخش:
    http://www.keil.com/support/docs/3376.htm




    و تغییر اندازه Heap به 12 کیلو بایت :

    Heap_Size EQU 0x00003000

    برنامه عملا روی برد از استارت آپ عبور کرد و وارد main شد.

    حالا برنامه روی برد وارد مرحله main شده و تا مراحل مختلف قبل از فعال سازی اینتراپت پیش میرود،

    و پس از فعال سازی اینتراپت سیستم(که به چند واحد pit_irq,rtt_irq,wdt_irq,dbgu_irq,pmc_irq,rstc_irq, efc_irq مرتبط است)
    AT91F_AIC_EnableIt(AT91C_BASE_AIC, AT91C_ID_SYS);
    ، برنامه وارد حلقه بی نهایت یا یک اشکال دیگر می شود.

    احتمال دارد که : یعنی یک کدی در همان بخشهای پنهان keil میرود و دستوری را اجرا می کند و
    می پرد به:


    Undef_Handler B Undef_Handler

    SWI_Handler B SWI_Handler

    PAbt_Handler B PAbt_Handler
    DAbt_Handler B DAbt_Handler
    IRQ_Handler B IRQ_Handler
    FIQ_Handler B


    از sam7.s و گرفتار حلقه بی نهایت می شود. و پس از حدود 10 ثانیه برنامه مجددا ریست شده و از اول تکرار می شود.

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

    .................................................. ...


    البته قسمت PIT با راهنمایی آقای حامد91 در سایت همسایه حل شد.
    ( برای پاک کردن PITS باید رجیستر PIT_PIVR را بخوانیم.)
    گرچه برنامه به اجرای آن اینتراپت نمی رسد.


    با سپاس
    ویرایش توسط gangi : 01-04-2011 در ساعت 11:27

  9. #6
    مدیرکل سایت kavir آواتار ها
    تاریخ عضویت
    Jun 2007
    نام
    زارعی
    نوشته ها
    3,547
    تشکر
    1,218
    تشکر شده 5,684 بار در 1,801 پست

    پیش فرض

    سلام
    توی سایت کیل یک جایی نوشته بود در صورتیکه شما میخواین از دیباگ استفاده کنید باید واچ داگ رو غیر فعال کنید
    کویر ویدئو راه اندازی شد

    اگر چه دیر ولی برگشتم به جمع دوستان قدیمی....

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


  11. #7
    عضو جدید
    تاریخ عضویت
    Dec 2011
    نوشته ها
    7
    تشکر
    3
    تشکر شده 3 بار در 2 پست

    پیش فرض

    من هم دقیقا همین مشکل رو دارم، بعد از فعال شدن اینتراپت adc ،برنامه هنگ میکنه و به SWI میره،البته تو شبیه سازی، از سخت افزار که مطمئن نیستم،بنابراین اول میخوام از شبیه سازییه جواب معقول بگیرم.
    ضمنا برای نوشتن برنامه از مثال های keil استفاده کردم.

  12. #8
    Banned
    تاریخ عضویت
    Apr 2013
    نام
    صادق علی بخشی
    نوشته ها
    1,148
    تشکر
    1,183
    تشکر شده 1,276 بار در 702 پست

    پیش فرض

    نقل قول نوشته اصلی توسط sutech نمایش پست ها
    من هم دقیقا همین مشکل رو دارم، بعد از فعال شدن اینتراپت adc ،برنامه هنگ میکنه و به SWI میره،البته تو شبیه سازی، از سخت افزار که مطمئن نیستم،بنابراین اول میخوام از شبیه سازییه جواب معقول بگیرم.
    ضمنا برای نوشتن برنامه از مثال های keil استفاده کردم.
    سلام
    لطفا در اینده برای بیان سوالاتتون یک تاپیک جداگانه با نام مناسب ایجاد کنید
    برای راهنمایی بهتر سعی کنید که برنامه رو این جا آپلود کنید

  13. #9
    کاربر علاقه مند
    تاریخ عضویت
    Aug 2013
    نوشته ها
    42
    تشکر
    29
    تشکر شده 1 بار در 1 پست

    پیش فرض

    عرض سلام

    دوستان من هم این مشکل رو دارم. یه برنامه ساده نوشتم. اما وقتی میخوام دیباگش کنم میره توی حلقه بینهایت فایل startup و اصلا تو فایل main نمیره.

    کسی میدونه چطور باید این مشکل رو حل کنم ؟

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

  1. پاسخ: 2
    آخرين نوشته: 25-10-2013, 01:45
  2. Keil و قابلیت Code Completion
    توسط alireza9900 در انجمن مباحث کلی ARM
    پاسخ: 25
    آخرين نوشته: 01-01-2013, 13:15
  3. چگونه Page Rank سایت خودمان را در موتورهای جستجو حفظ کنیم؟
    توسط arsalan681 در انجمن ترفندهای کامپیوتری/معرفی نرم افزار های مفید
    پاسخ: 0
    آخرين نوشته: 21-08-2010, 10:52
  4. ریشه یابی واژه های بهار ، تابستان ، پاییز و زمستان
    توسط arsalan681 در انجمن گفت و گوي آزاد
    پاسخ: 0
    آخرين نوشته: 26-06-2010, 00:03

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

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