Segnetics

Вернуться   Segnetics > Форум Segnetics > Вопросы о программировании > Готовые решения

Готовые решения Здесь собраны все темы, по которым было найдено и выложено решение

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.02.2018, 16:51   #1
Gel
Senior Member
 
Регистрация: Nov 2017
Сообщения: 563
Благодарил(а): 3 раз(а)
Поблагодарили: 38 раз(а) в 30 сообщениях
По умолчанию Альтернатива для C/C++ на Trim5/SMH4, язык Go

Не встречал на форуме упоминание альтернативы компилируемым языкам C/C++ на Trim5/SMH4.
Хотя "золото" лежит под ногами в виде языка (платформы) Go (https://ru.wikipedia.org/wiki/Go).

Особенностью Go является хорошая кросс-платформенность из коробки.

Для того, что бы собрать "Привет, мир" под Windows, который будет работать на Trim5/SMH4:

Код:
package main

import "fmt"

func main() {
    fmt.Printf("hello, world\n")
}
нужно всего лишь запустить сборку в Windows в таком виде:

Код:
set GOOS=linux
set GOARCH=arm
set GOARM=7
go build hello
Gel вне форума   Ответить с цитированием
Старый 12.02.2018, 17:01   #2
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 019
Благодарил(а): 15 раз(а)
Поблагодарили: 655 раз(а) в 599 сообщениях
По умолчанию Ответ: Алтернатива для C/C++ на Trim5/SMH4

Цитата
Сообщение от Gel Посмотреть сообщение
Для того, что бы собрать "Привет, мир" под Windows, который будет работать на Trim5/SMH4:
Вы это проверяли?


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie сейчас на форуме   Ответить с цитированием
Старый 12.02.2018, 17:06   #3
Gromov
Уволен из Сегнетикс
 
Регистрация: Nov 2015
Адрес: CПб/ВЛГ
Сообщения: 0
Благодарил(а): 0 раз(а)
Поблагодарили: 1 раз в 1 сообщении
По умолчанию Ответ: Алтернатива для C/C++ на Trim5/SMH4

Цитата
Сообщение от Gel Посмотреть сообщение
Не встречал на форуме упоминание альтернативы компилируемым языкам C/C++ на Trim5/SMH4.
А я писал, что есть варианты, даже NodeJS сам запускал из любопытства. Даже кое-что на нём работает, правда, безбожное пожирание оперативной памяти непростительно.

Что же насчёт гоу - я лично приветствую пошаговое руководство, где что скачать, что где прописать и как что запускать, с комментариями и тому подобными вещами. Тогда я на досуге и сам потестирую, что там по производительности и ресурсам и так далее.

Без мануала я до этого доберусь никогда, скорее всего, так как некогда разбираться, что куда, и без этого хватает интересных задач на выходные =)


__________________
В сегнетиксе не работаю с самого начала 2019 года.
Gromov вне форума   Ответить с цитированием
Старый 12.02.2018, 17:43   #4
Gel
Senior Member
 
Регистрация: Nov 2017
Сообщения: 563
Благодарил(а): 3 раз(а)
Поблагодарили: 38 раз(а) в 30 сообщениях
По умолчанию Ответ: Алтернатива для C/C++ на Trim5/SMH4

Цитата:
Сообщение от Arsie Посмотреть сообщение
Вы это проверяли?
Да, проверял, запускал на SMH4.


Цитата Без мануала я до этого доберусь никогда, скорее всего, так как некогда разбираться
Самая соль в том, что мануал минимальный.

Если для Windows:

1. Скачиваем дистрибутив со страницы https://golang.org/dl/, сейчас для Windows msi-дистрибутив занимает 91 Мб.

2. Устанавливаем, можно все по-умолчанию.

3. Создаем рабочий каталог:
Код:
mkdir "%USERPROFILE%\go\src\hello"
То, что создаем в %USERPROFILE%\go\src\ -- критично, нужно именно здесь.

4. Создаем в этом каталоге "привет мир", файл hello.go:
Код:
package main

import "fmt"

func main() {
    fmt.Printf("hello, world\n")
}
5. Если сейчас из рабочего каталога (%USERPROFILE%\go\src\hello) выполнить:
Код:
go build
то соберется версия для Windows, файл hello.exe, время сборки где-то в районе секунды, размер выходного файла 1,9 Мб, в импортах только winmm.dll, ws2_32.dll, kernel32.dll.

