Kalombyr
@Kalombyr

Какие есть подводные камни memmove на gcc STM32?

Приветствую!
Нужно сдвигать массив влево-вправо (не циклически, выпирающие элементы удаляются)
Для этого сделал вот такой код:
int N = MIN( (len-index), (QUEUE_SIZE-index2) ); 
 memmove(buf+index2, buf+index,  N * sizeof(int) );

Где
  • buf - статический массив (для примера указан int, в реале void*),
  • QUEUE_SIZE - его длина
  • len - индекс последнего реально существующего элемента
  • index - откуда
  • index2 - куда
  • N - вычисляется сколько элементов нужно переместить

Вот как это выглядит:
QUEUE_SIZE = 12
len = 10
m[12]= 1_2_3_4_5_6_7_8_ 9_10_0_0
_____________|_______|_________________
__________index___index2_____________
index = 2 - откуда
index2 = 5 - куда

В результате должно получиться вот так:
m[12]= 1 2 0 0 0 3 4 5 6 7 8 9

Всё так и получается, но на stm32 иногда в buf[0] появляется NULL, хотя быть его там не должно, причём все остальные элементы совпадают и на нужных местах. Длина len при этом то же совпадает. Какие могут быть подводные камне memmove() или где я мог накосячить?
Вот примерный код целиком для экспериментов: cpp.sh/9e436

P.S. размер стека и кучи друг друга не перекрывает, памяти хватает.
  • Вопрос задан
  • 224 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы