mantech 53 4 января, 2022 Опубликовано 4 января, 2022 · Жалоба Приветствую. Решил прикрутить к старому проекту поддержку TTF шрифтов, при помощи либы stb_truetype. Сначала решил проверить на ПК под борланд С (codegear) завпустил все работает. Переношу в ИАР для процессора imx6 с поддержкой FPCv3\NEON виснет на подобном коде: points = (stbtt__point *) STBTT_malloc(num_points * sizeof(points[0]), userdata); выделяется аллокатором 300байт под структуру: typedef struct { float x,y; } stbtt__point; Затем далее идет вызов функции с присвоением значений: stbtt__add_point(points, num_points++, x,y); Собственно функция на которой виснет на первом присвоении намертво, когда points не нулевой, т.е. память выделена: static void stbtt__add_point(stbtt__point *points, int n, float x, float y) { if (!points) {return;} // during first pass, it's unallocated points[n].x = x; points[n].y = y; } При статическом выделении памяти под структуру - работает (ну не виснет хотя бы), дин. аллокатор рабочий, проверено. При отключенной опции FPU в конфиге ИАРа работает, как нужно. В чем прикол? ИАР не умеет работать с подобным при включенном ускорителе плавучки или что еще может быть? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 4 января, 2022 Опубликовано 4 января, 2022 · Жалоба 1 hour ago, mantech said: дин. аллокатор рабочий, проверено Выравнивание по границе 64 бит выполняет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 4 января, 2022 Опубликовано 4 января, 2022 · Жалоба 40 минут назад, aaarrr сказал: Выравнивание по границе 64 бит выполняет? Вот это не проверял... Там выравнивание для каждого конкретного выделения нужно или только адрес начала пула памяти? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 4 января, 2022 Опубликовано 4 января, 2022 · Жалоба Для каждого. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 4 января, 2022 Опубликовано 4 января, 2022 (изменено) · Жалоба 4 минуты назад, aaarrr сказал: Для каждого. Смутило в этом деле то, что завис происходил не при выполнении математического действия, а просто пересылке и присвоении... Хотя с другой стороны, если при отключении fpu работоспособность восстанавливалась, значит и в пересылках он задействуется. Изменено 4 января, 2022 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 4 января, 2022 Опубликовано 4 января, 2022 · Жалоба 2 часа назад, mantech сказал: Хотя с другой стороны, Вообщем, спасибо за наводку, поправил выравнивание в аллокаторе с 4 на 8 байт, виснуть перестало, символ рисуется, но не так, как на ПК (там контуры красивее), заметил, что запрос на выделение памяти после 3х раз начинает не совпадать с тем, что на ПК. Видимо какие-то проблемы с математическими расчетами, думал, может буфер со шрифтом тоже надо выровнять, на всякий, проверил, он итак кратный 8 байтам... Вообщем половина работает, но еще копать и копать((( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться