Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.12.2024, 00:37   #11
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,422
По умолчанию

hexor_boo, да, вроде можно и без packed в данном случае, но тогда никто не узнает про это ключевое слово
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 04.12.2024, 01:45   #12
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,918
По умолчанию

Цитата:
Сообщение от hexor_boo Посмотреть сообщение
А в этом примере - нужно "packed record" или достаточно просто "record", как там написано?
В примере BDA, который просто показывает как использовать вариантную запись в Паскале/Дельфи служебное слово packed не нужно. Но для кода ТС оно нужно. Почему нужно, долго объяснять.
northener вне форума Ответить с цитированием
Старый 04.12.2024, 07:00   #13
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,422
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
Почему нужно, долго объяснять.
Намекните, все-таки, почему нужно. Вроде все поля и так выровнены и не требуются байты выравнивания.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 05.12.2024, 01:53   #14
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,918
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Намекните, все-таки, почему нужно. Вроде все поля и так выровнены и не требуются байты выравнивания.
А что такое "байты выравнивания"?
Почему для ТС нужен packed. По его словам он получает данные по СОМ-порту. Ясен пень от некоей внешней железяки на микропроцессоре. А микропроцессоры не знают и не хотят знать про какое-то там выравнивание. У них слишком мало памяти, чтобы ещё тратить её на выравнивание.
northener вне форума Ответить с цитированием
Старый 06.12.2024, 14:13   #15
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,693
По умолчанию

Микроконтроллер тут не при чём. Обмен идёт пакетами, а это - байтовый массив. И всё. А уж принимающая сторона (комп) пакет рассовывает по переменным, определяемым протоколом. Поэтому выравнивание - только на принимающей стороне.
Кстати, выравнивание, хоть и в небольшой степени, в МК использется - по крайней мере, в знакомых мне AVR. К примеру - словная адресация флеши и байтовая - ОЗУ. Желая поместить константу во флеш, адрес поневоле делаем чётным.
Кстати, в настоящее время в периферийных устройствах микропроцессоры в чистом виде уже не используются - на смену пришли их младшие братья: микроконтроллеры. Это был промежуточный этап.
-----------------
Мало памяти... 192k это много или мало, а если мало, то для кого? И это ещё не топовая модель. А нормальный МК сейчас легко уделывает какой-нибудь Пентиум 90-х годов.

Последний раз редактировалось digitalis; 06.12.2024 в 14:40.
digitalis вне форума Ответить с цитированием
Старый 07.12.2024, 00:31   #16
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,918
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Микроконтроллер тут не при чём. Обмен идёт пакетами, а это - байтовый массив. И всё. А уж принимающая сторона (комп) пакет рассовывает по переменным, определяемым протоколом. Поэтому выравнивание - только на принимающей стороне.
А зачем что-то рассовывать на принимающей стороне, если при packed всё само собой ляжет туда куда надо?
northener вне форума Ответить с цитированием
Старый 07.12.2024, 02:52   #17
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,918
По умолчанию

Вот освободился от повседневной текучки.
Цитата:
Сообщение от digitalis Посмотреть сообщение
Микроконтроллер тут не при чём. Обмен идёт пакетами, а это - байтовый массив. И всё.
Можете расшифровать ваши утверждения?
О каких пакетах идёт речь? Не путаете ли вы работу с СОМ-портом с работой с другими последовательными интерфейсами?
northener вне форума Ответить с цитированием
Старый 07.12.2024, 21:33   #18
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,693
По умолчанию

Я не вижу принципиальной разницы между работой с СОМ-портом (хорошо мне знакомой) с работой с другими последовательными интерфейсами. В любом случае это - последовательность байт, ну или битовая последовательность фиксированной длины, и что-то там выравнивать на линии связи не приходится.
Цитата:
если при packed всё само собой ляжет туда куда надо
Ну так это - минимальный способ рассовывания: всё уже на месте, дополнительных телодвижений не требуется. Это если структура передаваемых данных в соответствии с протоколом всегда одна и та же.
Напримр: <старт><адрес - 2 байта><команда - 2 байта><float - 4 байта><fixed - 2 байта>...<CRC-2 байта> . Мы не знаем, так ли это у ТС, но в общем случае чаще встречаются пакеты переменной структуры. И хорошо, если они у нас всегда нормально улягутся на единственный packed record.
Но это уже сугубо абстрактный разговор, ТСа packed record вполне удовлетворил, я думаю.

Последний раз редактировалось digitalis; 07.12.2024 в 21:37.
digitalis вне форума Ответить с цитированием
Старый 08.12.2024, 00:52   #19
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,918
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
И хорошо, если они у нас всегда нормально улягутся на единственный packed record.
Ну у меня лично они укладывались. Хотя все "пакеты" были разной структуры.
Вот например из моего раннего:
Код:
  TReplyRec = packed record
    RecLen, MAddr, MType, RecvType, CmdRes : Byte;
    EvCount : Word;
    DStt2 : Byte;
    DState : TDStates;
    OutReg : TOutReg;
    case Integer of       //Проверка Cmd
      cmRdNK : (AllKeys, Keys0, Keys1: Word);
      cmRdK : (KCode: array[0..7] of Byte);
      cmGetVer : (VerLen: Byte; Vers: array[0..50] of Char);
      cmGTime : (Sek, Min, Hr, DoW, Dy, Mth, Yr: Byte);
      cmGetCfg : (LenCFG: Byte; LT0: Byte; DT0: Word; fCFG: TCfgs;
                  LT1: Byte; DT1: Word; NCards, TmCards: Byte);
      cmRdDates : (Hlds: DsData);
      cmRdTZones : (TZs: TimeZones);
      cmRdHum : (Hums: Byte);
      cmGetLLog : (LLog: Word);
      cmKeyLog : (EvArray: TEvArray);
  end;
northener вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Округлить single nXs Общие вопросы Delphi 4 01.03.2012 11:59
что такое single Shinobig Общие вопросы C/C++ 12 22.01.2012 21:36
HEX переводим в Single Yrok Общие вопросы Delphi 6 04.03.2009 17:00
Single to String? Blondinka Общие вопросы Delphi 7 24.09.2007 17:36