Вечер пятничного тупняка
Nov. 2nd, 2018 06:52 pmПрограммисты делятся на два типа: тех кто не понимают указатели и тех кто уже понимает.
Есть функция, честно потыренная с stm32 (переношу код с стм-ки на ПК), которая считает модуль комплексных векторов.

И мне понадобилось, чтобы она возвращала вектор не в прямом, а обратном порядке. И совершенно очевидное решение.

Но есть нюанс © 💩 . В первом случае возвращает всё отлично, а во втором возвращает НУЛИ! Что я делаю не так? Я готов расписаться, что я хреновый программист и нифига не знаю си, но как?
З.Ы. Обратите внимания на прошлый пост, а главное на комментарии. Там коменты интереснее и содержательнее, чем пост. Прям как в лучшие годы ЖЖ.
З.З.Ы. Меня радует, что в коде можно вставлять комментарии в виде unicod-символов. Например, обозначить что код говно
//💩💩💩💩💩💩
Либо прям афигенный
//❤️❤️❤️❤️❤️❤️
Есть функция, честно потыренная с stm32 (переношу код с стм-ки на ПК), которая считает модуль комплексных векторов.

И мне понадобилось, чтобы она возвращала вектор не в прямом, а обратном порядке. И совершенно очевидное решение.

Но есть нюанс © 💩 . В первом случае возвращает всё отлично, а во втором возвращает НУЛИ! Что я делаю не так? Я готов расписаться, что я хреновый программист и нифига не знаю си, но как?
З.Ы. Обратите внимания на прошлый пост, а главное на комментарии. Там коменты интереснее и содержательнее, чем пост. Прям как в лучшие годы ЖЖ.
З.З.Ы. Меня радует, что в коде можно вставлять комментарии в виде unicod-символов. Например, обозначить что код говно
//💩💩💩💩💩💩
Либо прям афигенный
//❤️❤️❤️❤️❤️❤️
no subject
Date: 2018-11-02 05:27 pm (UTC)no subject
Date: 2018-11-02 06:05 pm (UTC)no subject
Date: 2018-11-02 06:14 pm (UTC)no subject
Date: 2018-11-02 08:20 pm (UTC)Итак, код протирается на ПК. А здешние компиляторы излишне умные. В чем разница верхнего и нижнего кода? Верхний будет работать корректно всегда. А нижний будет врать, если pSrc == pDst (т.е. если перекрываются области памяти параметров функции). Возможно, умный ПК'шный компилятор это понимает и пытается исправить. Судя по всему не очень успешно. Увы, борьба с шибко умным компилятором не редкость. Попробуйте прагму или ключи компилятора отключающие проверку перекрытия данных. Чем не шутит чёрт?
Ну, и практическая проверка будет как вернусь в город.
no subject
Date: 2018-11-02 10:35 pm (UTC)void arm_complex_mag_f32_rev (float * pSrc, float * pDst, uint32_t numSamples)
{
float realIn, imagIn, val;
pDst --;
while (numSamples > 0u)
{
realIn = *pSrc++;
imagIn = *pSrc++;
*(pDst + numSamples) = sqrt ((realIn * realIn) + (imagIn * imagIn));
numSamples --;
}
}
no subject
Date: 2018-11-02 11:22 pm (UTC)no subject
Date: 2018-11-07 12:07 am (UTC)Но как оказалось продебажить и выяснить причину ошибки - не вариант, "Я просто отказался от этой функции :)." (С) %))))
Хотя учитывая что "функция, честно потыренная с stm32" там могло быть все что угодно, вплоть до "void f(void* pSrc, void*pDst, int numcounts)" и "(double *)(pDst[numSamples-1]) = sqrt()" %))))
Чудес не бывает, если при изменении инкремента на декремент - вместо данных нули, то это обычно проблема перекрытия данных из-за несовпадения типа, например "пишем word по адресу byte".
no subject
Date: 2018-11-07 09:27 am (UTC)Я отказался по другой причине, так как реверс массива был не нужен - это была бага в коде БПФ.
Но в целом-то, конечно, я буду дебажить в другой раз.
no subject
Date: 2018-11-03 11:25 am (UTC)no subject
Date: 2018-11-03 07:57 pm (UTC)float sqrtf(float x);
long double sqrtl(long double x);
Дальше продолжать? %)))
no subject
Date: 2018-11-03 07:58 pm (UTC)no subject
Date: 2018-11-04 04:43 pm (UTC)no subject
Date: 2018-11-03 08:00 pm (UTC)no subject
Date: 2018-11-04 09:37 am (UTC)no subject
Date: 2018-11-04 12:48 pm (UTC)По правилам тип стоящий справа от присваивания будет неявно преобразован к типу стоящему слева.
no subject
Date: 2018-11-04 04:43 pm (UTC)no subject
Date: 2018-11-06 03:18 pm (UTC)no subject
Date: 2018-11-06 04:00 pm (UTC)no subject
Date: 2018-11-06 04:33 pm (UTC)int main(int argc, char **argv)
{
printf("%s","result : ");
float sem[]={1,2,3,4};
float res[4];
result(sem,res,4);
for(int i=0;i<4;i++){
printf(" [%f] ",res[i]);
}
return 0;
}
void result(float *src, float *dest,long samples){
float in;
while(samples>0u){
in=*src++;
dest[samples-1]=in;
samples--;
}
}
Я не знаю языков, но вот этот код полностью работает. gcc -Wall -o ,с опцией -o1 geany что то не собирает.
'
no subject
Date: 2018-11-06 05:57 pm (UTC)