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

 
 
> Зависает контроллер при работе с Ethernet
ZAA
сообщение Nov 13 2008, 04:54
Сообщение #1


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

Группа: Участник
Сообщений: 141
Регистрация: 10-02-08
Из: Екб
Пользователь №: 34 906



Проблема в следующем. В основе - FreeRTOS 5.0.2. Контроллер AT91SAM7x256. В программе 2 задачи - Modbus (написана собственноручно), в которой идет опрос датчиков. и UIP (за основу взят стандартный сервер FreeRTOS). Есть флэш-ролик, который запускается из стандартного браузера или Flash-playerа. Ролик по ethernet посылает запросы (аналогичные стандартным фриртосовским - только вместо страниц index.shtml, io.shtml, tcp.shtml и т д - приходит запросы 172.210.10.25/123.txt?0*, 172.210.10.25/123.txt?1*, 172.210.10.25/123.txt?2* и т д, где ?0*, ?1*, ?2*). В ответ (после сравнения полученного s->filename) контроллер посылает строку s->file.data с длиной s->file.len. В стандартном сервере строки s->file.data константы, а в моей программе длина строки каждый раз разная в зависимости от пришедшего запроса. Пытаюсь выделять память для строки pvPortMalloc'ом, а потом удалять указатель, но контроллер после нескольких десятков-сотен запросов зависает.

понимаю. что на первый взгляд сложно определить причину проблемы, но все же жду от вас советов и помощи. Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
KonstantinT
сообщение Nov 13 2008, 08:32
Сообщение #2


Участник
*

Группа: Новичок
Сообщений: 29
Регистрация: 3-11-04
Пользователь №: 1 027



Если уходит в аборт , по по lr узнайте из какой точки программы вылетает, по состоянию регистров можно понять (неправильный указатель чаще всего).
Go to the top of the page
 
+Quote Post
ZAA
сообщение Nov 13 2008, 09:37
Сообщение #3


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

Группа: Участник
Сообщений: 141
Регистрация: 10-02-08
Из: Екб
Пользователь №: 34 906



Цитата(KonstantinT @ Nov 13 2008, 11:32) *
Если уходит в аборт , по по lr узнайте из какой точки программы вылетает, по состоянию регистров можно понять (неправильный указатель чаще всего).

К сожалению работаю без отладчика, поэтому никак не могу посмотреть состояние регистров...
Еще добавлю - подозреваю, что проблема может быть и в этом. У меня осуществляется обмен данными между потоками. Для этого я использую Mutex. Для доступа к общим данным использую следующую структуру:
Например в потоке modbus
if (xSemaphore != NULL)
{
if (xSemaphoreTake(.....) != NULL)
{
buffer1 = vTableSensorConfigure.xSensorConfigureStruct[index1]->Sensor_Value_Float;
buffer2 = vTableSensorConfigure.xSensorConfigureStruct[index1]->Sensor_Error;
xSemaphoreGive(xSemaphore);
}
} //Далее оперирую с локальными переменными buffer1 и buffer2
В потоке uip
if (xSemaphore != NULL)
{
if (xSemaphoreTake(.....) != NULL)
{
var1 = vTableSensorConfigure.xSensorConfigureStruct[index1]->Sensor_Value_Float;
var2 = vTableSensorConfigure.xSensorConfigureStruct[index1]->Sensor_Error;
xSemaphoreGive(xSemaphore);
}
}

Приоритеты и величины стеков у обоих потоков одинаковые...

Цитата(aaarrr @ Nov 13 2008, 10:39) *
Зависает, или падает в Abort? Во втором случае найти причину будет гораздо проще.
Начните с проверки выделения памяти, проверьте, нет ли утечки.

Подскажите плз несведующему, как можно эту самую утечку проверить...или ссылочку на тему в форуме, где есть unsure.gif Спасибо
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 13 2008, 09:52
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(ZAA @ Nov 13 2008, 12:37) *
К сожалению работаю без отладчика, поэтому никак не могу посмотреть состояние регистров...

Для этого не обязательно пользоваться отладчиком. Разместите переходы на asm-обертки на векторах DataAbort и PrefetchAbort, а содержимое регистров выведите через UART, например.

Цитата(ZAA @ Nov 13 2008, 12:37) *
Подскажите плз несведующему, как можно эту самую утечку проверить...или ссылочку на тему в форуме, где есть unsure.gif Спасибо

Просто проверьте, не сползает ли постепенно адрес при вызове malloc.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ZAA   Зависает контроллер при работе с Ethernet   Nov 13 2008, 04:54
- - _dem   Удалять указатель - через pvPortFree или delete()/...   Nov 13 2008, 07:37
- - aaarrr   Цитата(ZAA @ Nov 13 2008, 07:54) Пытаюсь ...   Nov 13 2008, 07:39
|- - ZAA   Цитата(aaarrr @ Nov 13 2008, 12:52) Для э...   Nov 27 2008, 18:45
|- - aaarrr   Цитата(ZAA @ Nov 27 2008, 21:45) Обязател...   Nov 27 2008, 20:15
|- - ZAA   Цитата(aaarrr @ Nov 27 2008, 23:15) Так в...   Nov 28 2008, 07:58
|- - ZAA   Цитата(aaarrr @ Nov 27 2008, 23:15) Не об...   Nov 30 2008, 15:40
|- - aaarrr   Цитата(ZAA @ Nov 30 2008, 18:40) А можно ...   Nov 30 2008, 17:47
- - Dron_Gus   А еще во FreeRTOS'е существует три метода рабо...   Nov 13 2008, 10:03
- - _dem   При выводе страниц делайте на странице что-то в ст...   Nov 13 2008, 11:06
|- - ZAA   Цитата(_dem @ Nov 13 2008, 14:06) Если пр...   Nov 13 2008, 17:39
- - scifi   Я бы всё-таки посоветовал наладить внутрисхемную о...   Nov 30 2008, 16:45
- - ZAA   Цитата(scifi @ Nov 30 2008, 19:45) Я бы в...   Nov 30 2008, 17:14
- - zltigo   Цитата(scifi @ Nov 30 2008, 19:45) Трудно...   Nov 30 2008, 17:56


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

 


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


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