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

 
 
> STM32 зависание при добавлении любой функции
Neo_Matrix
сообщение Feb 17 2016, 21:33
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 11-04-06
Пользователь №: 16 029



Имеется плата на stm32f407 камне. Пытаюсь написать функцию парсинга ответов от модема, но при добавлении любой строки в функцию - получаю полное зависание проца. Как отлаживать не могу понять, так как присутствует FreeRTOS.
Собственно сама функция выглядит так:
Код
uint8_t modemresponse(char * data, uint16_t leng)
{
    if(iblanks(Uart3RXBuf, leng))
    {
        return 0;
    }
    else if(memchr(data, '+', leng) && memchr(data, ':', leng))
    {
        return 1;
    }
    else if(strstr(data,"ERROR") != NULL)
    {
        return 2;
    }
    else
    {
        return 3;
    }
}

Если сделать как ниже, то все работает. Тоесть достаточно закоментировать любой из else if или даже else. Если закоментировать один вариант выбора и вместо него в конец функции подставить хотя бы
Код
HAL_UART_Transmit(&huart6,(uint8_t *)"Zavislo\r",8,100);
или все что угодно - опять висяк.
Код
uint8_t modemresponse(char * data, uint16_t leng)
{
    if(iblanks(Uart3RXBuf, leng))
    {
        return 0;
    }
    else if(memchr(data, '+', leng) && memchr(data, ':', leng))
    {
        return 1;
    }
    //else if(strstr(data,"ERROR") != NULL)
    //{
    //    return 2;
    //}
    else
    {
        return 3;
    }
}

Когда то с таким сталкивался и проблема была в размере СТОК\ХЕАП. В данном случае пробовал менять их размер и в FreeRTOS и в Стартап файле, но как узнать какой размер куда прописывать?

Похоже разобрался. Поставил во FreeRTOS вместо heap4 тип heap1.

Сообщение отредактировал Neo_Matrix - Feb 17 2016, 21:34
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Neo_Matrix
сообщение Feb 18 2016, 08:30
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 11-04-06
Пользователь №: 16 029



gazpar
Странно, что работает:


void *memchr(const void *buffer, int ch, size_t count);
Эта функция возвращает указатель на первый из символов ch, входящих в массив buffer, или нулевой указатель, если символ ch не найден.


Сама реализация вполне рабочая. И совершенно не важно, что там идет после if (if else), можно хоть сравнение добавить uint8_t a=1; if(a==1); все равно функция виснет.

esaulenka
Глубже копать уже просто некуда(ну или я не вижу).
В конечном счете выяснил, что при всех вариантах heap,кроме heap_4 все работает. Даже на heap_5 работает, а он почти тот же heap_4.
Остановился на heap_2. Маалоков нет. Динамические только очереди и пару задач временами убиваются/создаются.


Сообщение отредактировал Neo_Matrix - Feb 18 2016, 08:33
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Feb 18 2016, 09:13
Сообщение #3


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

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Цитата(Neo_Matrix @ Feb 18 2016, 11:30) *
Глубже копать уже просто некуда(ну или я не вижу).

Ну, если Вы можете чётко сказать "в задаче А столько-то свободного стека, в задаче Б - столько-то, хипа используется столько-то", в эту сторону копать не стоит.
А пока "я не знаю, переполняется что-то или нет", копать есть куда. И много...


Цитата(Neo_Matrix @ Feb 18 2016, 11:30) *
Остановился на heap_2. Маалоков нет. Динамические только очереди и пару задач временами убиваются/создаются.

Ну так создание/удаление очередей-задач - это чистейший маллок/фрии.
А heap_2 - это плохо. Оно нормально работает только при выделении/удалении элементов одинакового размера.



Ну и было б неплохо вместо "проц виснет" описать "вываливается в hardfault, link-register указывает на функцию ааа(), там у меня происходит ...".
Начинать читать здесь: http://www.freertos.org/Debugging-Hard-Fau...ontrollers.html


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Neo_Matrix   STM32 зависание при добавлении любой функции   Feb 17 2016, 21:33
- - gazpar   Странно, что работает: Кодconst void * memchr ...   Feb 18 2016, 01:08
|- - Сергей Борщ   Цитата(gazpar @ Feb 18 2016, 03:08) Стран...   Feb 18 2016, 07:03
- - esaulenka   Цитата(Neo_Matrix @ Feb 18 2016, 00:33) К...   Feb 18 2016, 07:56
- - gazpar   Ок. Neo_Matrix, Вы используете прерывания? Если д...   Feb 18 2016, 08:48
- - Neo_Matrix   gazpar Настройка прерываний следущая HAL_NVIC_SetP...   Feb 18 2016, 10:37
- - gazpar   В этой РТОС есть специальные службы для определени...   Feb 18 2016, 10:56
- - Neo_Matrix   Немного добавлю по отладке. Есть задача, которая в...   Feb 18 2016, 11:41
|- - esaulenka   Цитата(Neo_Matrix @ Feb 18 2016, 14:41) Н...   Feb 18 2016, 13:09
|- - turnon   Цитата(esaulenka @ Feb 18 2016, 17:09) 2)...   Mar 17 2016, 21:36
- - Neo_Matrix   Цитата(esaulenka @ Feb 18 2016, 15:09) 1)...   Feb 18 2016, 14:45
|- - esaulenka   Цитата(Neo_Matrix @ Feb 18 2016, 17:45) e...   Feb 18 2016, 15:52
- - Neo_Matrix   esaulenka,gazpar Спасибо за помощь. Уже немного ра...   Feb 18 2016, 21:56
- - esaulenka   Слово "HAL" я пропустил. Вас ждёт масса...   Feb 19 2016, 07:17
- - Neo_Matrix   К сожалению не изменилось нечего Кроме: Код * @fi...   Feb 19 2016, 09:15


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

 


RSS Текстовая версия Сейчас: 12th August 2025 - 02:16
Рейтинг@Mail.ru


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