реклама на сайте
подробности

 
 
> Выравнивание структуры на ARM и x86 одинаково?, Можно ли не паковать?
sigmaN
сообщение May 28 2015, 17:33
Сообщение #1


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Объявлены вот такие структуры
Код
template<class T, uint8_t X_SZ>
struct Table2D_storage
{        
    static const uint8_t x_size = X_SZ;    ///< number of elements in row
    T data[X_SZ];
};

template<class T, uint8_t X_SZ, uint8_t Y_SZ>
struct Table3D_storage
{        
    void SetDescription(const char* newDescr) volatile
    {
        for (auto& i : description)
        {
            i = *newDescr;
            
            if( newDescr == 0)
                break;
            newDescr++;
        }        
        description[TABLE_DESCRIPTION_LEN - 1] = 0;        
    }
        
    static const uint8_t    x_size = X_SZ;    ///< number of elements in row
    static const uint8_t    y_size = Y_SZ;    ///< number of elements in column

    T data[Y_SZ][X_SZ];
    char description[TABLE_DESCRIPTION_LEN];    
};
enum
{
    2D_X_SIZE = 16,

    3D_X_SIZE = 16,
    3D_Y_SIZE = 2,
};

typedef Table2D_storage<uint16_t, 2D_X_SIZE > 2D_t;
typedef Table3D_storage<Q7_8::RawValue_t, 3D_X_SIZE, 3D_Y_SIZE> 3D_t;

typedef struct
{
    2D_t RPMQuant;
    3D_t IgnWork;
}LookupTablesStorage_t;


LookupTablesStorage_t будет состоять из разных наборов шаблонов Table2D_storage<> и Table3D_storage<>
Их тип T может меняться от int8_t до int32_t. Размеры X_SZ и Y_SZ, соответственно, тоже могут быть разные...

Так вот было бы ОЧЕНЬ удобно в на ПК иметь тот-же заголовочный файл с объявлением LookupTablesStorage_t, заполнить ее нужными данными и потом просто сделать memcpy() на девайс(ну через интерфейс связи с ПК просто побайтово перекинуть данные).

Объявлять структуры пакованными не очень бы хотелось по причине невозможности использования указателей на члены и снижения быстродействия. В общем то с этим можно мириться конечно...
Делать более сложный протокол передачи с присвоением значений каждому члену структуры отдельно без веской причины тоже лень, да и лишний код в прошивке как-бы...

Есть подозрение, что т.к. обе архитектуры 32битные - требования к выравниванию должны совпадать.

Гуглил гуглил, но так и не нагуглил будет ли выравнивание одинаковым на x86 и ARM Cortex M3?
Прошивка девайса собирается ARM GCC, на ПК будет наверно MinGW, который тоже считай GCC.

Что скажите? Стоит ли так делать или обязательно паковать/присваивать почленно?


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 11th August 2025 - 22:11
Рейтинг@Mail.ru


Страница сгенерированна за 0.0147 секунд с 7
ELECTRONIX ©2004-2016