|
FreeRTOS - минимальное время тика? |
|
|
|
 |
Ответов
|
May 30 2018, 07:05
|
Частый гость
 
Группа: Участник
Сообщений: 107
Регистрация: 13-05-09
Пользователь №: 49 008

|
В общем выкинул все лишнее из программы. ТО таймера ставил от 10мкс до 1мсек, вообще не влияет. Если оставить как в коде ниже, не работает. Если раскомментировать вкл/выкл прерывания TIM10 - работает. Если закомментированть обработку переменно ctim10ms в обработчике прерываний таймера, просто устанавливать семафор на каждом прерывании - то же работает. Код void TIM10_IRQHandler(void) { static portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE; if(TIM_GetFlagStatus(TIM10, TIM_FLAG_Update) != RESET) { TIM_ClearFlag(TIM10, TIM_FLAG_Update); if(ctim10ms) ctim10ms--; else { //disableInterruptTIM10(); xSemaphoreGiveFromISR(xSemNx, &xHigherPriorityTaskWoken); portEND_SWITCHING_ISR(xHigherPriorityTaskWoken); } } } CODE #define enableInterruptTIM10() NVIC->ISER[TIM10_IRQn >> 0x05] = (uint32_t)0x01 << (TIM10_IRQn & (uint8_t)0x1F) #define disableInterruptTIM10() NVIC->ICER[TIM10_IRQn >> 0x05] = (uint32_t)0x01 << (TIM10_IRQn & (uint8_t)0x1F)
xSemaphoreHandle xSemNx; //управление задачей volatile uint32_t ctim10ms; //счетчик отсчетов по 10 мксек
void Tx_Init(void); void Tx_DeInit (void);
void Task_temp(void *pParams);
int main(void) { GPIO_InitTypeDef GPIO_InitStruct; NVIC_InitTypeDef NVIC_InitStruct; RCC_HSICmd(ENABLE); while (RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET); RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);
RCC_HSEConfig(RCC_HSE_OFF); while (RCC_GetFlagStatus(RCC_FLAG_HSERDY) != RESET); SystemCoreClockUpdate(); SysTick_Config(SystemCoreClock/1000);//TO=1мс NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); NVIC_InitStruct.NVIC_IRQChannel = TIM10_IRQn; NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; //NVIC_InitStruct.NVIC_IRQChannelCmd = DISABLE; NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 11; NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0; NVIC_Init(&NVIC_InitStruct); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz; GPIO_Init(GPIOB, &GPIO_InitStruct); xTaskCreate(Task_temp, "Temp-handler", configMINIMAL_STACK_SIZE, NULL, 2, NULL); vTaskStartScheduler(); }
void Task_temp(void *pParams) { uint32_t c = 0; vSemaphoreCreateBinary(xSemNx);
while(1){ xSemaphoreTake(xSemNx, 0); ctim10ms = 100; Tx_Init(); while(1) { //enableInterruptTIM10(); if(xSemaphoreTake(xSemNx, 10) != pdTRUE) break; c++; ctim10ms = 100; GPIO_ToggleBits(GPIOB, GPIO_Pin_5);//пин контроля работы программы if(c > 200) break; } //disableInterruptTIM10(); TIM_DeInit(TIM10);
} }
void Tx_Init(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM10, ENABLE); TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInitStruct.TIM_Period = 160-1; TIM_TimeBaseInitStruct.TIM_Prescaler = 0; TIM_TimeBaseInit(TIM10, &TIM_TimeBaseInitStruct); TIM_ITConfig(TIM10, TIM_IT_Update, ENABLE); TIM_Cmd(TIM10, ENABLE); }
Сообщение отредактировал IgorKossak - May 30 2018, 08:03
Причина редактирования: [codebox] для длинного кода. [code]-для короткого!!!
|
|
|
|
|
May 30 2018, 07:13
|

Профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831

|
Цитата(maxntf @ May 30 2018, 10:05)  В общем выкинул все лишнее из программы. Поменяйте в своем посте теги quote на code, иначе очень трудно читать этот сплошной текст )) Не совсем понятна фраза "раскомментировать вкл/выкл прерывания TIM10", поясните о каких именно кусках кода идет речь. Или покажите ДВА куска кода: работающий и неработающий.
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
May 30 2018, 07:17
|
Частый гость
 
Группа: Участник
Сообщений: 107
Регистрация: 13-05-09
Пользователь №: 49 008

|
Цитата(Forger @ May 30 2018, 10:13)  Поменяйте в своем посте теги quote на code, иначе очень трудно читать этот сплошной текст )) Не совсем понятна фраза "раскомментировать вкл/выкл прерывания TIM10", поясните о каких именно кусках кода идет речь. Или покажите ДВА куска кода: работающий и неработающий. ну в смысле включать и выключать прерывания enableInterruptTIM10() и disableInterruptTIM10() (они в примере закомментированы)
|
|
|
|
|
May 30 2018, 07:25
|
Частый гость
 
