k155la3 3 April 28 Posted April 28 · Report post 22 minutes ago, natsu said: . . . А вот считанную структуру для обработки хотелось бы хранить по выровненному адресу. Вся проблема была в том, что структур несколько и хотелось бы иметь место в памяти, где структуры могут находиться выравненными. . . . (повтор) Если "зайти в консерваторию", имеет смысл проверить аппаратно, где, на каком участке Вашего кода идут затраты времени. Сделать это в Вашем случае предлагаю аппаратно, а не путем подсчета тактов (осциллограф + ногодрыг). Вы получите одно из двух: или подтвердится Ваша гипотеза о необходимости долбежа с выравниваниями, или оно вообще не нужно (не критично) и проблема в чем-то другом. Лучше если "в чем-то другом", тк усложнение кода итд итп даст почву для кучи ошибок, в том числе даже при возможной смене компилятора или даже его вресии. Quote Share this post Link to post Share on other sites More sharing options...
natsu 0 April 28 Posted April 28 (edited) · Report post 31 минуту назад, jcxz сказал: Чем мой вариант описания не устраивает? Неупакованные Невыровненные данные? Устраивает. Но с упаковкой и выравниванием надо тему закрыть, а значит сначала разобраться. Edited April 28 by natsu Quote Share this post Link to post Share on other sites More sharing options...
jcxz 7 April 28 Posted April 28 · Report post 21 минуту назад, natsu сказал: Неупакованные данные? Вариант с единственным (единым) описанием, в одном месте. 23 минуты назад, k155la3 сказал: имеет смысл проверить аппаратно, где, на каком участке Вашего кода идут затраты времени. Я уже предлагал это. Только, имхо, лучше это делать всё-таки программно, с помощью таймера. Например - DWT.CYCCNT. Так как ногодрыг будет зависеть от скорости работы GPIO. Quote Share this post Link to post Share on other sites More sharing options...
natsu 0 April 28 Posted April 28 · Report post 29 минут назад, jcxz сказал: Чем мой вариант описания не устраивает? Попробую угадать. Вы про макрос которые создает две структуры - упакованную и неупакованную? Не устраивает тем что рано или поздно укажу не ту структуру которую надо и потом это обнаружить и исправить будет нелегко Quote Share this post Link to post Share on other sites More sharing options...
jcxz 7 April 28 Posted April 28 · Report post 1 час назад, natsu сказал: Не устраивает тем что рано или поздно укажу не ту структуру Невозможно сделать одну и ту же структуру одновременно упакованной и неупакованной. Так что - нужно тренировать внимательность. Quote Share this post Link to post Share on other sites More sharing options...
natsu 0 April 28 Posted April 28 · Report post 3 часа назад, natsu сказал: Чем мой вариант описания не устраивает? и от предупреждений компилятора этот метод не спасает. Чтобы убрать предупреждения придется все равно вручную приделывать паддинги. Quote Share this post Link to post Share on other sites More sharing options...
Arlleex 5 April 28 Posted April 28 · Report post Выложите сюда версию компилятора и его настройки, пожалуйста. Ибо никаких warning-ов при правильном применении атрибутов выравнивания и упаковки быть не должно. Quote Share this post Link to post Share on other sites More sharing options...
jcxz 7 April 28 Posted April 28 · Report post В IAR естественно такой метод также не приводит ни к каким варнингам. И паддинги никакие не требуются. Quote Share this post Link to post Share on other sites More sharing options...
natsu 0 April 28 Posted April 28 · Report post Quote Share this post Link to post Share on other sites More sharing options...
Arlleex 5 April 29 Posted April 29 · Report post Комп теперь только после майских праздников увижу, так что, думаю, уже будет не актуально... Quote Share this post Link to post Share on other sites More sharing options...
iiv 0 April 29 Posted April 29 · Report post почти уверен, что это происходит из-за опции оптимизации по размеру. Возьмите первые две строчки с прагмой, что я писал в моем примере, и окаймите ими те участки, где используете структуру, возможно это поможет. Quote Share this post Link to post Share on other sites More sharing options...
natsu 0 April 29 Posted April 29 · Report post оптимизацию пробовал и 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") ^ Quote Share this post Link to post Share on other sites More sharing options...
k155la3 3 April 29 Posted April 29 · Report post 3 hours ago, natsu said: оптимизацию пробовал и O0 и другие, разницы нет . . . Учитывая достаточно большой размер кода - за 300 строк в одном модуле, в "черном ящике" (Вашем проекте) из полячудес может быть все что угодно. Вплоть до того, что в опциях вместо "c" затесалась "с" (0x63/0xF1 CP1251). Или длинная строка. Или ... Вы это не видите, и уж-точно, это не видят отвечающие на Ваш вопрос здесь присутствующие. Если Ваш проект представляет "страшную темно-зеленую ваааенную тайну", урезайте его до "вопросного" размера и выкладывайте сюда. Именно проект, а не предполагаемый проблемный файл. Quote Share this post Link to post Share on other sites More sharing options...
natsu 0 April 29 Posted April 29 · Report post Причем тут размер.. Ошибка то вполне конкретная. Вот ПРОЕКТ из одного файла: #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 Quote Share this post Link to post Share on other sites More sharing options...
Forger 1 April 29 Posted April 29 · Report post Неужели никак нельзя избежать этого ужаса ? Рано или поздно это вылезет боком в самый неподходящий момент. Quote Share this post Link to post Share on other sites More sharing options...