реклама на сайте
подробности

 
 
> FreeRTOS - минимальное время тика?
maxntf
сообщение May 22 2018, 09:36
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 107
Регистрация: 13-05-09
Пользователь №: 49 008



Всем привет.
На FreeRTOS вертятся 3 задачи, больше ничего из инструментария ОС не пользую.
Так вот когда configTICK_RATE_HZ установлен 1000Hz, все работает без проблем. Меняю это значение на 10000Hz, после ресета все задачи какое то время работают, а потом работает только одна - 2-я задача (скорее работает просто функция). Шедуллер перестает работать вовсе - vApplicationTickHook перестает вызываться и задачи не переключаются.
МК STM32L152rc работает на 16MHz.
В чем может быть дело?
Как отследить где планировщик заткнулся и почему?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
maxntf
сообщение May 30 2018, 07:05
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 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]-для короткого!!!
Go to the top of the page
 
+Quote Post
Forger
сообщение May 30 2018, 07:13
Сообщение #3


Профессионал
*****

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



Цитата(maxntf @ May 30 2018, 10:05) *
В общем выкинул все лишнее из программы.

Поменяйте в своем посте теги quote на code, иначе очень трудно читать этот сплошной текст ))
Не совсем понятна фраза "раскомментировать вкл/выкл прерывания TIM10", поясните о каких именно кусках кода идет речь.
Или покажите ДВА куска кода: работающий и неработающий.


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
maxntf
сообщение May 30 2018, 07:17
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 107
Регистрация: 13-05-09
Пользователь №: 49 008



Цитата(Forger @ May 30 2018, 10:13) *
Поменяйте в своем посте теги quote на code, иначе очень трудно читать этот сплошной текст ))
Не совсем понятна фраза "раскомментировать вкл/выкл прерывания TIM10", поясните о каких именно кусках кода идет речь.
Или покажите ДВА куска кода: работающий и неработающий.

ну в смысле включать и выключать прерывания enableInterruptTIM10() и disableInterruptTIM10() (они в примере закомментированы)
Go to the top of the page
 
+Quote Post
Forger
сообщение May 30 2018, 07:23
Сообщение #5


Профессионал
*****

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



Цитата(maxntf @ May 30 2018, 10:17) *
ну в смысле включать и выключать прерывания enableInterruptTIM10() и disableInterruptTIM10() (они в примере закомментированы)

Если закомментировать enableInterruptTIM10(), которые я увидел только в одном месте, то безусловно прерывания от этого таймера работать не будут ))


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
maxntf
сообщение May 30 2018, 07:25
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 107
Регистрация: 13-05-09
Пользователь №: 49 008



Цитата(Forger @ May 30 2018, 10:23) *
Если закомментировать enableInterruptTIM10(), которые я увидел только в одном месте, то безусловно прерывания от этого таймера работать не будут ))

Не в одном месте.
в прерывании отключаем при установке семафора, в задаче включаем после того как забрали семафор и выполнили обработку.
Go to the top of the page
 
+Quote Post
Forger
сообщение May 30 2018, 07:32
Сообщение #7


Профессионал
*****

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



Цитата(maxntf @ May 30 2018, 10:25) *
Не в одном месте.

Я смотрю Ваш код, по поиску (CTRL-F) вижу enableInterruptTIM10 только в одном месте ((



--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
maxntf
сообщение May 30 2018, 07:51
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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 страниц V   1 2 >


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd August 2025 - 15:44
Рейтинг@Mail.ru


Страница сгенерированна за 0.01541 секунд с 7
ELECTRONIX ©2004-2016