Перейти к содержанию
    

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

22 minutes ago, natsu said:

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

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

  

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

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

 

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

Изменено пользователем natsu

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 hours ago, natsu said:

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

#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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...