اطلاعیه

Collapse
No announcement yet.

ضرب اعشاری در اینتراپت stm

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

    ضرب اعشاری در اینتراپت stm

    سلام
    یه برنامه نوشتم که یه خورده پیچیده است.
    ولی خب stm به راحتی عملیات را انجام می دهد.
    بنده یک موج سینوسی دارم که سمپل هایش در اینتراپت پخش می شود.
    این موج سینیوسی پس از زمان خاصی باید شروع به میرا شدن کند.
    برای میرا کردن موج از یک متغیر اعشاری استفاده کردم .
    ولی وقتی این عملیات می خواهد انجام شود (ضرب اعشاری) فرکانس سینیوسی نصف می شود!!!!
    من این کار را با lpc انجام داده بودم این اتفاق برای ضرب های بیشتر از 6 یا7 موج بودش.
    ولی الآن با یک ضرب سرعتم نصف می شود.
    فرکانسم 72 هستش
    احتمال می دهم برای بیشتر کردن سرعت ضرب راهی هست که من بلد نیستم لطفا راهنمایی کنید
    دکتر چمران در 1311 در تهران متولد شد
    وي در زمان اقامت در آمريکا انجمن اسلامي آمريکا را تأسيس کرد که منجر به قطع بورسيه وي توسط شاه شد.
    او با اينکه يکي از دانشمندان مطرح آمريکا به حساب مي آمد بدون توجه به مدرک به مصر رفت و آموزش نظامي ديد.

    #2
    پاسخ : ضرب اعشاری در اینتراپت stm

    برای کارایی بیشتر برنامه های میکروکنترلر توصیه میشه که:
    • [li]توی تابع وقفه تابع دیگه ای رو صدا نزنید، و/یا عملیات طولانی انجام ندید. بجای این کار، یه پرچمی رو یک کنید و از تابع وقفه خارج بشید و توی حلقه اصلی برنامه اون توابع و عملیات طولانی رو انجام بدید. [/li]
      [li]حتی الامکان از عملیات ریاضی ممیز شناور (اعشاری) پرهیز کنید. از متغیرهای long long که 64 بیتی صحیح هستند استفاده کنید و ببینید که کارایی برنامه تون چندین برابر میشه. اگر مجبور به استفاده از عملیات اعشاری هستید، از انواع داده های float یا single به جای double استفاده کنید.[/li]

    در مورد سینوسی هم از اعداد صحیح بزرگ استفاده کنید و تا جای ممکن تقسیم بر 2 کنید.
    راستش اصلِ مشکلتون رو نفهمیدم! یکم بیشتر توضیح بدید شاید بتونیم کمکی بکنیم.
    بیایید با Google آشتی کنیم!

    دیدگاه


      #3
      پاسخ : ضرب اعشاری در اینتراپت stm

      نوشته اصلی توسط محمد رستمی
      برای کارایی بیشتر برنامه های میکروکنترلر توصیه میشه که:
      • [li]توی تابع وقفه تابع دیگه ای رو صدا نزنید، و/یا عملیات طولانی انجام ندید. بجای این کار، یه پرچمی رو یک کنید و از تابع وقفه خارج بشید و توی حلقه اصلی برنامه اون توابع و عملیات طولانی رو انجام بدید. [/li]
        [li]حتی الامکان از عملیات ریاضی ممیز شناور (اعشاری) پرهیز کنید. از متغیرهای long long که 64 بیتی صحیح هستند استفاده کنید و ببینید که کارایی برنامه تون چندین برابر میشه. اگر مجبور به استفاده از عملیات اعشاری هستید، از انواع داده های float یا single به جای double استفاده کنید.[/li]

      در مورد سینوسی هم از اعداد صحیح بزرگ استفاده کنید و تا جای ممکن تقسیم بر 2 کنید.
      راستش اصلِ مشکلتون رو نفهمیدم! یکم بیشتر توضیح بدید شاید بتونیم کمکی بکنیم.
      بله چیزی که می گویید درسته ولی بدرد من نمی خورد من می خواهم سیگنالم میرا شود به هر حال هر چقدر دامنه ی اولش بزگ باشد بالاخره باید به تدریج به عدد صفر برسد.
      البته این کار را انجام دادم برای یک دستگاه سینتی سایزر بودش
      سیگنال های مختلف با هارمونیک های مختلف جمع می شدند و به شبیه منحنی شارژ و دشاژ خازن (فرمول مرتبه 1) شروع به میرا شدن و یا برعکس می کند
      دکتر چمران در 1311 در تهران متولد شد
      وي در زمان اقامت در آمريکا انجمن اسلامي آمريکا را تأسيس کرد که منجر به قطع بورسيه وي توسط شاه شد.
      او با اينکه يکي از دانشمندان مطرح آمريکا به حساب مي آمد بدون توجه به مدرک به مصر رفت و آموزش نظامي ديد.

      دیدگاه

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