LINUX.ORG.RU

Pure C добавить типы

 , ,


1

1

Необходимо определить типы из ГОСТа 61850 такие как:

INT8
INT16
INT24
INT32
INT128
...
и например 
VISIBLE (максимальная длина должна определяться местом использования типа)

Каким образом это можно сделать?

★★★★★

максимальная длина должна определяться местом использования типа

Вот с этого момента поподробней.

Y ★★ ()
Ответ на: комментарий от splinter

Так поделись. От требований зависит же.

А по остальному — ifdef чтобы узнать архитектуру и typedef для определения типа.

Y ★★ ()
Ответ на: комментарий от splinter

Никакой. Ты же понимаешь, что он никогда не будет востребован. Это же ГОСТ. :)

BRE ★★ ()

На ум приходят только извращения. ;)

#include <stdint.h>

typedef int8_t    INT8;
typedef int16_t   INT16;
typedef struct {
    int8_t  hi;
    int16_t lo;
}   INT24;
typedef int32_t   INT32;
typedef struct {
    int64_t hi;
    int64_t lo;
}   INT128;
beastie ★★★★★ ()
Ответ на: комментарий от beastie

На ум приходят только извращения. ;)

Эти варианты тоже в голову приходили.

Y ★★ ()
Ответ на: комментарий от splinter

В виде 24 битного инта - наверняка. :) Как структура из трех чаров - возможно.

BRE ★★ ()
Ответ на: комментарий от splinter
typedef char INT24[3];

И добавить пару макросов по вкусу. Типа INT24_TO_32/INT32_TO_24

anonymous ()
Ответ на: комментарий от prischeyadro

нету потому что они по правде находятся в stdint-gcc.h, а он отрабатывает только если:

#if __STDC_HOSTED__
# if defined __cplusplus && __cplusplus >= 201103L
#  undef __STDC_LIMIT_MACROS
#  define __STDC_LIMIT_MACROS
#  undef __STDC_CONSTANT_MACROS
#  define __STDC_CONSTANT_MACROS
# endif
# include_next <stdint.h>
#else
# include "stdint-gcc.h"
#endif

splinter ★★★★★ ()
typedef int8_t INT8;
...
typedef Хрез_знает_что INT128;
Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от beastie

Ты забыл выравнивание. Жопа может случиться.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от vvviperrr

как битовую структуру, например

++

но придется отсыпать макросов, как советовал анон

Stil ★★★★★ ()
Последнее исправление: Stil (всего исправлений: 1)

не лучший способ но как вариант для неприятных случаев

int8 char

остальное чего нет на текущей платформе как массивы чаров /8 длины.

печаль что свою арифметику и прочее через функции, а не через операторы

