Поцелуй БПФ на TI MSP430FR6989

Я пытаюсь запустить Kiss FFT (Kiss FFT github) на панели запуска MSP430FR6989. На данный момент я просто пытаюсь показать тест kiss_fftr здесь работать. У меня возникла проблема с kiss_fftr_alloc(int nfft,int inverse_fft,void * mem, size_t * lenmem). Мой ввод (16, 0, NULL, NULL). Функция достигает этой точки в kiss_fftr.c и затем возвращает NULL из-за оператора !st if.

if (lenmem == NULL) {
    st = (kiss_fftr_cfg) KISS_FFT_MALLOC (memneeded);
} else {
    if (*lenmem >= memneeded)
        st = (kiss_fftr_cfg) mem;
    *lenmem = memneeded;
}
if (!st)
{
    return NULL;
}

Malloc устанавливает st в NULL, поэтому ему не удалось выделить память. Я уверен, что в моем MCU достаточно памяти. Мое распределение памяти в CCS составляет 35% RAM (736/2048), 3% FRAM1 (1896/48000) и 28% FRAM2 (23144/81912).

Есть ли у кого-нибудь совет, как это исправить, или что я должен узнать, чтобы исправить это? Я не хочу искать неправильную кроличью нору, если проблема не в распределении памяти.

Что я пробовал: когда я пытаюсь запустить тестовый код, указанный в ссылке переполнения стека, и отправить выходной массив через UART, я не получаю вывода. Я проверил, правильно ли работает kiss_fft_alloc, сделав оператор if (st == NULL), который выдал бы KISS_FFT_ERROR. Ошибка возникла в точке, упомянутой выше, но я не могу понять, как исправить то, что malloc не может выделить память.


person ALackOfNumbers    schedule 01.07.2021    source источник
comment
Не знаком с MSP430, но из кода KISS FFT макрос распределения создан для поддержки оптимизации с использованием SIMD-инструкций. Я подозреваю, что эти инструкции могут не поддерживаться на этом MCU. Вы можете попытаться отменить определение USE_SIMD в KISS FFT.   -  person SleuthEye    schedule 02.07.2021
comment
Спасибо вам за помощь. Я обнаружил, что MSP430 не поддерживает SIMD-инструкции, но не могу найти, где в KISS FFT определяется USE_SIMD. Я могу найти операторы ifdef для USE_SIMD только в строках 38 и 47 файла kfc.c, строке 50 файла kiss_fft.h и строке 18 файла kiss_fftr.c. Я не могу найти определение USE_SIMD, поэтому я не уверен, как предотвратить попытки KISS FFT использовать SIMD, если SIMD упоминается только в операторах ifdef. Есть ли способ специально настроить KISS FFT, чтобы не использовать SIMD?   -  person ALackOfNumbers    schedule 07.07.2021
comment
Если USE_SIMD не определено, то KISS_FFT_MALLOC должно сопоставляться со стандартным вызовом malloc. Я предлагаю попробовать воспроизвести проблему без KISS FFT на картинке, пытаясь выделить блок памяти аналогичного размера.   -  person SleuthEye    schedule 08.07.2021
comment
Я попробовал malloc с вводом 16, таким же, как мой вызов функции kiss_fftr_alloc, и это сработало нормально. Я хочу попробовать malloc, используя memneeded вместо 16, чтобы получить точный тест. Я не знаю, как получить значение memneeded, кроме как с помощью UART, поэтому я работаю над настройкой функций UART для отправки переменных size_t.   -  person ALackOfNumbers    schedule 08.07.2021