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

 
 
> LPC2103+FreeRTOS, проблемы malloc в libc библе CrossWork
klen
сообщение Aug 18 2006, 04:31
Сообщение #1


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Всем привет.
Засунул FreeRTOS в LPC2103. Первый раз не пришлось придумывать и обосновывать зачем я вставляю ОС в контроллер. Всетаки в природе попадаются такие задачи для микроконтроллеров... smile.gif
Протрахался два дня c одной проблемкой. Была проблема с выделением памяти при инициализации задач и очередей. Вернее при выделении проблем не было - функция malloc исправно выдает указатели и тд. Но при некоторых вызовах, например
pbRes = xQueueSend(qhTwi_0_SignaledQueue, &pbTmp , portMAX_DELAY );
возвращался вместо результата 1 или 0 число позначение равное адресам попадавшим в кучу, стеки режимов процессора и тд. Тоест есть похоже чтото на чтото залазило. После такой ситуации есессено PAbort или DAbort.
Прикол в том что допишеш строку кода в какомнибудь любом модуле - работает, допишеш еще - глючит, и все в таком духе, закономерности поведения я не уловил.
Разгодать причину не получилось (стеки заведомо больше задавались чем нада - проверял ручным счетом, также при ручном выделении стало все работать безошибочно без изменения размеров). Поэтому взял попробывал ручное управление кучей а malloc из libc от CrossWork был послан нах, освобождение памяти мне не требуется, поэтому ручное выделение както проше, меньше жрет и так сказать я тут все регулирую.

Где проблема? я чето не понял как чтото работает или всетаки malloc у CrossWork кривой. Локально задачка решена, но не дает покоя вопрос ПОЧЕМУ? вдруг это почему вылезет потом в другом месте.

Сообщение отредактировал klen - Aug 18 2006, 04:33
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
klen
сообщение Aug 18 2006, 12:07
Сообщение #2


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Я огарчен. Глюк о котором я говорил выше не связан с кучей. Компилятор раз от раза генерит разный код в месте от выхода из функции и засовывания результата в локальную переменную. Ваще ничего не пойму sad.gif В случае кривой кодогенерации стабильно кладет по адресу результата (окальная переменная) значение первого аргумента функции...., если переменная глобальная то проблем вроде не возникает. Внутри вызванной функции до самого выхода наверх все нормально - результат правильрый, после выхода из нее девки интересно плясать начинают.
Это ваще чево?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 18 2006, 12:25
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(klen @ Aug 18 2006, 15:07) *
Глюк о котором я говорил выше не связан с кучей.

Что, в общем и следовало ожидать.
Цитата
Это ваще чево?

Пробуйте спокойно локализовывать. Грабли номер 'раз', когда "ничего не понятно" обычно называются stack. Во FreeRTOS есть простеький механизм оценки обьема стека рельно используемого задачами.
Увеличте рамеры в разы и воспользуйтесь.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
klen
сообщение Aug 18 2006, 15:22
Сообщение #4


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата(zltigo @ Aug 18 2006, 16:25) *
Во FreeRTOS есть простеький механизм оценки обьема стека рельно используемого задачами.
Увеличте рамеры в разы и воспользуйтесь.

Че за механизм оценки использования глубины стека? ну очень хочется чтоб это было так что стеков не хватает... но все перерыл и калькулятором и отладчиком в самую глубокую функцию гглядя на SP. Пока на стеки пинать не приходится.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 18 2006, 16:10
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(klen @ Aug 18 2006, 18:22) *
Че за механизм оценки использования глубины стека?


Смотрите на:
prvListTaskWithinSingleList( ) -> usTaskCheckFreeStackSpace( )

Я в принципе у себя контроль переписывал, но больше из эстетических соображений.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post



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

 


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


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