6. Если выполнить:
Код:
set GOOS=linux
set GOARCH=arm
set GOARM=7
go build
то соберется версия, которая запустится на девайсах, время сборки где-то в районе пяти секунд, размер выходного файла 1,6 Мб. Без debug-информации на выходе будет файл около 1,2 Мб.
Gel вне форума   Ответить с цитированием
Старый 12.02.2018, 18:16   #5
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 019
Благодарил(а): 15 раз(а)
Поблагодарили: 655 раз(а) в 599 сообщениях
По умолчанию Ответ: Алтернатива для C/C++ на Trim5/SMH4

Цитата
Сообщение от Gel Посмотреть сообщение
Да, проверял, запускал на SMH4.


"Hello" вывелось на экран?


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie сейчас на форуме   Ответить с цитированием
Старый 12.02.2018, 20:10   #6
Gel
Senior Member
 
Регистрация: Nov 2017
Сообщения: 563
Благодарил(а): 3 раз(а)
Поблагодарили: 38 раз(а) в 30 сообщениях
По умолчанию Ответ: Алтернатива для C/C++ на Trim5/SMH4

Цитата:
Сообщение от Arsie Посмотреть сообщение
"Hello" вывелось на экран?
Hello вывелось, математика работает, сеть работает, многопоточность работает...



Это был результат работы примера:

Код:
package main

import (
	"fmt"
	"math"
	"math/rand"
	"net"
	"time"
)

func main() {
	fmt.Println("hello, world!")

	for i := 0; i < 3; i++ {
		r := rand.Float64()
		fmt.Printf("cycle=%v r=%v sin(r)=%v\n", i, r, math.Sin(r))
	}

	sock, err := net.Listen("tcp", "localhost:7777")

	if err != nil {
		fmt.Println("Error accepting: ", err.Error())
		return
	}

	go server(sock)

	time.Sleep(time.Second)

	c, err := net.Dial("tcp", "localhost:7777")

	c.Write([]byte("hello, localhost!"))

	c.Close()

	time.Sleep(time.Second)

	fmt.Println("exit")
}

func server(s net.Listener) {
	defer s.Close()

	c, err := s.Accept()

	if err != nil {
		return
	}

	b := make([]byte, 4)

	for {
		n, err := c.Read(b)

		if err != nil {
			break
		}

		fmt.Println("server:", string(b[:n]))
	}

	fmt.Println("server complete!")
}
Размер запускаемого файла (сборка с параметрами по-умолчанию): 2462 Кб

Последний раз редактировалось Gel, 12.02.2018 в 20:32
Gel вне форума   Ответить с цитированием
Старый 15.02.2018, 18:13   #7
Gel
Senior Member
 
Регистрация: Nov 2017
Сообщения: 563
Благодарил(а): 3 раз(а)
Поблагодарили: 38 раз(а) в 30 сообщениях
По умолчанию Ответ: Альтернатива для C/C++ на Trim5/SMH4

Кроме языка/платформы Go, так же неплохо с кросс-компиляцией обстоит дело и с языком/платформой Rust.

Rust -- не такой попсовый и популярный, как Go, но он более "мощный", c использованием Markdown для комментариев в коде, с лучшей продуманной системой сборки и пакетным менеджером Cargo.

За большую функциональность приходится платить большей сложностью языка, одни только макросы на основе AST (Абстрактное синтаксическое дерево) чего стоят...

Для Windows, кратко инструкция по установке выглядит следующим образом.

1. Что бы проекты собирались для Windows, необходимо проинсталлировать средства сборки C/C++, установить "Build Tools for Visual Studio 2017" со страницы https://www.visualstudio.com/downloa...al-studio-2017, при этом отметить инструменты C++ при установке.

2. Что бы проекты собирались для ARMv7, необходимо проинсталлировать средства сборки C/C++, установить gcc-linaro-7.2.1-2017.11-i686-mingw32_arm-linux-gnueabihf.tar.xz со страницы https://releases.linaro.org/componen...nux-gnueabihf/