это не С++ где есть перегрузка операторов :(

qulinxao ★★☆ ()
Ответ на: комментарий от splinter

судя по телепатии это максимальный апаратный целый тип на данной железке/софте.

т.е родной размер машиного слова для арифметики.

qulinxao ★★☆ ()
Ответ на: комментарий от qulinxao

в принципе я так и подозревал, если бы не несколько названий типов с подобной формулировкой.

splinter ★★★★★ ()

Каким образом это можно сделать?

например в ASN.1 BER/DER...да и зачем, в указанном стандарте русским по белому написано, что это абстракция/инф.модель,а конкретная реализация из другой оперы. Эдакий вводный стандарт, чтобы было ясно о чём в дальнейшем пойдёт речь - должны быть производные стандарты и спецификации указывающие конкретные способы кодирования и протоколы.

MKuznetsov ★★★★★ ()

INT8 int8_t

INT16 int16_t

INT24 int32_t

INT32 int32_t

INT128 struct { uint64_t high; uint64_t low; }

VISIBLE (максимальная длина должна определяться местом использования типа)

это уже надо подключать GMP и использовать длинную арифметику

Legioner ★★★★★ ()

Ты собрался реализовывать стек протоколов МЭК 61850, хотя бы в части MMS. Сочувствую тебе.

Или твоя контора собирается воровать/покупать готовое решение?

Если второе, то в библиотеке готовой реализации должны быть все примитивы. Бери готовое. Вот хорошее место, откуда можно воровать чужой код http://libiec61850.com/. Это ссылка на open source проект по реализации МЭК 61850.

Описать типы на pure C не вижу проблем. Описывай все структурами. В структуре массив байтов или что ты там хочешь.

pathfinder ★★★ ()
Ответ на: комментарий от pathfinder

Я знаю о существовании этой библиотеки, мне нужны только типы и некоторые структуры для реализации своего домашнего проекта на кортекс-м4.

splinter ★★★★★ ()
Ответ на: комментарий от beastie

ЕМНИП,

typedef struct {
    int64_t internal[2];
}   INT128;

правильнее, в противном случае, последовательность хранимых чисел не гарантирована

аналогично, инт24 надо делать через массив int8, но там ещё и выравнивание

next_time ★★★★★ ()

VISIBLE (максимальная длина должна определяться местом использования типа)

пфффф

typedef struct {
   char* data;
   unsigned int size;
} VISIBLE;

add(VISIBLE x, long long ll);

...

VISIBLE x; x.size = 100; add(x, 3);

Примерно так.

next_time ★★★★★ ()
Последнее исправление: next_time (всего исправлений: 1)
Ответ на: комментарий от splinter

мне нужны только типы и некоторые структуры для реализации своего домашнего проекта

Понятно, но если проект домашний, может стоит посмотреть в сторону протокола DNP 3.0. В отличии от МЭК 61850, стандарт DNP хоть не наркоманы писали.

pathfinder ★★★ ()
Ответ на: комментарий от pathfinder

по DNP еще меньше внятной информации, к тому же протокол не так распостранен как 61850.

splinter ★★★★★ ()
Ответ на: комментарий от splinter

по DNP еще меньше внятной информации, к тому же протокол не так распостранен как 61850.

Я так понимаю, с внятной информацией у тебя проблем нет и ты готов реализовывать 61850.

Не мог бы ты поделиться внятной информацией по сетевому стеку OSI? Я испытываю в этом большую потребность. А то у меня с тем, что ниже rfc1006 сильно плохо с нормальной инфой.

pathfinder ★★★ ()
Ответ на: комментарий от pathfinder

я понимаю что это сарказм но не понимаю чем я его заслужил. Вопрос состоит не в том что использовать, а как реализовать некоторые типы и структуры в Pure C, оффтоп конечно но в Ade подобные вещи делаются на раз/два.

splinter ★★★★★ ()
Ответ на: комментарий от splinter

я понимаю что это сарказм но не понимаю чем я его заслужил.

Это не сарказм, ты меня неправильно понял. Я действительно хотел бы получить больше материалов тем или иным образом, связанным с 61850. Я сам когда-то хотел реализовать протокол 61850, но, к своему стыду, нИасилил. :(

Запоролся в самом начале, на реализации сетевого стека OSI. Хорошей документации у меня нет, а то что есть, там можно мозги сломать.

Раз ты тоже собираешься иметь дело с 61850, возможно у тебя есть что-то хорошее в плане документации или других материалов информационного характера.

61850 ужасен внутри, но этот протокол берет на вооружение российская энергетика. Получается, что выбора особого нет, все придется иметь с ним дело.

pathfinder ★★★ ()

Что мешает использовать битовые поля?

unsigned int var:24;

energyclab ()
Ответ на: комментарий от pathfinder

но этот протокол берет на вооружение российская энергетика.

Ага. Протокол сурьезный. Вроде как все в XML-лах передается по сети. Нужен жииирный канал.. :)

Я в свое время отвертелся от него в пользу DNP3 (реализовывал частично некоторые запросы для некоторых пойнтов ввода/вывода, т.к. все реализовывать - это ппц.. ).

Но если ТС-у нужно для домашних целей - то зачем ему этот монстр 61850? Не проще ли выбрать что-нить попроще? (привет ModBus)

kuzulis ()
Ответ на: комментарий от pathfinder

UPD: Где-то в сети есть софтина - симулятор протоколов (там и 61850 и 101/102/103/104 и DNP и прочее). Естественно, он триальный. В нем можно поразбираться как протоколы работают (поразбирать пакеты). Мы его пользовали. Но вот только не припомню как она называется (и не помню чтобы там 61850 был.. хотя..)..

kuzulis ()
Ответ на: комментарий от kuzulis

Где-то в сети есть софтина - симулятор протоколов (там и 61850 и 101/102/103/104 и DNP и прочее)

Triangle protocol test harness.

и не помню чтобы там 61850 был.. хотя..

Там не был, но у этой же конторы есть отдельный продукт «IEC 61850 Test Suite».

Я угадал?

pathfinder ★★★ ()
Ответ на: комментарий от kuzulis

а как я тебе модбасом автотрансформатор опишу?

splinter ★★★★★ ()
Ответ на: комментарий от splinter

а как я тебе модбасом автотрансформатор опишу?

Гы. А что, подразумевается подключать твою поделку к всяким таким «энергетическим» железякам и мониторить их через SCADA?

На даче что-ли у тебя автотрансформатор стоит, и ты хочешь как энергетик из РДУ/МСК/РСК сидеть в кресле с плюшкой и кофиечком и смотреть сто там у тебя с автортансформатором на даче (не сперли ли цыгане и ни распилили на медь) ? :)

А серьезно - да нет проблем как в ModBus загонять параметры (напругу/тог/косинус-фи и прочие ништяки). В чем проблема то?

Ну, на крайкий случай можно взять IEC(МЭК) 101/104 протокол - он именно для энергетики тоже.

Зачем такие сложности? Оно того стоит? (я просто не представляю)

kuzulis ()
Ответ на: комментарий от kuzulis

Еще вроде спеки на 61850/DNP закрытые (нужны денюжки чтобы купить), если не ошибаюсь. Мы их (на DNP3) доставали у какого-то парня, который нам их слил по-секрету :)

kuzulis ()
Ответ на: комментарий от kuzulis

modbus не предоставляет метку времени, а для описания автотранстформатора в 61850 существует спец класс.

splinter ★★★★★ ()
Ответ на: комментарий от splinter

modbus не предоставляет метку времени, а для описания автотранстформатора в 61850 существует спец класс.

А, ну, тут да - согласен. Но в Modbus можно добавить vendor-specific коды (никто не запрещает сделать расширение), но оно не стандартно.

Кроме того (если не ошибаюсь), в 61850 подразумевается, что синхронизацией/метками занимается некий низший «канальный» (или как его там) уровень, который должны поддерживать специальные роутеры (и другое оборудование) аппаратно, заточенные под это.

Хотя, могу ошибаться - давно я уже не сталкивался с 61850 (да и поверхностное знакомство с ним было).

Но зато IEC101/104/DNP имеют метки времени и всякие solicited/unsolicited сообщения, и полно спецификаций для них + можно скаду потом прикрутить если надо. :)

kuzulis ()
Ответ на: комментарий от splinter

Ну я не знаю как поделиться ГОСТ рункт 5.5.2 «Базовые типы»

Я, конечно, не специалист, но читать вроде умею. Там описан абстрактный интерфейс услуг связи, и в его описании используются эти типа. Как из этого ГОСТа вытекает, что необходимо их определять в языке C, я не понимаю.

Если ты просто собрался реализовывать этот интерфейс, почему нельзя определить INT24 как int32_t?

proud_anon ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.