k155la3 27 28 апреля, 2022 Опубликовано 28 апреля, 2022 · Жалоба 22 minutes ago, natsu said: . . . А вот считанную структуру для обработки хотелось бы хранить по выровненному адресу. Вся проблема была в том, что структур несколько и хотелось бы иметь место в памяти, где структуры могут находиться выравненными. . . . (повтор) Если "зайти в консерваторию", имеет смысл проверить аппаратно, где, на каком участке Вашего кода идут затраты времени. Сделать это в Вашем случае предлагаю аппаратно, а не путем подсчета тактов (осциллограф + ногодрыг). Вы получите одно из двух: или подтвердится Ваша гипотеза о необходимости долбежа с выравниваниями, или оно вообще не нужно (не критично) и проблема в чем-то другом. Лучше если "в чем-то другом", тк усложнение кода итд итп даст почву для кучи ошибок, в том числе даже при возможной смене компилятора или даже его вресии. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
natsu 0 28 апреля, 2022 Опубликовано 28 апреля, 2022 (изменено) · Жалоба 31 минуту назад, jcxz сказал: Чем мой вариант описания не устраивает? Неупакованные Невыровненные данные? Устраивает. Но с упаковкой и выравниванием надо тему закрыть, а значит сначала разобраться. Изменено 28 апреля, 2022 пользователем natsu Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 28 апреля, 2022 Опубликовано 28 апреля, 2022 · Жалоба 21 минуту назад, natsu сказал: Неупакованные данные? Вариант с единственным (единым) описанием, в одном месте. 23 минуты назад, k155la3 сказал: имеет смысл проверить аппаратно, где, на каком участке Вашего кода идут затраты времени. Я уже предлагал это. Только, имхо, лучше это делать всё-таки программно, с помощью таймера. Например - DWT.CYCCNT. Так как ногодрыг будет зависеть от скорости работы GPIO. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
natsu 0 28 апреля, 2022 Опубликовано 28 апреля, 2022 · Жалоба 29 минут назад, jcxz сказал: Чем мой вариант описания не устраивает? Попробую угадать. Вы про макрос которые создает две структуры - упакованную и неупакованную? Не устраивает тем что рано или поздно укажу не ту структуру которую надо и потом это обнаружить и исправить будет нелегко Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 28 апреля, 2022 Опубликовано 28 апреля, 2022 · Жалоба 1 час назад, natsu сказал: Не устраивает тем что рано или поздно укажу не ту структуру Невозможно сделать одну и ту же структуру одновременно упакованной и неупакованной. Так что - нужно тренировать внимательность. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
natsu 0 28 апреля, 2022 Опубликовано 28 апреля, 2022 · Жалоба 3 часа назад, natsu сказал: Чем мой вариант описания не устраивает? и от предупреждений компилятора этот метод не спасает. Чтобы убрать предупреждения придется все равно вручную приделывать паддинги. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 190 28 апреля, 2022 Опубликовано 28 апреля, 2022 · Жалоба Выложите сюда версию компилятора и его настройки, пожалуйста. Ибо никаких warning-ов при правильном применении атрибутов выравнивания и упаковки быть не должно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 28 апреля, 2022 Опубликовано 28 апреля, 2022 · Жалоба В IAR естественно такой метод также не приводит ни к каким варнингам. И паддинги никакие не требуются. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
natsu 0 28 апреля, 2022 Опубликовано 28 апреля, 2022 · Жалоба Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 190 29 апреля, 2022 Опубликовано 29 апреля, 2022 · Жалоба Комп теперь только после майских праздников увижу, так что, думаю, уже будет не актуально... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iiv 29 29 апреля, 2022 Опубликовано 29 апреля, 2022 · Жалоба почти уверен, что это происходит из-за опции оптимизации по размеру. Возьмите первые две строчки с прагмой, что я писал в моем примере, и окаймите ими те участки, где используете структуру, возможно это поможет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
natsu 0 29 апреля, 2022 Опубликовано 29 апреля, 2022 · Жалоба оптимизацию пробовал и O0 и другие, разницы нет \fdata.c(325): warning: unknown pragma ignored [-Wunknown-pragmas] #pragma GCC push_options ^ \fdata.c(326): warning: unknown pragma ignored [-Wunknown-pragmas] #pragma GCC optimize ("Ofast") ^ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 29 апреля, 2022 Опубликовано 29 апреля, 2022 · Жалоба 3 hours ago, natsu said: оптимизацию пробовал и O0 и другие, разницы нет . . . Учитывая достаточно большой размер кода - за 300 строк в одном модуле, в "черном ящике" (Вашем проекте) из полячудес может быть все что угодно. Вплоть до того, что в опциях вместо "c" затесалась "с" (0x63/0xF1 CP1251). Или длинная строка. Или ... Вы это не видите, и уж-точно, это не видят отвечающие на Ваш вопрос здесь присутствующие. Если Ваш проект представляет "страшную темно-зеленую ваааенную тайну", урезайте его до "вопросного" размера и выкладывайте сюда. Именно проект, а не предполагаемый проблемный файл. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
natsu 0 29 апреля, 2022 Опубликовано 29 апреля, 2022 · Жалоба Причем тут размер.. Ошибка то вполне конкретная. Вот ПРОЕКТ из одного файла: #include <stdint.h> typedef struct {double energy[2][3];uint16_t mask;} __attribute__((packed)) zagprof_t; typedef struct {uint32_t stamp;float data[16];} __attribute__((packed)) datprof_t; int main(){ struct my { __attribute__((aligned (8))) zagprof_t zag; // char pad1[6]; __attribute__((aligned (8))) datprof_t dat; // char pad2[4]; __attribute__((aligned (8))) double energynow[2][3]; }; static struct my qq; struct my *mem=&qq; mem->energynow[0][0]=0; while(1);} Build started: Project: qq *** Using Compiler 'V6.15', folder: 'C:\Keil_v5\ARM\ARMCLANG\Bin' Build target 'Target 1' main.c(10): warning: padding struct 'struct my' with 6 bytes to align 'dat' [-Wpadded] __attribute__((aligned (8))) datprof_t dat; ^ main.c(12): warning: padding struct 'struct my' with 4 bytes to align 'energynow' [-Wpadded] __attribute__((aligned (8))) double energynow[2][3]; ^ 2 warnings generated. compiling main.c... linking... Program Size: Code=372 RO-data=472 RW-data=0 ZI-data=1632 ".\Objects\qq.axf" - 0 Error(s), 2 Warning(s). Build Time Elapsed: 00:00:00 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 29 апреля, 2022 Опубликовано 29 апреля, 2022 · Жалоба Неужели никак нельзя избежать этого ужаса ? Рано или поздно это вылезет боком в самый неподходящий момент. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться