Jump to content
    

упаковка данных в структуре

22 minutes ago, natsu said:

. . . А вот считанную структуру для обработки хотелось бы хранить по выровненному адресу. Вся проблема была в том, что структур несколько и хотелось бы иметь место в памяти, где структуры могут находиться выравненными. . . . 

(повтор) Если "зайти в консерваторию", имеет смысл проверить аппаратно, где, на каком участке Вашего кода идут затраты времени. Сделать это в Вашем случае предлагаю аппаратно, а не путем подсчета тактов (осциллограф + ногодрыг). Вы получите одно из двух: или подтвердится Ваша гипотеза о необходимости долбежа с выравниваниями, или оно вообще не нужно (не критично) и проблема в чем-то другом.

Лучше если "в чем-то другом", тк усложнение кода итд итп даст почву для кучи ошибок, в том числе даже при возможной смене компилятора или даже его вресии.

 

Share this post


Link to post
Share on other sites

  

31 минуту назад, jcxz сказал:

Чем мой вариант описания не устраивает?

 

Неупакованные Невыровненные данные? Устраивает. Но с упаковкой и выравниванием надо тему закрыть, а значит сначала разобраться.

Edited by natsu

Share this post


Link to post
Share on other sites

21 минуту назад, natsu сказал:

  Неупакованные данные?

Вариант с единственным (единым) описанием, в одном месте.

23 минуты назад, k155la3 сказал:

имеет смысл проверить аппаратно, где, на каком участке Вашего кода идут затраты времени.

Я уже предлагал это.

Только, имхо, лучше это делать всё-таки программно, с помощью таймера. Например - DWT.CYCCNT. Так как ногодрыг будет зависеть от скорости работы GPIO.

Share this post


Link to post
Share on other sites

29 минут назад, jcxz сказал:

Чем мой вариант описания не устраивает?

Попробую угадать. Вы про макрос которые создает две структуры - упакованную и неупакованную? Не устраивает тем что рано или поздно укажу не ту структуру которую надо и потом это обнаружить и исправить будет нелегко

Share this post


Link to post
Share on other sites

1 час назад, natsu сказал:

Не устраивает тем что рано или поздно укажу не ту структуру

Невозможно сделать одну и ту же структуру одновременно упакованной и неупакованной. Так что - нужно тренировать внимательность.  :unknw:

Share this post


Link to post
Share on other sites

3 часа назад, natsu сказал:

Чем мой вариант описания не устраивает?

и от предупреждений компилятора этот метод не спасает. Чтобы убрать предупреждения придется все равно вручную приделывать паддинги.

Share this post


Link to post
Share on other sites

Выложите сюда версию компилятора и его настройки, пожалуйста. Ибо никаких warning-ов при правильном применении атрибутов выравнивания и упаковки быть не должно.

Share this post


Link to post
Share on other sites

В IAR естественно такой метод также не приводит ни к каким варнингам. И паддинги никакие не требуются.

Share this post


Link to post
Share on other sites

Комп теперь только после майских праздников увижу, так что, думаю, уже будет не актуально...

Share this post


Link to post
Share on other sites

почти уверен, что это происходит из-за опции оптимизации по размеру. Возьмите первые две строчки с прагмой, что я писал в моем примере, и окаймите ими те участки, где используете структуру, возможно это поможет.

Share this post


Link to post
Share on other sites

оптимизацию пробовал и 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")
            ^

Share this post


Link to post
Share on other sites

3 hours ago, natsu said:

оптимизацию пробовал и O0 и другие, разницы нет . . . 

Учитывая достаточно большой размер кода - за 300 строк в одном модуле, в "черном ящике" (Вашем проекте) из полячудес может быть все что угодно. Вплоть до того, что в опциях вместо "c"  затесалась "с" (0x63/0xF1 CP1251). Или длинная строка. Или ...  Вы это не видите, и уж-точно, это не видят отвечающие на Ваш вопрос здесь присутствующие. Если Ваш проект представляет "страшную темно-зеленую ваааенную тайну", урезайте его до "вопросного" размера и выкладывайте сюда. Именно проект, а не предполагаемый проблемный файл. 

 

Share this post


Link to post
Share on other sites

Причем тут размер.. Ошибка то вполне конкретная.

Вот ПРОЕКТ из одного файла:

 

#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

Share this post


Link to post
Share on other sites

Неужели никак нельзя избежать этого ужаса :shok:

Рано или поздно это вылезет боком в самый неподходящий момент.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...