Цитата(Oldring @ Jul 19 2007, 14:58)

В чем проявляются глюки?
qsort - старый давно используемый алгоритм и работает при любой длине. На 32-битном процессоре лучше не ожидать, что проявятся какие-либо ошибки в написании qsort на длине 1500.
Но нужно не забывать, что qsort имеет квадратичное время в худшем. Для qsort в MSVC, например, одним из тяжелых случаев были массивы с большим количеством идущих подряд одинаковых элементов. Весьма возможно, что и в IAR qsort обладает тем же поведением. В таких случаях нужно использовать другие алгоритмы сортировки - не зря их существует множество.
Глюки проявляются в том, что контроллер просто зависает! Т. е, не выходит из этой функции. И это при числе элементов уже порядка 3000. А уменя реальный массив из 30000 элементов! Насчет одинаковых элементов - их в моем массиве заведомо нет, все разные!
Приведу для ясности кусок кода, может, кто-нибудь увидит ошибку.
// формируем указатели на массив указателей на структуры типа Spl
Spl **rec_ptr_array;
// выделяем память под массив согласно кол-ву структкр - их может быть порядка 30.000
rec_ptr_array=new Spl *[N];
if(rec_ptr_array!=NULL)
{
// инициализируем массив указателей на структуры типа Spl
for(k=0;k<N;k++)
{
rec_ptr_array[k]=(Spl *)(Start_addr+2*(offset+3*k));
}
// включаем светодиод
SetLED(TX, RED);
// сортируем структуры в порядке возрастания значения одного из полей
qsort((void *)rec_ptr_array[0], N, 6, spl_compare);
// выключаем светодиод
SetLED(TX, OFF);
}
И далее, функция сравнения двух элементов:
int spl_compare(const void *a, const void *

{
Spl *pa=(Spl *)a,
*pb=(Spl *)b;
if(pa->Get_SN() > pb->Get_SN())
return 1;
else if(pa->Get_SN() == pb->Get_SN())
return 0;
else
return -1;
}