Группа: Участник
Сообщений: 107
Регистрация: 13-05-09
Пользователь №: 49 008

|
Цитата(Forger @ May 30 2018, 10:23)  Если закомментировать enableInterruptTIM10(), которые я увидел только в одном месте, то безусловно прерывания от этого таймера работать не будут )) Не в одном месте. в прерывании отключаем при установке семафора, в задаче включаем после того как забрали семафор и выполнили обработку.
|
|
|
|
|
May 30 2018, 07:51
|
Частый гость
 
Группа: Участник
Сообщений: 107
Регистрация: 13-05-09
Пользователь №: 49 008

|
Цитата(Forger @ May 30 2018, 10:32)  Я смотрю Ваш код, по поиску (CTRL-F) вижу enableInterruptTIM10 только в одном месте (( Да так и есть. Включаем, когда готовы принимать семафор. Цитата(jcxz @ May 30 2018, 10:36)  При частоте таймера ==100кГц и частоте ядра==16МГц, у Вас как только обнуляется ctim10ms, то в каждом прерывании вызывается xSemaphoreGiveFromISR(), а так как она наверняка длительная (и следующая за ней функция - скорей всего ещё более длительная, так как скорей всего делается решедулинг задач), то к моменту выхода из ISR успевает пройти >= 160 тактов ядра. А значит - ждёт уже новое прерывание таймера и сразу снова входит в ISR и всё повторяется. Естественно, что всё блокируется на постоянных входах в ISR. Ага. Но только если я долблю таймером xSemaphoreGiveFromISR без обработки переменной каждые 10мкс все работает. xSemaphoreGiveFromISR() не должна повторно устанавливать семафор пока задача его не заберет, соответственно возвращает FALSE и portEND_SWITCHING_ISR ничего не переключает. Код #define portEND_SWITCHING_ISR( xSwitchRequired ) if( xSwitchRequired != pdFALSE ) portYIELD() Я как бы увидел что происходит. В неработающем варианте Код xSemaphoreGiveFromISR(xSemNx, &xHigherPriorityTaskWoken); всегда возвращается pdTREU - соответственно постоянно перевызывается планировщик - почему так?
Сообщение отредактировал maxntf - May 30 2018, 07:50
|
|
|
|
Сообщений в этой теме
maxntf FreeRTOS - минимальное время тика? May 22 2018, 09:36 nanorobot Цитата(maxntf @ May 22 2018, 14:36) Всем ... May 22 2018, 09:57 haker_fox QUOTE (maxntf @ May 22 2018, 17:36) Как о... May 22 2018, 10:24 maxntf Цитата(haker_fox @ May 22 2018, 13:24) 1.... May 22 2018, 11:27 k155la3 Цитата(maxntf @ May 22 2018, 12:36) . . .... May 22 2018, 10:31 haker_fox QUOTE (k155la3 @ May 22 2018, 18:31) Рабо... May 22 2018, 10:34 k155la3 Кроме всего, проверьте значения стеков задач (не п... May 22 2018, 11:43 maxntf Цитата(k155la3 @ May 22 2018, 14:43) Можн... May 22 2018, 11:53  k155la3 Цитата(maxntf @ May 22 2018, 14:53) В Кеи... May 22 2018, 12:02   maxntf Цитата(k155la3 @ May 22 2018, 15:02) Апп.... May 22 2018, 12:27    esaulenka Цитата(maxntf @ May 22 2018, 15:27) В общ... May 22 2018, 12:44    k155la3 Цитата(maxntf @ May 22 2018, 15:27) Не по... May 22 2018, 13:19 maxntf Я функцию TSL_tim_ProcessIT перенес в TIM3. Возмож... May 22 2018, 12:58 esaulenka Цитата(maxntf @ May 22 2018, 15:58) Я фун... May 22 2018, 14:21 haker_fox QUOTE (k155la3 @ May 22 2018, 19:43) Кром... May 22 2018, 13:08 maxntf Цитата(haker_fox @ May 22 2018, 16:08) Кс... May 23 2018, 10:57 Forger Цитата(maxntf @ May 22 2018, 12:36) Меняю... May 22 2018, 17:56 uriy Тоже никогда не делал меньше 1 мс. Зачем вам это п... May 23 2018, 04:19 k155la3 Цитата(uriy @ May 23 2018, 07:19) Тоже ни... May 23 2018, 08:55  Forger Цитата(k155la3 @ May 23 2018, 11:55) Зада... May 23 2018, 09:01 maxntf Нашел костыль.
В функции обработка кнопок есть деф... May 23 2018, 12:16 Forger Цитата(maxntf @ May 23 2018, 15:16) Нашел... May 23 2018, 12:25  maxntf Цитата(Forger @ May 23 2018, 15:25) Это е... May 23 2018, 12:46   Forger Цитата(maxntf @ May 23 2018, 15:46) Нужны... May 23 2018, 12:49 esaulenka Цитата(maxntf @ May 23 2018, 15:16) Нашел... May 23 2018, 19:46  maxntf Цитата(esaulenka @ May 23 2018, 22:46) Со... May 24 2018, 08:26   Forger Цитата(maxntf @ May 24 2018, 11:26) Тольк... May 24 2018, 09:59 jcxz Цитата(maxntf @ May 23 2018, 15:16) , а я... May 23 2018, 22:31  volodya Цитата(jcxz @ May 24 2018, 01:31) А какой... May 24 2018, 04:27   jcxz Цитата(volodya @ May 24 2018, 07:27) Вот ... May 24 2018, 06:17    Forger Цитата(jcxz @ May 24 2018, 09:17) вместе ... May 24 2018, 06:27     jcxz Цитата(Forger @ May 24 2018, 09:27) вся о... May 24 2018, 11:11      Forger Цитата(jcxz @ May 24 2018, 14:11) Мне тож... May 24 2018, 12:03       jcxz Цитата(Forger @ May 24 2018, 15:03) Работ... May 24 2018, 13:59        Forger Цитата(jcxz @ May 24 2018, 16:59) Что зна... May 24 2018, 14:14 Arlleex FreeRTOS работает хорошо и правильно, если с ней п... May 24 2018, 07:28 Baser Цитата(jcxz @ May 24 2018, 01:31) А какой... May 24 2018, 08:34 Turnaev Sergey Цитата(Baser @ May 24 2018, 11:34) А по м... May 24 2018, 13:25  esaulenka Цитата(Turnaev Sergey @ May 24 2018, 16:2... May 25 2018, 07:31   jcxz Цитата(esaulenka @ May 25 2018, 10:31) Кл... May 25 2018, 19:29 maxntf Что то кажется мне, что дело не в тачлиб, во второ... May 24 2018, 09:14 uriy ЦитатаНо есть и минус (для меня): пока что нет у S... May 25 2018, 05:04 Forger Цитата(uriy @ May 25 2018, 08:04) А про э... May 25 2018, 05:14 uriy У меня было такое же мнение о вертикальной прокрут... May 25 2018, 06:12 Forger Цитата(uriy @ May 25 2018, 09:12) А J-lin... May 25 2018, 06:17 maxntf Потихоньку разбираюсь далее с FreeRTOS.
Возникла н... May 29 2018, 10:17 jcxz Цитата(maxntf @ May 29 2018, 13:17) Есть ... May 29 2018, 10:26  maxntf Цитата(jcxz @ May 29 2018, 13:26) Чтобы н... May 29 2018, 10:33   jcxz Цитата(maxntf @ May 29 2018, 13:33) P.S. ... May 29 2018, 10:44    ViKo Цитата(jcxz @ May 29 2018, 13:44) у Вас в... May 29 2018, 11:04     jcxz Цитата(ViKo @ May 29 2018, 14:04) 1600
А ... May 29 2018, 11:07      ViKo Цитата(jcxz @ May 29 2018, 14:07) А если ... May 29 2018, 11:11       jcxz Цитата(ViKo @ May 29 2018, 14:11) 10 кГц ... May 29 2018, 11:17        ViKo Я думал, речь идет по-прежнему про частоту работы ... May 29 2018, 11:24 Forger Любого ждет анафема, кто замечен за подобными злод... May 29 2018, 11:11  jcxz Цитата(Forger @ May 29 2018, 14:11) Любог... May 29 2018, 11:29   Forger Я же все объяснил на конкретном примере.
Еще раз,... May 29 2018, 13:01    jcxz Цитата(Forger @ May 29 2018, 16:01) а тут... May 29 2018, 13:37     Forger Цитата(jcxz @ May 29 2018, 16:37) В прогр... May 29 2018, 13:51      jcxz Цитата(Forger @ May 29 2018, 16:51) Или В... May 29 2018, 14:00       Forger Цитата(jcxz @ May 29 2018, 17:00) Ещё раз... May 29 2018, 14:15       maxntf Цитата(jcxz @ May 29 2018, 17:00) PPS: ТС... May 29 2018, 14:27        Forger Цитата(maxntf @ May 29 2018, 17:27) Пробл... May 29 2018, 14:39         maxntf Цитата(Forger @ May 29 2018, 17:39) Для н... May 29 2018, 14:44       Arlleex Цитата(jcxz @ May 29 2018, 18:00) PS: Кто... May 29 2018, 14:50        jcxz Цитата(Arlleex @ May 29 2018, 17:50) ...
... May 29 2018, 15:27         Forger Цитата(jcxz @ May 29 2018, 18:27) Где там... May 29 2018, 16:51       Arlleex Цитата(maxntf @ May 30 2018, 11:51) Да та... May 30 2018, 08:05 jcxz Цитата(maxntf @ May 30 2018, 10:05) Если ... May 30 2018, 07:36 maxntf Привожу проблемные участки кода (инициализация та ... May 30 2018, 07:35 maxntf Все разобрался, не верно обрабатывал семафор.
Нужн... May 30 2018, 08:06 Arlleex Кодif(xSemaphoreGiveFromISR(xSemNx, &x... May 30 2018, 08:17 maxntf Цитата(Arlleex @ May 30 2018, 11:17) Кодi... May 30 2018, 08:25  jcxz Цитата(maxntf @ May 30 2018, 11:25) На св... May 30 2018, 08:32 maxntf На семафоре полностью развязать задачу я не смог, ... May 30 2018, 13:03 Forger Цитата(maxntf @ May 30 2018, 16:03) Если ... May 30 2018, 13:06  maxntf Цитата(Forger @ May 30 2018, 16:06) Очере... May 30 2018, 13:29   Forger Цитата(maxntf @ May 30 2018, 16:29) Я спр... May 30 2018, 13:33    maxntf Цитата(Forger @ May 30 2018, 16:33) Напос... May 30 2018, 13:50     Forger Цитата(maxntf @ May 30 2018, 16:50) xHigh... May 30 2018, 14:14  esaulenka Цитата(Forger @ May 30 2018, 16:06) Очере... May 30 2018, 15:30   Forger Цитата(esaulenka @ May 30 2018, 18:30) Ра... May 30 2018, 15:34 maxntf Не тот пример был. May 30 2018, 14:30 esaulenka Никакой конкретики. Отлично.
Ещё раз. Пожалуйста, ... May 30 2018, 17:15 Forger Цитата(esaulenka @ May 30 2018, 20:15) ..... May 30 2018, 17:31 maxntf Цитата(esaulenka @ May 30 2018, 20:15) Ни... May 30 2018, 17:58  Forger Цитата(maxntf @ May 30 2018, 20:58) Чтоб ... May 30 2018, 18:27 Arlleex Взял отладку на STM32F429, повторил код автора топ... May 30 2018, 19:41 jcxz Цитата(Arlleex @ May 30 2018, 22:41) Взял... May 30 2018, 20:05  Arlleex Цитата(jcxz @ May 30 2018, 23:05) Пролист... May 30 2018, 20:15 maxntf Всем участникам спасибо за помощь и в некоторых сл... May 31 2018, 13:15 Arlleex Цитата(maxntf @ May 31 2018, 17:15) В нач... May 31 2018, 13:44  maxntf Цитата(Arlleex @ May 31 2018, 16:44) Еще ... May 31 2018, 13:46
2 страниц
1 2 >
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|