Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; ColdFire; 40 тыс.
e-mail: jobsmp@pochta.ru
|
CCS + F2812. Динамическое выделение памяти во внешней RAM работает только один раз
Отправлено
GW (194.67.79.203) 13 февраля 2010, г. 16:11
Имеем CCS3.1, F2812 с внешней памятью в ZONE6 (0х100000-0x10ffff) , модель “lage”. Вся внешняя память отдана под «кучу». Выделяем 4 фрагмента:
ptr0 = (WORD*)malloc(0x3000);
ptr1 = (WORD*)malloc(0x3000);
ptr2 = (WORD*)malloc(0x3000);
ptr3 = (WORD*)malloc(0x3000);
Все чудно выделяется. Теперь освобождаем все 4 указателя
free((void*)ptr0);
free((void*)ptr1);
free((void*)ptr2);
free((void*)ptr3);
и повторно выделяем такие же фрагменты.
Первый фрагмент выделяется нормально, ptr0 = 0х100002, а ptr1 уже равен 0х129008,т.е. вообще за пределами кучи. При выделении 3-го фрагмента malloc() просто зависает.
Пробовал использовать far_malloc() и far_free() – практически тот-же эффект, с той лишь разницей, что не зависает, но указатели все равно возвращает бредовые. Ни размер фрагмента, ни их количество на эффект не влияют.
Внешняя память не сбоит – специально проверял.
Это я чего не так делаю или библиотеки кривые? Кстати, пробовал брать rts2800_ml.lib от ССS3.3. – то же самое.
Составить ответ | Вернуться на конференцию
Ответы