سؤال

أنا أستخدم MSP430F5438 مع الإصدار 5.4 من Frettos.

أواجه مشكلة مضحكة لا أستطيع معرفة ذلك.

في الأساس، عندما أقوم بتعيين configtick_rate_hz إلى قيم مختلفة، يومض LED أسرع أو أبطأ؛ يجب أن تبقى نفس المعدل. يضرب أبطأ كلما ارتفعت Configtick_rate_hz، وأسرع عندما أقوم بتعيين Tick_rate.

vtaskdelayuntil (& xlastflashtime، xflashrate)؛ هو أن الصمام يجب أن وميض فقط مرة واحدة ثانية بغض النظر عن ما هو configtick_rate_hz. صعدت وفحص Xflashrate للتأكد. لها دائما = إلى configtick_rate_hz. شفرة:

xFlashRate = ledFLASH_RATE_BASE;//my flash base rate is 1000ms
xFlashRate /= portTICK_RATE_MS; //so xFlashrate = whatever configTICK_RATE_HZ equals

/* We need to initialise xLastFlashTime prior to the first call to vTaskDelayUntil().*/ 
xLastFlashTime = xTaskGetTickCount();
for(;;) { 
vTaskDelayUntil( &xLastFlashTime, xFlashRate ); vParTestToggleLED( uxLED ); 
flashled();//this should happen every 1 second.
}

وميض LED مع فترة أكبر من ثانية واحدة عندما أقوم بتعيين configtick_rate_hz إلى 1000 ويومض LED مع فترة أقل بكثير من 1S عندما أقوم بتعيين معدل القراد إلى أي شيء أقل من 200

يجب أن يؤثر configtick_rate_hz على وقت اميض LED.

أدرك أن هناك حاجة إلى مزيد من المعلومات وسوف توفر بسهولة مهما كانت هناك حاجة إلى مقتطفات الكود للمساعدة.

هل كانت مفيدة؟

المحلول

يتم إنشاء علامة RTOS بواسطة مقاطعة توقيت. تم تعيين الموقت (بشكل غير صحيح) بحيث تسبب دائما في علامة ثابتة في 400 كيلو هرتز بغض النظر عن ما قمت بتعيين configtick_rate_hz أيضا. نظرا لأن معدل وميض يتم تعيينه تحت افتراض أن معدل علامة RTOS ممثلة بشكل صحيح من قبل ConfigTick_rate_hz (Porttick_rate_ms = 1000 / Configtick_rate_hz)، تلا ذلك المشاكل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top