Jump to content

    

Allregia

Свой
  • Content Count

    1152
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Allregia

  • Rank
    Профессионал

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array

Recent Profile Visitors

3360 profile views
  1. Этим не я а другие занимаются, но насколько я помню, там есть только настройка насчет динамических переменных, т.е использовать malloc/calloc или нет. Много локальных переменных внутри функций он объявляет статическими но многи нет - они и жрут стек.
  2. ИМХО тоже, но обясните это Матлабу.
  3. Совершенно согласен, вот я и его проклинаю :) С удовоьльствием, если кто-нибудь научит, как этому научить Матлаб....
  4. Да, М7, точнее STM32H7A3. Каким образом?
  5. Еще вопрос - если выделить для стека, ну к примеру 16К, но стек растет сверзу, а остальная память заполняется обычно снизу, и медду ними есть "дырка", не исползльзуемое пространство. Т.е. вполне реальна ситуация, когда стек используется бОльшего размера чем ему сказано. Но пока он щанимает только эту "дырку", и не налазит на занятую память - все работает. Так ведь? Придется тогда в самом деле водяными знаками, потому как при выделении стека в большом (почти 1М) банке памяти, где переменными занята пока лишь треть, все работает. А при выделении всего банка в 64К - через некоторое время получам HF.
  6. Очень длинные, там почти 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); } }
  7. Зачем тогда пишут не array[] a array[ххх] ? Например: static void fft(const float x[128], creal32_T y[512]) P.S. Я пытаюсь разоброаться, чего нагенерил Матлаб, точнее что им нагенерили наши алгоритмисты.... А он нагенерил такое, что ни в какой стек не влазит....
  8. Для ссылок то понятно - они для того и передаются ссылками. чтобы можно было менять исходный параметр, например чтобы функция могоа возвращать больше одного значения.
  9. Возник вопрос о передаче параметров в функции, даже несколко вопросов. Вопрос 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?
  10. С хипом и стеком - отбой, там причина оказалась совсем в другом. То, о чем изначало спрашивалсь - все работает.
  11. Статуса при хардфолте? А где его сомтреть? Мне как-то раньше не приходилось. В любом случае, это уже на той неделе - железка не у меня сейчас а у напарника.
  12. STM32H7A3RIT P.S. Вообще, код переносится (с необходимыми изменениями, конечно) из предыдущего варианта, который был на F722.
  13. Не найду. Если Вы про п. 2.7.8, то он вроде тут не причем, хотя может я чего-то и не понимаю -там-же про OCTOSPI, кторого у меня нет..Но кроме него, поиск по файлу слова "AXI" ничего не находит. Эррата от 16 октября.