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

 
 
> под 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, 03:46
Сообщение #2


Местный
***

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



Спасибо. Сработало.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 9 2013, 06:37
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (a9d @ Sep 9 2013, 04:58) *
Я вижу, что IAR под uint8_t выделяет два байта.
Неверно. Под uint8_t выделяется один байт, а вот следом за ним вставляется пустое место для выравнивания следующего поля (uint16_t) на границу 2 байт.
QUOTE (a9d @ Sep 9 2013, 05:46) *
Сработало.
Ага. Здесь сработало, но при этом заодно упаковались и все объявленные следом структуры, а значит доступ к их членам стал байтовым и как следствие медленным, с увеличением размера кода.

Надо было разбираться, почему не работет ваш макрос PACKED_STRUCT. Но не видя его определения советовать тут что-то очень трудно.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

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


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

 


RSS Текстовая версия Сейчас: 30th July 2025 - 20:16
Рейтинг@Mail.ru


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