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

 
 
> new и delete в IAR (ARM)
0x435641
сообщение Mar 19 2013, 05:24
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 26-07-12
Пользователь №: 72 908



столкнулся со странными вылетаниями программы в swi_handler и data_handler
в проекте активно используется динамическая память, Ethernet, USB
долгими мучительными копаниями удалось найти причину - параллельное выполнение сабжевых операторов, которые используются как в основном цикле, так и в прерываниях

на данный момент решил вопрос отключением прерываний, если new и delete вызываются вне прерывания

в нете не нашел инфы по спицифике использования этих операторов в IAR

если кто-то обладает знаниями - просьба поделиться
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
MALLOY2
сообщение Mar 19 2013, 09:04
Сообщение #2


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



Цитата
это вероятные догадки... хотелось бы документального подтверждения

На странице 390 мануала все написано, что эти функции не реентерабельны. Защищайте их сами семафорами или мутексами ну или свой менагер.

Цитата
REENTRANCY
A function that can be simultaneously invoked in the main application and in any
number of interrupts is reentrant. A library function that uses statically allocated data is
therefore not reentrant.
Most parts of the DLIB library are reentrant, but the following functions and parts are
not reentrant because they need static data:
● Heap functions—malloc, free, realloc, calloc, and the C++ operators new
and delete
● Locale functions—localeconv, setlocale
● Multibyte functions—mbrlen, mbrtowc, mbsrtowc, mbtowc, wcrtomb,
wcsrtomb, wctomb
● Rand functions—rand, srand
● Time functions—asctime, localtime, gmtime, mktime
● The miscellaneous functions atexit, strerror, strtok
● Functions that use files or the heap in some way. This includes printf, sprintf,
scanf, sscanf, getchar, and putchar.
Functions that can set errno are not reentrant, because an errno value resulting from
one of these functions can be destroyed by a subsequent use of the function before it is
read. This applies to math and string conversion functions, among others.
Remedies for this are:
● Do not use non-reentrant functions in interrupt service routines
Go to the top of the page
 
+Quote Post



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

 


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


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