سلام دوستان وقتتون بخیر؛
من با LPC1788 کار میکنم و یک برنامه 3000 خطی نوشتم و میکرو داره اجرا میکنه .(منظور از 3000 خط فقط اینه که حجم کد زیاده و امکان وجود باگ هست.) مشکلی که برای من به وجود اومده اینه که به صورت رندوم و بعد از یک مدت زمان نامشخص (بعضی وقت ها یک ربع)، تابع Sprintf برای مقدار float درست عمل نمیکنه و این مشکل ادامه داره تا میکرو ریست شه. حتی گاهی میکرو هم ممکنه هنگ کنه.
کد:
sprintf(disp_data,"%d=%2.2f\xdf",connector_number,temperature);
مشکل اینجاست که دما کاملا درست و مثلا 12.34 نمایش داده میشه. این کار ادامه پیدا میکنه تا وقتی مشکل رخ میده این عدد تبدیل میشه به 34#12 (عبارت جای نقطه متغییره همیشه یکسان نیست لزوما) و بعد از اون دیگه رقم اعشار نشون نمیده و مقدار صحیح رو فقط نمایش میده.
تو این حالت دیباگ هم کردم و نکته جالب این بود که تو متغییر s متغییر float یعنی temperature به درستی تبدیل میشه به جز نقطه (ممیز) سر همین دیگه بعد ممیز رو هم نمایش نمیده و فقط مقدار صحیح نمایش داده می شود.
من واقعیت هیچ جور متوجه نشدم چطور ممکنه یک تابع ناقص کار کنه! اونم این نوع توابع. ولی یکی از دلایل ایجاد مشکل آیا میتونه اینتراپت یوارت بعد هر یک دقیق باشه؟ الان مثلا حدود 20-30 دقیقه گذشته و این اتفاق نیفتاده.
بعید میدونم قبلا کسی با این مشکل برخورده باشه اما ممنون میشم اگر تجربه ای در رابطه با رفتارهای مشابه و یا غیرمعمول از میکرو دارید را به اشتراک بگذارید.
درپناه حق