

Allregia
Свой-
Content Count
1152 -
Joined
-
Last visited
Community Reputation
0 ОбычныйAbout Allregia
-
Rank
Профессионал
Контакты
-
Сайт
Array
-
ICQ
Array
Информация
-
Город
Array
Recent Profile Visitors
3360 profile views
-
Передача параметров в функции.
Allregia replied to Allregia's topic in ARM, 32bit
Этим не я а другие занимаются, но насколько я помню, там есть только настройка насчет динамических переменных, т.е использовать malloc/calloc или нет. Много локальных переменных внутри функций он объявляет статическими но многи нет - они и жрут стек. -
Передача параметров в функции.
Allregia replied to Allregia's topic in ARM, 32bit
ИМХО тоже, но обясните это Матлабу. -
Передача параметров в функции.
Allregia replied to Allregia's topic in ARM, 32bit
Совершенно согласен, вот я и его проклинаю :) С удовоьльствием, если кто-нибудь научит, как этому научить Матлаб.... -
Передача параметров в функции.
Allregia replied to Allregia's topic in ARM, 32bit
Они все четыре такие. -
Передача параметров в функции.
Allregia replied to Allregia's topic in ARM, 32bit
Какого из? -
Передача параметров в функции.
Allregia replied to Allregia's topic in ARM, 32bit
Да, М7, точнее STM32H7A3. Каким образом? -
Передача параметров в функции.
Allregia replied to Allregia's topic in ARM, 32bit
Еще вопрос - если выделить для стека, ну к примеру 16К, но стек растет сверзу, а остальная память заполняется обычно снизу, и медду ними есть "дырка", не исползльзуемое пространство. Т.е. вполне реальна ситуация, когда стек используется бОльшего размера чем ему сказано. Но пока он щанимает только эту "дырку", и не налазит на занятую память - все работает. Так ведь? Придется тогда в самом деле водяными знаками, потому как при выделении стека в большом (почти 1М) банке памяти, где переменными занята пока лишь треть, все работает. А при выделении всего банка в 64К - через некоторое время получам HF. -
Передача параметров в функции.
Allregia replied to Allregia's topic in ARM, 32bit
Очень длинные, там почти 400 килобайт текста.... Вот пример парочки функций: static void median(const float x[1419], float y[3]) { int j; int k; float xv[473]; int exitg1; int ipiv; int ia; int ib; int ilast; int oldnv; boolean_T checkspeed; boolean_T isslow; boolean_T exitg2; float vref; float vk; float f2; boolean_T guard1 = false; int c; int ngroupsof5; int nlast; for (j = 0; j < 3; j++) { for (k = 0; k < 473; k++) { xv[k] = x[j + k * 3]; } k = 0; do { exitg1 = 0; if (k < 473) { if (rtIsNaNF(xv[k])) { y[j] = rtNaNF; exitg1 = 1; } else { k++; } } else { ipiv = 236; ia = 0; ib = 472; ilast = 472; oldnv = 473; checkspeed = false; isslow = false; exitg2 = false; while ((!exitg2) && (ia + 1 < ib + 1)) { vref = xv[ipiv]; xv[ipiv] = xv[ib]; xv[ib] = vref; ilast = ia; ipiv = -1; for (k = ia + 1; k <= ib; k++) { vk = xv[k - 1]; f2 = xv[k - 1]; if (f2 == vref) { xv[k - 1] = xv[ilast]; xv[ilast] = vk; ipiv++; ilast++; } else { if (f2 < vref) { xv[k - 1] = xv[ilast]; xv[ilast] = vk; ilast++; } } } xv[ib] = xv[ilast]; xv[ilast] = vref; guard1 = false; if (237 <= ilast + 1) { if (237 >= ilast - ipiv) { exitg2 = true; } else { ib = ilast - 1; guard1 = true; } } else { ia = ilast + 1; guard1 = true; } if (guard1) { c = (ib - ia) + 1; if (checkspeed) { isslow = (c > oldnv / 2); oldnv = c; } checkspeed = !checkspeed; if (isslow) { while (c > 1) { ngroupsof5 = c / 5; nlast = c - ngroupsof5 * 5; c = ngroupsof5; for (k = 0; k < ngroupsof5; k++) { ipiv = (ia + k * 5) + 1; ipiv = thirdOfFive(xv, ipiv, ipiv + 4) - 1; ilast = ia + k; vref = xv[ilast]; xv[ilast] = xv[ipiv]; xv[ipiv] = vref; } if (nlast > 0) { ipiv = (ia + ngroupsof5 * 5) + 1; ipiv = thirdOfFive(xv, ipiv, (ipiv + nlast) - 1) - 1; ilast = ia + ngroupsof5; vref = xv[ilast]; xv[ilast] = xv[ipiv]; xv[ipiv] = vref; c = ngroupsof5 + 1; } } } else { if (c >= 3) { ipiv = ia + (c - 1) / 2; if (xv[ia] < xv[ipiv]) { if (xv[ipiv] < xv[ib]) { } else if (xv[ia] < xv[ib]) { ipiv = ib; } else { ipiv = ia; } } else if (xv[ia] < xv[ib]) { ipiv = ia; } else { if (xv[ipiv] < xv[ib]) { ipiv = ib; } } if (ipiv + 1 > ia + 1) { vref = xv[ia]; xv[ia] = xv[ipiv]; xv[ipiv] = vref; } } } ipiv = ia; ilast = ib; } } y[j] = xv[ilast]; exitg1 = 1; } } while (exitg1 == 0); } } static void merge(int idx[257], float x[257], int offset, int np, int nq, int iwork[257], float xwork[257]) { int n_tmp; int iout; int p; int i6; int q; int exitg1; if ((np == 0) || (nq == 0)) { } else { n_tmp = np + nq; for (iout = 0; iout < n_tmp; iout++) { i6 = offset + iout; iwork[iout] = idx[i6]; xwork[iout] = x[i6]; } p = 0; q = np; iout = offset - 1; do { exitg1 = 0; iout++; if (xwork[p] >= xwork[q]) { idx[iout] = iwork[p]; x[iout] = xwork[p]; if (p + 1 < np) { p++; } else { exitg1 = 1; } } else { idx[iout] = iwork[q]; x[iout] = xwork[q]; if (q + 1 < n_tmp) { q++; } else { q = iout - p; for (iout = p + 1; iout <= np; iout++) { i6 = q + iout; idx[i6] = iwork[iout - 1]; x[i6] = xwork[iout - 1]; } exitg1 = 1; } } } while (exitg1 == 0); } } -
Передача параметров в функции.
Allregia replied to Allregia's topic in ARM, 32bit
Зачем тогда пишут не array[] a array[ххх] ? Например: static void fft(const float x[128], creal32_T y[512]) P.S. Я пытаюсь разоброаться, чего нагенерил Матлаб, точнее что им нагенерили наши алгоритмисты.... А он нагенерил такое, что ни в какой стек не влазит.... -
Передача параметров в функции.
Allregia replied to Allregia's topic in ARM, 32bit
Для ссылок то понятно - они для того и передаются ссылками. чтобы можно было менять исходный параметр, например чтобы функция могоа возвращать больше одного значения. -
Передача параметров в функции.
Allregia posted a topic in ARM, 32bit
Возник вопрос о передаче параметров в функции, даже несколко вопросов. Вопрос 1. func( int a){..} и func(const int a){..} Я в курсе что это означает, но не могу понять логику - ведь передается не указатель на переменную а создается копия этой переменной. Так какая разница, меняется она внутри функции или нет, если при выходе из функции копия все равно потеряется а исходная переменная останется без именений? Вопрос 2. переменная, массив: float MyArray[1000]; функция: func( float data[1000]); вызываем: func(MyArra) - передается ведь указатель, а не весь массив в стек запихивается? чем тогда это отличается, если аргументм функции явно написать указатель на массив? func(* flat data[1000]) ? а если функция определена как func(const float data[1000]), то комплилятор при этом проверяет, чтоы внтури функции, данные по тому указателюбыли только ReadOnly? -
С хипом и стеком - отбой, там причина оказалась совсем в другом. То, о чем изначало спрашивалсь - все работает.
-
Статуса при хардфолте? А где его сомтреть? Мне как-то раньше не приходилось. В любом случае, это уже на той неделе - железка не у меня сейчас а у напарника.
-
STM32H7A3RIT P.S. Вообще, код переносится (с необходимыми изменениями, конечно) из предыдущего варианта, который был на F722.
-
Не найду. Если Вы про п. 2.7.8, то он вроде тут не причем, хотя может я чего-то и не понимаю -там-же про OCTOSPI, кторого у меня нет..Но кроме него, поиск по файлу слова "AXI" ничего не находит. Эррата от 16 октября.