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

 
 
> Указатель на структуру, правильно-ли?
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

Сообщений в этой теме
- 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
|- - Сергей Борщ   Цитата(otrog @ Jul 11 2006, 09:31) Кстати...   Jul 11 2006, 08:57
- - 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 Текстовая версия Сейчас: 19th July 2025 - 16:18
Рейтинг@Mail.ru


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