PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : هنگ میکرو



sepide
27-09-2011, 18:33
با سلام خدمت همگی
توی کار با ارم lpc2368 من یک اینتراپت تایمر اضافه کرده ام که به خوبی کار میکنه
این تا وقتی هست که من تیک
enable ARM/Thumb interworking
د ر تب C/C++ تنظیمات پروژه را نزده ام

به محض زدن این تیک که جهت اضافه کردن مموری یه پروژه ام احتیاج دارم
میکرو من شروع به کار میکنه
تایمر هم بخوبی راه اندازی میشه
تابع درون تایمر هم بخوبی اجرا میشود
ولی کافی است من در حلقه main یک تابع (هر تابعی را صدا بزنم حتی یه تابع تاخیر معمولی)
میکرو هنگ میکنه
لازم به ذکره که اگر هیچ تابعی فراخوانی نشه کد بدون فراخواندن تابع درون زیر روال main اجرا میشود
کسی می دونه مشکله من از کجاست؟
و این
enable ARM/Thumb interworking دقیقا کارش چیه؟

agape
27-09-2011, 23:14
enable ARM/Thumb interworking این قسمت به صورت پیشفرض فعال هست و به سورس اسمبلر اجازه میده بین حالت های آرم و تامب سویچ کنه !
فکر نمیکنم مشکل از این بخش باشه!
مشکل از جایی دیگه هست

sadmonew
27-09-2011, 23:57
با سلام
براي اضافه كردن حافظه اصلا نيازي نيست كه شما جايي رو تيك بزنيد. برام شده سوال؟؟؟؟
همونطور كه دوستمون گفتن مشكل احتمالا از جاي ديگس.

sepide
28-09-2011, 09:28
ممنون از دوستایی که جواب دادند
دو سه تا معلوم دیگه را میگم شاید بتونم شرائط را توضیح بدم
راستی منظورم از مموری حاظه خارجی مموری کارت هست نه مموری سیستم

1- من داخل تابع اینتراپت میکرو یک تابع را صدا میزنم که اون هم به نوبه خود یک چند تا متغیر را به صورت spi ارسال میکنه
2- اگر من داخل اینتراپتم هیچ تابعی را صدا نزنم و همه کدها را اونجا بذارم مشکل پیش نمیاد
3- مطمئن هستم تابع اینتراپت من مشکلی نداره و به هیچ عنوان تاخیر زیادی نداره
4- تنها مشکل وقتی پیش میاد که همزمان داخل اینتراپت یک تابع فراخوانده بشه و داخل main برنامه هم یک تابع حتی تابع ساده فراخوانده بشه (یعنی هر دو جا یک تابع)
5- به نظر در این حالت میکرو نمیتونه ادرس برگشت خودش را پیدا کنه که از تابع ها به جای اول باید پرش کنه
یا اینکه توی قمست هایی از پرش ها رم کم میاره مثله حافظه استک
6- به نظر دوستان مشکل آیا میتونه از نوع کرک باشه یا اینکه کرک توی بازار درست کار نکنه
7- باید جایی تنظیم خاصی برای حافظه ها انجام داد؟
در ضمن آیا اینتراپت ها و یا تایمرها در ارم نکته خاصی دارند؟
من کد نمونه را هم اینجا میذازم



void Timer0Handler (void) __irq
{


T0IR = 1; /* clear interrupt flag */
IENABLE; /* handles nested interrupt */

My_Function();



IDISABLE;
VICVectAddr = 0; /* Acknowledge Interrupt */
}

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

sepide
28-09-2011, 11:24
با تشکر از همگی دوستان
مشکل حل شد

تنها کاری که انجام شد
IENABLE; /* handles nested interrupt */
IDISABLE;
از کدهای اینتراپت حذف شد

کسی می دونه چرا اصلا این مشکل وجود داشت مگر نه اینکه در زیر روال اینتراپت باید این دو تا کد را نوشت؟

agape
28-09-2011, 16:30
با تشکر از همگی دوستان
مشکل حل شد

تنها کاری که انجام شد
ienable; /* handles nested interrupt */
idisable;
از کدهای اینتراپت حذف شد

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

gangi
29-09-2011, 13:36
با تشکر از همگی دوستان
مشکل حل شد

تنها کاری که انجام شد
IENABLE; /* handles nested interrupt */
IDISABLE;
از کدهای اینتراپت حذف شد

کسی می دونه چرا اصلا این مشکل وجود داشت مگر نه اینکه در زیر روال اینتراپت باید این دو تا کد را نوشت؟

با سلام
همانطوری که جناب agape نوشتند، 2368 در مورد اینتراپتها ، تنها به یکی پاسخ می دهد و در حین کار اینتراپت ، نباید آدرس برگشت را که در رجیسترهای شادو ذخیره نموده تغییر داد ( مثلا با صدا زدن یک تابع دیگر در ون اینتراپت )

اگر می خواهید درون اینتراپت ، توابعی را صدا بزنید ، آن توابع را باید از نوع __inline تعریف کنید.

پ.ن:
در آرم7 که شامل 2368و2378و2478و sam7x256 می شود، استک در کار نیست!!!
رجیسترهای شادو در تعداد محدود برای (ذخیره رجیسترهای اصلی و آدرس برگشت ) و سرویس دادن به یک اینتراپت فقط ...........

You can see links before reply

با سپاس