3. Загружаем дистрибутив Rust: https://www.rust-lang.org/ru-RU/install.html и устанавливаем его.

4. Устанавливаем библиотеки исполнения для ARMv7 со статической линковкой, выполняем команду:
Код:
rustup target install armv7-unknown-linux-musleabihf
5. Создаем файл конфигурации сборщика, файл %USERPROFILE%\.cargo\config с содержимым:
Код:
[target.armv7-unknown-linux-musleabihf]
linker = "....../bin/arm-linux-gnueabihf-gcc.exe"
где .... заменяем на каталог, в который установили gcc-linaro в пункте 2.

6. Создаем шаблон проекта "hello" командой:
Код:
cargo new hello --bin
7. Собираем версию под Windows командой:
Код:
cargo build
Результат будет в файле target/debug/hello.exe, размер ~140 Кб, слинкован с VCRUNTIMExxx.dll.

8. Собираем версию под ARM командой:
Код:
cargo build --target=armv7-unknown-linux-musleabihf
Результат будет в файле target/armv7-unknown-linux-musleabihf/debug/hello (размер ~1.9 Мб), время сборки ~1 сек.

Последний раз редактировалось Gel, 15.02.2018 в 18:31
Gel вне форума   Ответить с цитированием
Старый 15.02.2018, 18:16   #8
Gromov
Уволен из Сегнетикс
 
Регистрация: Nov 2015
Адрес: CПб/ВЛГ
Сообщения: 0
Благодарил(а): 0 раз(а)
Поблагодарили: 1 раз в 1 сообщении
По умолчанию Ответ: Альтернатива для C/C++ на Trim5/SMH4

Одна только проблема - это доступ к шмемам, а значит и лоджику из всех этих структур. Выдернуть сторонней библиотекой шмем из структуры возможно, но это будет не просто... Я как-то пробовал, мне быстро надоело =)


__________________
В сегнетиксе не работаю с самого начала 2019 года.
Gromov вне форума   Ответить с цитированием
Старый 15.02.2018, 18:26   #9
Gel
Senior Member
 
Регистрация: Nov 2017
Сообщения: 563
Благодарил(а): 3 раз(а)
Поблагодарили: 38 раз(а) в 30 сообщениях
По умолчанию Ответ: Альтернатива для C/C++ на Trim5/SMH4

Цитата
Сообщение от Gromov Посмотреть сообщение
Одна только проблема - это доступ к шмемам, а значит и лоджику из всех этих структур. Выдернуть сторонней библиотекой шмем из структуры возможно, но это будет не просто... Я как-то пробовал, мне быстро надоело =)
Я не думаю, что доступ к шмемам из Go или Rust будет какой-то особой проблемой, что тут есть какие-то принципиальные ограничения.

С другой стороны, использовать шмемы, как мне кажется, нужно в крайнем случае, когда по какой-то причине TCP и Modbus не подходят. Потому что при взаимодействии через Modbus/TCP заметно упрощается разработка и отладка приложения: это можно делать на другой платформе, подключаться по сети, а непосредственно на устройстве использовать уже готовый отлаженный результат.
Gel вне форума   Ответить с цитированием
Старый 26.02.2018, 09:46   #10
edesign
Новичок
 
Регистрация: Dec 2017
Сообщения: 2
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: Альтернатива для C/C++ на Trim5/SMH4

Лучше Python, может быть только Си (для тех кто умеет конечно и готов тратить время). Почему питон, потому что большое кол-во библиотек с САМЫМ богатым функционалом. Думаю что все другие языки нервно курят в сторонке, не тратьте зря время.
Запускал, работает хорошо. Даже графику рисует. Жаль что только 2 Gb флэш памяти, все плотно получается если ставить много всего. Лучше 4 Gb. Одна боль - PyQt не получилось пока, ему иксы нужны похоже. Наверное можно просто Qt5? Напишите кто реально пробовал ...
edesign вне форума   Ответить с цитированием
Старый 26.02.2018, 10:35   #11
Gromov
Уволен из Сегнетикс
 
Регистрация: Nov 2015
Адрес: CПб/ВЛГ
Сообщения: 0
Благодарил(а): 0 раз(а)
Поблагодарили: 1 раз в 1 сообщении
По умолчанию Ответ: Альтернатива для C/C++ на Trim5/SMH4

