نمایش نتایج: از 1 به 3 از 3

موضوع: سوال در مورد تابع millis

  1. #1
    Senior Member
    تاریخ عضویت
    Nov 2014
    نوشته ها
    255

    سوال در مورد تابع millis

    سلام دوستان من یه متغیر از نوع unsigned long تعریف کردم و تابع millis رو ریختم داخل اون. حالا میخوام ببینم سر ریز و... صورت میگیره ؟ کلا تابع millis تا چند میشماره و بعدش چی میشه ؟ تابع millis زودتر سرریز میشه یا اون متغیری که تعریف کردم ؟ یکم که سرچ کردم دیدم تابع millis ظاهرا تا 50 روز میشماره و بعدش 0 میشه از نو... اون تابع که تعریف کردیم چی؟ در کل من با تابع millis دارم کار میکنم و اینکه هر چند ساعت میخوام یه دستور اجرا بشه این توو دراز مدت مشکل ساز نمیشه ؟ یعنی هربار بعد 50 روز خودش اتوماتیک 0 میشه و بدون مشکل از اول... ؟

    البته چندتا متغیرم از نوع long تعریف کردم که باقیمانده رو بریزم داخلش.اونا سر ریز نمیشن و مشکل ایجاد کنن ؟

    unsigned long time_m;
    long a, b, c, d, e, f ;

    {
    time_m = millis();
    a = time_m % 3600000;
    b = time_m % 3601000;
    c = time_m % 3602000;
    d = time_m % 3603000;
    e = time_m % 3604000;
    f = time_m % 3605000;
    if (a == 0) {
    ... }
    if (b ==0){
    ... }

    if (c==0){
    ... }

    if (d==0){
    ... }

    if (e==0){
    ... }

    if (f==0){
    ... }

  2. #2
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    4,064
    کلا دستور millis در سه صورت ریست میشه (میره از 0 میشماره دوباره )
    1. اردوینو ریست بشه
    2. کد جدید آپلود بشه
    3. خودش به ماکزیمم حد برسه که 50 روز نیست کمتره . عدد دقیقش اینه :49.71027 ( خیلی تو همین مورد دچار مشکل شدن )
    اینی که میگی تا چند میشماره هم وقتی متغیر رو unsigned long تعریف می کنی یعنی 4 باییه . و این یعنی تا 4294967295 میشماره .
    در مورد سرریز نشدن باقی مانده هات چک کن در بدترین شرایط که تایم برابر 4294967295 میشه باقی مانده تقسیمشون به اون اعداد از ماکزیمم long نزنه بالا .

    من خودم تا حالا 50 روز واقعی تست نکردم که بدونم بعد 50 روز بدون مشکل ریست میشه یا نه .

    فقط یه موردی که هست اینه که در طول 24 ساعت حدود 2 یا 3 ثانیه خطا داره .

    اگه این برات مهمه حتما تو کد نویسیش لحاظ کن




  3. #3
    Senior Member
    تاریخ عضویت
    Nov 2014
    نوشته ها
    255
    نقل قول نوشته اصلی توسط magmagmary نمایش پست ها
    کلا دستور millis در سه صورت ریست میشه (میره از 0 میشماره دوباره )
    1. اردوینو ریست بشه
    2. کد جدید آپلود بشه
    3. خودش به ماکزیمم حد برسه که 50 روز نیست کمتره . عدد دقیقش اینه :49.71027 ( خیلی تو همین مورد دچار مشکل شدن )
    اینی که میگی تا چند میشماره هم وقتی متغیر رو unsigned long تعریف می کنی یعنی 4 باییه . و این یعنی تا 4294967295 میشماره .
    در مورد سرریز نشدن باقی مانده هات چک کن در بدترین شرایط که تایم برابر 4294967295 میشه باقی مانده تقسیمشون به اون اعداد از ماکزیمم long نزنه بالا .

    من خودم تا حالا 50 روز واقعی تست نکردم که بدونم بعد 50 روز بدون مشکل ریست میشه یا نه .

    فقط یه موردی که هست اینه که در طول 24 ساعت حدود 2 یا 3 ثانیه خطا داره .

    اگه این برات مهمه حتما تو کد نویسیش لحاظ کن



    ممنون مهندس عزیز از توضیحات کاملت. قراره گاه گاهی گزارش یه سنسور رو اینجوری بگیرم.اصلا چند ثانیه اینور اونور مهم نیست . فقط اینکه کلا درست عمل کنه.یه کار دیگه میتونم کنم؟در رابطه با اون یکی پستم (پین اضافه) بقیه پایه هام همه درگیره فقط a6 و a7 میمونه . میتونم پایه ریست رو به یکی از این پایه ها وصل کنم و بگم وقتی high شد ریست کنه. یه if هم بذارم بگم millis وقتی رسید به 40 روز یه ریست بزنه... این از نظر شما چطوریه ؟ شدنی هست ؟ بدون مشکل جواب میده ؟
    مهندس راجب واچ داگم نمیدونم چرا اون که لینکش از گیت هاب دادی عمل نمیکنه. ارور میده تا incloude کتابخونش رو میارم توو کد کامپایلش ارور میده

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

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

SEO by vBSEO