Вопрос

Я использую MSP430f5438 с версией FreeRTOS 5.4.

У меня возникла забавная проблема, которую я не могу решить.

В принципе, когда я устанавливаю для configTICK_RATE_HZ разные значения, светодиод мигает быстрее или медленнее;это должно оставаться на том же уровне.Он мигает медленнее, чем выше я устанавливаю 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.
}

Светодиод мигает с периодом, превышающим 1 секунду, когда я устанавливаю для параметра configtick_rate_hz значение 1000, и светодиод мигает с периодом, намного меньшим 1 секунды, когда я устанавливаю тактовую частоту на значение, меньшее ~ 200

configTICK_RATE_HZ не должен влиять на время мигания светодиода.

Я понимаю, что необходимо больше информации, и с готовностью предоставлю любые фрагменты кода, необходимые для оказания помощи.

Это было полезно?

Решение

Тик RTOS генерируется прерыванием по таймеру.Таймер был установлен (неправильно) таким образом, что он всегда вызывал фиксированное тиканье на частоте 400 кГц, независимо от того, что вы также установили configTICK_RATE_HZ.Поскольку частота мигания установлена в предположении, что частота тиканья RTOS правильно представлена параметром configTICK_RATE_HZ (portTICK_RATE_MS = 1000/configTICK_RATE_HZ), возникли проблемы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top