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

 
 
> под uint8_t выделяется 2 байта ?
a9d
сообщение Sep 9 2013, 02:58
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 312
Регистрация: 9-04-10
Пользователь №: 56 532



IAR ARM
Подключил к проекту либу. Там есть место

Код
PACKED_STRUCT {
        uint8_t    start;
        uint16_t    length_be;
    } prefix;


Далее uart-у передается адрес структуры и ее размер.

И вот тут начинаются проблемы. Принимающие устройство ожидает три байта, а приходит четыре. К тому-же с не правильным length_be. Так как младший байт этой переменной должен быть вторым а не третьим.

Я вижу, что IAR под uint8_t выделяет два байта. sizeof возвращает размер структуры 4.

Как заставить IAR выделять правильное количество байт??


Сообщение отредактировал a9d - Sep 9 2013, 03:34
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
a9d
сообщение Sep 9 2013, 20:43
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 312
Регистрация: 9-04-10
Пользователь №: 56 532



Макрос об этом не заботился, за ним скрывается struct.

Скорость и размер не особо важны. В либе проблемы не только во время передачи/приема а вообще в самой библиотеке. Эту библиотеку разработали в digi. Там сплошная работа со структурами и я вижу, что разработчикам часто нравилось работать со структурами как с массивами.

Пробовал все сделать правильно и добавил макросы к структурам, но это вылечило только некоторые проблемы. Только глобальная pragma pack (1) убирает все проблемы.
Go to the top of the page
 
+Quote Post
scifi
сообщение Sep 10 2013, 04:18
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(a9d @ Sep 10 2013, 00:43) *
Макрос об этом не заботился, за ним скрывается struct.

Этот макрос должен писать не автор библиотеки, а тот, кто её портирует на свою архитектуру. Вот кто этот макрос написал, того и спрашивайте, почему он такой. Вполне возможно, что он решил не париться и просто глобально выключить выравнивание структур. Или у него была 8-битная архитектура.

Цитата(a9d @ Sep 10 2013, 00:43) *
Скорость и размер не особо важны.

Тогда просто продолжайте использовать глобальную прагму pack(1). Для удобства её можно вынести в отдельный файл и включать его в каждый компилируемый файл при помощи опции компилятора --preinclude.
Оставьте разборки с выравниванием тому, кому по понадобится оптимизировать эту библиотеку.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 02:40
Рейтинг@Mail.ru


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