Должно ли динамическое выделение памяти (new/malloc) выполняться в прерывании?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Должно ли динамическое выделение памяти (new/malloc) выполняться в прерывании?

Сообщение Anonymous »

Я занимаюсь встроенным программированием (используя чип stm32f407).
в usb_otg_fs(interrupt) я читаю данные и динамически выделяю 8 байт (и записываю 8 байт), но проблема в том, что иногда происходит сбой при new/malloc/delete/free, мне потребовалось
много времени, чтобы просмотреть код, и я уверен, что моя куча памяти еще не закончилась 30%.
дело в том, что иногда происходит сбой в функции main(), в местах new/malloc/delete/free
код main()

Код: Выделить всё

while (1)
{
int r =1000;  // số ngẫu nhiên 0..200

const uint32_t ran_1 =(rand() % r) +1;
uint8_t *p = (uint8_t*)malloc(ran_1);
const uint32_t ran_2 =(rand() % r) +1;
uint8_t *p1 = (uint8_t*)malloc(ran_2);
const uint32_t ran_3 =(rand() % r) +1;
uint8_t *p2 = (uint8_t*)malloc(ran_3);
const uint32_t ran_4 =(rand() % r) +1;
uint8_t *p3 = (uint8_t*)malloc(ran_4);
const uint32_t ran_5 =(rand() % r) +1;
uint8_t *p4 = (uint8_t*)malloc(ran_5);
const uint32_t ran_6 =(rand() % r) +1;
uint8_t *p5 = (uint8_t*)malloc(ran_6);
free(p);
free(p1);
free(p2);
free(p3);
free(p4);
free(p5);
}
Я попробовал отключить прерывание и просто запустить код в main(), и все сработало нормально.
Меня интересует, является ли динамическое выделение памяти в прерывании хорошей идеей или нет, и почему?

Подробнее здесь: https://stackoverflow.com/questions/797 ... -interrupt
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»