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

 
 
 
Reply to this topicStart new topic
> ПО зависает если configTOTAL_HEAP_SIZE больше 5 кБ, MSP430F67791 (IAR)
AlexFTF
сообщение Feb 12 2015, 06:49
Сообщение #1


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

Группа: Свой
Сообщений: 95
Регистрация: 11-11-10
Из: Новосибирск
Пользователь №: 60 808



Добрый день, коллеги!

При создании двух простых задач (каждая мигает светодиодом с определенным интервалом) возникла следующая проблема:

Когда в фале FreeRTOSConfig прописаны следующие значения:

CODE
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 10 * 1024 ) )

т.е выделяется 10кБ оперативной памяти, программа переходит в бесконечный цикл см. рисунок

Прикрепленное изображение


поскольку R15 не равно R12. Но стоит остановить работу сторожевого таймера "вручную" из отладчика - программа начинает работать.

Меняю настройки на:
CODE
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 4 * 1024 ) )

Все работает, т.е если куча больше 5кБ - программа не работает.

Из описания на МК следует что у него доступно 32кБ RAM.

В чем может быть проблема?




Go to the top of the page
 
+Quote Post
seniorandre
сообщение Feb 12 2015, 07:33
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 58
Регистрация: 6-07-12
Из: г.Нижний Новгород
Пользователь №: 72 651



Как бы очень мало инфы... Если это разминка, то кидайте архив проекта, постараюсь посмотреть.
Единственно что могу сказать что 4к очень мало, ОС наверное совсем не адекватно работает при таком кол-ве кучи и соответственно улетает не туда, а вот что происходит при 10к, сказать не могу.

Сообщение отредактировал seniorandre - Feb 12 2015, 07:38
Go to the top of the page
 
+Quote Post
den_po
сообщение Feb 12 2015, 08:41
Сообщение #3


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

Группа: Участник
Сообщений: 139
Регистрация: 9-11-12
Из: Санкт-Петербург
Пользователь №: 74 315



AlexFTF,
в IAR можно попробовать посмотреть call stack.

seniorandre,
4к для кучи это не мало
Go to the top of the page
 
+Quote Post
AlexFTF
сообщение Feb 12 2015, 09:35
Сообщение #4


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

Группа: Свой
Сообщений: 95
Регистрация: 11-11-10
Из: Новосибирск
Пользователь №: 60 808



Цитата(seniorandre @ Feb 12 2015, 13:33) *
Как бы очень мало инфы... Если это разминка, то кидайте архив проекта, постараюсь посмотреть.
Единственно что могу сказать что 4к очень мало, ОС наверное совсем не адекватно работает при таком кол-ве кучи и соответственно улетает не туда, а вот что происходит при 10к, сказать не могу.


В том то и дело что при куче меньше 5к все работает.
В приложении папка с проектом.
Буду рад если посмотрите.
Прикрепленный файл  Blinc2.rar ( 2.04 мегабайт ) Кол-во скачиваний: 72


Цитата(den_po @ Feb 12 2015, 14:41) *
AlexFTF,
в IAR можно попробовать посмотреть call stack.

seniorandre,
4к для кучи это не мало


Простите за безграмотность, я начинающий sm.gif что такое call stack?
Go to the top of the page
 
+Quote Post
den_po
сообщение Feb 12 2015, 09:50
Сообщение #5


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

Группа: Участник
Сообщений: 139
Регистрация: 9-11-12
Из: Санкт-Петербург
Пользователь №: 74 315



Цитата(AlexFTF @ Feb 12 2015, 14:35) *
Простите за безграмотность, я начинающий sm.gif что такое call stack?

В меню view / call stack. Там можно поглядеть цепочку вызовов.
Go to the top of the page
 
+Quote Post
seniorandre
сообщение Feb 12 2015, 09:55
Сообщение #6


Участник
*

Группа: Свой
Сообщений: 58
Регистрация: 6-07-12
Из: г.Нижний Новгород
Пользователь №: 72 651



Цитата(seniorandre @ Feb 12 2015, 10:33) *
Как бы очень мало инфы... Если это разминка, то кидайте архив проекта, постараюсь посмотреть.
Единственно что могу сказать что 4к очень мало, ОС наверное совсем не адекватно работает при таком кол-ве кучи и соответственно улетает не туда, а вот что происходит при 10к, сказать не могу.

Проект посмотрел, особого криминала не нашел. Правда я не работал ни с msp430 ни с IAR.
Обычно когда на STM начинаю проект, то я первым делом делаю обвязку для отлова ошибок, что-то вроде вот этого Пример, но Вам придется сделать это под себя. Правда обычно достаточно стек вызовов посмотреть если вы попадаете в отладчик.
Go to the top of the page
 
+Quote Post
AlexFTF
сообщение Feb 12 2015, 12:28
Сообщение #7


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

Группа: Свой
Сообщений: 95
Регистрация: 11-11-10
Из: Новосибирск
Пользователь №: 60 808



Проблема разрешилась.

Оказывается, если в приложении выделяется больше 4кБ памяти то система просто не успевает проинициализировать выделенную кучу из-за того что срабатывает сторожевой таймер. Решение проблемы следующее:
1. Скопировать файл "low_level_init.c" (from ...\430\src\lib\) в директорию с проектом.
2. Включить этот файл в проект.
3. В файле low_level_init.c добавить заголовочный файл с описанием регистров МК (в моем случае "msp430.h")
4. В теле функции __low_level_init() добавить строчку:
WDTCTL = WDTPW + WDTHOLD;
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 17th June 2025 - 18:47
Рейтинг@Mail.ru


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