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

 
 
> Указатель на структуру, правильно-ли?
otrog
сообщение Jul 7 2006, 11:52
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 22-02-06
Из: Воронеж
Пользователь №: 14 589



Здравствуйте.
Подскажите пожалуйста допустимо-ли так делать на C(CodeVision)?
Объявлена структура:
Код
struct TParameters
{
  unsigned int ADC_Value;
  unsigned int temperature[2];
  unsigned long suit;

  unsigned int CRC16;
};                  

struct TParameters Parameters;

В main-е есть вот что:
Код
// передача данных в комп
ptr = &Parameters;
Parameters.CRC16 = CRC16(ptr, sizeof(Parameters) - 2);
for (i=0;i<sizeof(Parameters);i++) { USART_Transmit(*ptr++); } // передать результаты измерений в УАРТ

Интересует применимость работы со структурами через указатели.

И еще CodeVision выдает warning"(358): suspicious pointer conversion" на строку "ptr = &Parameters;".
Что это может означать?
Спасибо.


--------------------
Истина рождается в спорах; но когда страсти кипят, истина испаряется.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
otrog
сообщение Jul 11 2006, 06:31
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 22-02-06
Из: Воронеж
Пользователь №: 14 589



Спасибо всем ответившим.
Но сомнения остались:
Цитата
Но надо учитывать, что при разнотипных данных, они могут быть выровнены по длине наибольшего. Т.е. если между двумя int16 затешеться int8 компилятор дополнит его до 16 бит нулями.
Обычно это некритично, но при обмене по последовательному каналу может неожиданно измениться длина посылки и смещение от начала. Следите за настройками компилятора.

Кстати в моей структуре смешаны unsigned int и unsigned long
Код
struct TParameters
{
  unsigned int ADC_Value;
  unsigned int temperature[2];
  unsigned long suit;

  unsigned int CRC16;
};                  

struct TParameters Parameters;

Это вызовет выравнивание до unsigned long?
Цитата
Только не с AVR. Это семейство 8-битное и выравнивания данных в структурах не осуществляется.
Вот с ARM - другое дело.

Т.е. если я одинаковую структуру подсуну разным компиляторам(для разного железа, напр. AVR и IBM PC), то при обмене структурами через UART посредством указателя, я получу несовместимые друг с другом системы?
Как же тогда быть?


--------------------
Истина рождается в спорах; но когда страсти кипят, истина испаряется.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 11 2006, 08:57
Сообщение #3


Гуру
******

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



Цитата(otrog @ Jul 11 2006, 09:31) *
Кстати в моей структуре смешаны unsigned int и unsigned long
Это вызовет выравнивание до unsigned long?

Это вызовет выравнивание по длине машинного слова. Для IBM PC, ARM это будет 4 байта, для MSP430 2 байта, для AVR - 1 байт.
Цитата(otrog @ Jul 11 2006, 09:31) *
Т.е. если я одинаковую структуру подсуну разным компиляторам(для разного железа, напр. AVR и IBM PC), то при обмене структурами через UART посредством указателя, я получу несовместимые друг с другом системы?
Как же тогда быть?
заводить для обмена временные переменные для которых тип структуры объявлен с #pragma pack


--------------------
На любой вопрос даю любой ответ
"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

Сообщений в этой теме
- otrog   Указатель на структуру   Jul 7 2006, 11:52
- - _Bill   Цитата(otrog @ Jul 7 2006, 14:52) Здравст...   Jul 7 2006, 11:59
|- - otrog   Цитата(_Bill @ Jul 7 2006, 15:59) Нет, не...   Jul 7 2006, 12:04
- - beer_warrior   ЦитатаИ всеже при обращении к структуре через указ...   Jul 7 2006, 12:42
|- - IgorKossak   Цитата(beer_warrior @ Jul 7 2006, 15:42) ...   Jul 7 2006, 12:51
|- - unichorn   Цитата(beer_warrior @ Jul 7 2006, 16:42) ...   Jul 7 2006, 12:54
- - GetSmart   Я не очень понял, что надо beer_warrior, но может ...   Jul 7 2006, 13:08
- - beer_warrior   ЦитатаТолько не с AVR. Это семейство 8-битное и вы...   Jul 7 2006, 15:11
- - GetSmart   Ничё не знаю. Я прямо так и пишу в ИАРе под АРМ. ...   Jul 7 2006, 15:14
- - beer_warrior   Именно то спасибо. А скобки... Это же весьма навор...   Jul 7 2006, 15:34
- - GetSmart   А вот и нет. Не внешние скобки. А сразу за внешним...   Jul 7 2006, 15:40
- - defunct   ЦитатаТока не пойму зачем там лишняя пара скобок? ...   Jul 9 2006, 22:24
- - unichorn   Неиспользовать для этих целей тип int и unsigned i...   Jul 11 2006, 07:04
- - vet   Прочитать хелп по #pragma pack и использовать любы...   Jul 11 2006, 07:07
- - beer_warrior   Можно прагмой, в gcc для этих целей есть атрибут. ...   Jul 11 2006, 07:25


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

 


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


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