У меня есть приложение VxWorks, работающее на ARM uC.
Сначала позвольте мне подытожить приложение;
Приложение состоит из стороннего стека и шлюзового приложения. Мы реализовали уровень абстракции операционной системы для поддержки независимости от ОС.
Базовый стек имеет собственное средство управления и контроля памяти, которое содержит блоки памяти в двусвязном списке.
Например ; мы не выполняем напрямую malloc/new , free/delege . Вместо этого мы вызываем подпрограммы уровня OSA, и он получает память от ОС и помещает ее в список, а затем возвращает эту память приложению (подпрограммы: XXAlloc , XXFree, XXReAlloc)
А при освобождении памяти снова используем XXFree.
На самом деле этот блок представляет собой структуру, которая имеет
-магические числа указывают начало и конец блока памяти -размер, запрошенный пользователем, выделенный -размер в действительности из-за проблем с выравниванием предыдущих и следующих указателей -указатель на часть памяти, возвращаемую приложению. регистр ссылок, показывающий, где в приложении вызывается xxAlloc.
С помощью этой блочной структуры стек может проверить, поврежден блок или нет.
Также у нас есть библиотека pthread, перенесенная из Linux, которую мы используем для -создания/завершения потоков (в настоящее время существует 22 потока) -объектов синхронизации (события, мьютексы...)
Основная задача вызывается taskSpawn, а позже эта задача создала другие потоки.
это было описание приложения и его интерфейса VxWorks.
Проблема в :
одна из задач внезапно уничтожается VxWorks, не давая никакой информации о том, что не так. У меня также есть отладчик jtag, и он попадает в процедуру VxWorks taskDestoy(), но стек вызовов не дает никакой информации ни на ПК, ни на r14.
Я с подозрением отношусь к конкретной процедуре в коде, где выполняется огромный xxAlloc, но проблема возникает очень спорадически, не давая понять, что я могу сопоставить ее с исходным кодом.
Я думаю, что ОС обнаруживает исключение и выполняет его обработку молча.
любая помощь будет здорово
С Уважением