Цитата
Сообщение от Gel Посмотреть сообщение
Я не думаю, что доступ к шмемам из Go или Rust будет какой-то особой проблемой, что тут есть какие-то принципиальные ограничения.

С другой стороны, использовать шмемы, как мне кажется, нужно в крайнем случае, когда по какой-то причине TCP и Modbus не подходят. Потому что при взаимодействии через Modbus/TCP заметно упрощается разработка и отладка приложения: это можно делать на другой платформе, подключаться по сети, а непосредственно на устройстве использовать уже готовый отлаженный результат.
Доступ к шмемам будет особой проблемой, поскольку юзеру придётся взять и распарсить карту шмемов из лоджика. О да, для меня тоже было новостью узнать, что шмемы не создаются каждый отдельно, как это обычно бывает. Они создаются в одном файле, и там адресация по указателям. Короче, можно взять библиотеку и перевести её на go, но это будет та ещё заморочка. Модбас и локалхост, в этом плане, выигрывают. Однако, в этом случае есть проблемы с производительностью и это нужно учитывать. модбас работает медленнее чем локалхост. Насколько - затрудняюсь ответить. Критических тестов не проводил.


__________________
В сегнетиксе не работаю с самого начала 2019 года.
Gromov вне форума   Ответить с цитированием
Старый 11.09.2018, 19:22   #12
Gel
Senior Member
 
Регистрация: Nov 2017
Сообщения: 563
Благодарил(а): 3 раз(а)
Поблагодарили: 38 раз(а) в 30 сообщениях
По умолчанию Ответ: Альтернатива для C/C++ на Trim5/SMH4

Цитата
Сообщение от Gromov Посмотреть сообщение
Одна только проблема - это доступ к шмемам, а значит и лоджику из всех этих структур. Выдернуть сторонней библиотекой шмем из структуры возможно, но это будет не просто... Я как-то пробовал, мне быстро надоело =)
Руки дошли поробовать шмем. Как и предполагалось, никаких проблем не возникло (в Go), ничего сложного нет, все входит и выходит...
Gel вне форума   Ответить с цитированием
Старый 12.09.2018, 09:39   #13
Gromov
Уволен из Сегнетикс
 
Регистрация: Nov 2015
Адрес: CПб/ВЛГ
Сообщения: 0
Благодарил(а): 0 раз(а)
Поблагодарили: 1 раз в 1 сообщении
По умолчанию Ответ: Альтернатива для C/C++ на Trim5/SMH4

Цитата
Сообщение от Gel Посмотреть сообщение
Руки дошли поробовать шмем. Как и предполагалось, никаких проблем не возникло (в Go), ничего сложного нет, все входит и выходит...
Если не затруднит - дайте, пожалуйста, пример, как работаете со шмемами из go.


__________________
В сегнетиксе не работаю с самого начала 2019 года.
Gromov вне форума   Ответить с цитированием
Старый 12.09.2018, 09:52   #14
Gel
Senior Member
 
Регистрация: Nov 2017
Сообщения: 563
Благодарил(а): 3 раз(а)
Поблагодарили: 38 раз(а) в 30 сообщениях
По умолчанию Ответ: Альтернатива для C/C++ на Trim5/SMH4

А я все выложил вчера на GitHub, в рамках проекта-шлюза MQTT для SMH4/Trim5.

Вот ссылка на конкретный файл:

https://github.com/gelsrc/shm2mqtt/b...r/shm_linux.go
Gel вне форума   Ответить с цитированием
Ответ

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать свои сообщения

BB code is Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Настройка VPN на роутерах Mikrotik для удаленной наладки системы nizercat Связь с внешним миром 43 05.12.2019 22:16
Автоматика для "мини Алкозавода" Kley107 Вопросы о программировании 62 08.11.2019 12:48
"Мегадевайс" для электриков на smh2G(i) ailcat Форум Segnetics 9 30.08.2015 12:58
Правильная разводка сетей RS-485 Arsie Библиотека 30 28.02.2014 13:52
Использование USB-хаба Varnak Вопросы о SMH-2G(i) 8 01.03.2013 12:20


Часовой пояс GMT +4, время: 17:09.


Версия vBulletin: 3.8.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Segnetics 2005 - 2023