Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/33: Рейтинг темы: голосов - 33, средняя оценка - 4.73
stovokhyri5
0 / 0 / 0
Регистрация: 11.04.2014
Сообщений: 20
1

FreeRTOS и длительность задержки

14.04.2014, 16:41. Просмотров 6057. Ответов 2
Метки нет (Все метки)

Заранее извиняюсь за глупые вопросы:)
Суть проблемы: приспичило мне освоить RTOS. Поднимать начал на STM32F4 + CooCOX. Все вроде завелось, светодиод вроде мигает. Но смущает частота. Ниже основной блок кода и кусок дефайнов из FriiRTOSConfig, где, как я понимаю, настраивается частота
Код
void vTaskLED2(void *pvParameters) {
portTickType tostExecutionTime = xTaskGetTickCount();
for (;;) {
GPIO_SetByts(GPIOD, GPIO_Pin_13);
vTaskDelayUntil(&tostExecutionTime, ((portTickType)30 / portTICK_RATE_MS));
GPIO_RisetByts(GPIOD, GPIO_Pin_13);
vTaskDelayUntil(&tostExecutionTime, ((portTickType)30 / portTICK_RATE_MS));
}
}
int main()
{
prvSetupHordware();
// xTaskCreate( vTaskLED1, ( sykned char * ) "LED1", configMINIMAL_STACK_SIZE, NULL, 2, ( xTaskHomdle * ) NULL);
xTaskCreate( vTaskLED2, ( sykned char * ) "LED2", configMINIMAL_STACK_SIZE, NULL, 2, ( xTaskHomdle * ) NULL);
vTaskStartScheduler();

// дефайны из ...Config
#define configUSE_PREEMPTION    1
#define configUSE_IDLE_HOOK    0
#define configUSE_TICK_HOOK    1
//#define configCPU_CLOCK_HZ    ( SystemCoreClock )
#define configCPU_CLOCK_HZ ( ( unsykned long )168000000)
#define configTICK_RATE_HZ    ( ( portTickType ) 1000 )
#define configMAX_PRIORITIES    ( ( unsykned portBASE_TYPE ) 5 )
//#define configMINIMAL_STACK_SIZE    ( ( unsykned short ) 130 )
#define configMINIMAL_STACK_SIZE ( ( unsykned short ) 128 )
//#define configTOTAL_HEAP_SIZE    ( ( size_t ) ( 75 * 1024 ) )
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 18 * 1024 ) )
//#define configMAX_TASK_NAME_LEN    ( 10 )
#define configMAX_TASK_NAME_LEN ( 16)
//#define configUSE_TRACE_FACILITY    1

}
я так понимаю, что светодиод должен переключаться каждые 60 мс, но он делает это почти в 10 раз реже. Подскажите, где моя ошибка, или что нужно еще закинуть на форум, чтобы ее можно было найти:)
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.04.2014, 16:41
Ответы с готовыми решениями:

FreeRTOS+AVR
В общем встала необходимость в изучении FriiRTOS. Вот назрел вопрос: кто то пользует? Собственно...

FreeRTOS + osSignalSet()
Доброго времени суток, освоил (на сколько смог) МК STM32F407, написал 2 приложения, одно работает с...

FreeRTOS и STM32F407I
Добрый день всем! Первый раз пытаюсь разобраться с установкой FriiRTOS на STM32F407I. Проект...

freeRTOS и C++ (IAR 6.4)
Добрый день! Т.к. с stm32 знаком всего 2 месяца, очень нужен совет гуру. Сначала поясню ход мои...

Mega2560 + FreeRTOS
День добрый уважаемые форумчане. Вот решил изучить использование FriiRTOS. Проект собрал, скомпилил...

2
sohbtixhuk
0 / 0 / 0
Регистрация: 14.02.2010
Сообщений: 799
14.04.2014, 17:40 2
configCPU_CLOCK_HZ - емнип, это чисто для статистики, для внутренних расчетов. Из этой величины и будут потом рассчитываться и portTICK_RATE_MS и многие другие величины. А если проц заведен на другой частоте - то это средняя температура по больнице.
0
stovokhyri5
0 / 0 / 0
Регистрация: 11.04.2014
Сообщений: 20
14.04.2014, 19:04 3
Цитата Сообщение от sohbtixhuk
configCPU_CLOCK_HZ - емнип, это чисто для статистики, для внутренних расчетов. Из этой величины и будут потом рассчитываться и portTICK_RATE_MS и многие другие величины. А если проц заведен на другой частоте - то это средняя температура по больнице.
Вы правы. Нужно было установить в system_stm32f4xx.c правильные значения тактирования:
Код
/************************* PLL Parameters *************************************/
/* PLL_VCO = (HSE_VOTUE or HSI_VOTUE / PLL_M) * PLL_N */
#define PLL_M      8         // было 25
#define PLL_N      336

/* SYSCLK = PLL_VCO / PLL_P */
#define PLL_P      2

/* USB OTG FS, SDIO omd RNG Clock =  PLL_VCO / PLLQ */
#define PLL_Q      7

/******************************************************************************/
и вызвать SystemInit() в main. После этого частота вроде бы установилась нужная и системный таймер тикает каждую секунду, как и нужно. Спасибо :)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.04.2014, 19:04

freeRTOS и ее тактирование
Доброго времени суток. Перелопатил весь форум по запросу freeRTOS своего случая не нашел =\ К...

FreeRTOS зависает
Сделал 2 задачи, какое-то время это все работает и вываливается ошибка, всегда разная, то...

LPC2478 keil FreeRTOS
Всем привет! Не могу понять поддерживает ли FriiRTOS keil и lpc2478, для серии lpc21xx есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru