Compare commits
1 Commits
feat-versi
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 99f6ebd3a7 |
@ -11,12 +11,13 @@
|
|||||||
|
|
||||||
Использует следующие библиотеки:
|
Использует следующие библиотеки:
|
||||||
1. pnet
|
1. pnet
|
||||||
2. boost (1.74)
|
2. osal
|
||||||
|
3. boost (1.74)
|
||||||
|
|
||||||
## Структура проекта:
|
## Структура проекта:
|
||||||
* ***debug_support*** - содержит скрипт для запуска отладки с правами суперпользователя и обновления gdb (нужно для Ubuntu 22.04, там есть баг с gdb - он падает при переключении на другой поток в отлажеваемом ПО),
|
* ***debug_support*** - содержит скрипт для запуска отладки с правами суперпользователя и обновления gdb (нужно для Ubuntu 22.04, там есть баг с gdb - он падает при переключении на другой поток в отлажеваемом ПО),
|
||||||
* ***libs*** - собранные библиотеки ***pnet*** и используемая ей ***osal***,
|
* ***libs*** - собранные библиотеки ***pnet*** и используемая ей ***osal***,
|
||||||
* ***profinet_stack*** - исходники библиотеки pnet,
|
* ***profinet_stack*** - исходники библиотек pnet, osal
|
||||||
* ***profinet_test*** - тестовые проекты. Наиболее интересен проект в папке ***sample_app_echo*** реализует функционал тестового модуля ECHO через взаимодействие с profinet_io_dev и подключение к разделяемой памяти.
|
* ***profinet_test*** - тестовые проекты. Наиболее интересен проект в папке ***sample_app_echo*** реализует функционал тестового модуля ECHO через взаимодействие с profinet_io_dev и подключение к разделяемой памяти.
|
||||||
* ***src*** - исходный код приложения profinet_io_dev.
|
* ***src*** - исходный код приложения profinet_io_dev.
|
||||||
|
|
||||||
@ -225,6 +226,9 @@ apt-get install libboost-all-dev
|
|||||||
* `http://server_gorbunov:3000/SmartForce4.0/profinet_io_dev/src/branch/master/libs/lib/arm_a15`
|
* `http://server_gorbunov:3000/SmartForce4.0/profinet_io_dev/src/branch/master/libs/lib/arm_a15`
|
||||||
* `http://server_gorbunov:3000/SmartForce4.0/profinet_io_dev/src/branch/master/libs/lib/x86_64`
|
* `http://server_gorbunov:3000/SmartForce4.0/profinet_io_dev/src/branch/master/libs/lib/x86_64`
|
||||||
|
|
||||||
|
Лучше взять исходники библиотек в папке profinet_stack - они уже настроены для сборки под целевую плату.
|
||||||
|
собираются отдельным проектом в VisualStudioCode.
|
||||||
|
|
||||||
В названии файла d - значит дебажная версия библиотеки, например libosal.a - Release, а libosald.a - Debug.
|
В названии файла d - значит дебажная версия библиотеки, например libosal.a - Release, а libosald.a - Debug.
|
||||||
|
|
||||||
Сборка библиоитек реализована аналогично.
|
Сборка библиоитек реализована аналогично.
|
||||||
|
|||||||
@ -40,52 +40,13 @@ if(DEFINED BOARD)
|
|||||||
include(${SITARA_DEPOT}/compile/sitara_compile_flags.cmake)
|
include(${SITARA_DEPOT}/compile/sitara_compile_flags.cmake)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Подгружаем внешние репозитории
|
# <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> nlohman json <EFBFBD> GCC7.1
|
||||||
include(FetchContent)
|
|
||||||
include(RepositoryPath.cmake)
|
|
||||||
|
|
||||||
FetchContent_Declare(
|
|
||||||
cxxopts
|
|
||||||
GIT_REPOSITORY ${cxxopts_path}
|
|
||||||
GIT_TAG master
|
|
||||||
)
|
|
||||||
FetchContent_GetProperties(cxxopts)
|
|
||||||
if(NOT cxxopts_POPULATED)
|
|
||||||
FetchContent_Populate(cxxopts)
|
|
||||||
add_subdirectory(${cxxopts_SOURCE_DIR} ${cxxopts_BINARY_DIR})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
|
|
||||||
# Получаем информацию о последнем Git Tag.
|
|
||||||
execute_process(
|
|
||||||
COMMAND ${GIT_EXECUTABLE} describe --tags --abbrev=0
|
|
||||||
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
|
|
||||||
OUTPUT_VARIABLE GIT_TAG
|
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
||||||
)
|
|
||||||
|
|
||||||
# Получаем информацию о текущем коммите.
|
|
||||||
execute_process(
|
|
||||||
COMMAND ${GIT_EXECUTABLE} show-ref --head -s -- "head"
|
|
||||||
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
|
|
||||||
OUTPUT_VARIABLE GIT_HEAD
|
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
||||||
)
|
|
||||||
|
|
||||||
# Определяем сведения о версии.
|
|
||||||
set(GIT_VERSION_INFO GIT_TAG="${GIT_TAG}" GIT_HEAD="${GIT_HEAD}")
|
|
||||||
|
|
||||||
|
|
||||||
# убирает предупреждение nlohman json о GCC7.1
|
|
||||||
add_compile_options(-Wno-psabi)
|
add_compile_options(-Wno-psabi)
|
||||||
|
|
||||||
#Если не собирается с ошибкой линкера undefined reference pthread, то добавить флаг линкера:
|
#<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> undefined reference pthread, <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
|
||||||
#add_link_options(-lrt)
|
#add_link_options(-lrt)
|
||||||
add_executable(${TARGET_NAME} ./main.cpp ${SRC_FILES})
|
add_executable(${TARGET_NAME} ./main.cpp ${SRC_FILES})
|
||||||
|
|
||||||
# Записываем сведения о версии.
|
|
||||||
target_compile_definitions(${TARGET_NAME} PRIVATE ${GIT_VERSION_INFO})
|
|
||||||
|
|
||||||
target_include_directories(${TARGET_NAME} PRIVATE
|
target_include_directories(${TARGET_NAME} PRIVATE
|
||||||
./
|
./
|
||||||
${INC_DIRS}
|
${INC_DIRS}
|
||||||
@ -95,23 +56,14 @@ target_include_directories(${TARGET_NAME} PRIVATE
|
|||||||
)
|
)
|
||||||
|
|
||||||
if (CMAKE_BUILD_TYPE STREQUAL Debug)
|
if (CMAKE_BUILD_TYPE STREQUAL Debug)
|
||||||
set(LIB_LIST
|
set(LIB_LIST profinetd osald ${Boost_LIBRARIES})
|
||||||
profinetd
|
|
||||||
osald
|
|
||||||
${Boost_LIBRARIES}
|
|
||||||
cxxopts)
|
|
||||||
elseif(CMAKE_BUILD_TYPE STREQUAL Release)
|
elseif(CMAKE_BUILD_TYPE STREQUAL Release)
|
||||||
set(LIB_LIST
|
set(LIB_LIST profinet osal ${Boost_LIBRARIES})
|
||||||
profinet
|
|
||||||
osal
|
|
||||||
${Boost_LIBRARIES}
|
|
||||||
cxxopts)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# убирает предупреждение nlohman json о GCC7.1
|
# <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> nlohman json <EFBFBD> GCC7.1
|
||||||
add_compile_options(-Wno-psabi)
|
add_compile_options(-Wno-psabi)
|
||||||
|
|
||||||
|
|
||||||
set(LIB_ARCH_DIR x86_64)
|
set(LIB_ARCH_DIR x86_64)
|
||||||
|
|
||||||
if(DEFINED BOARD)
|
if(DEFINED BOARD)
|
||||||
@ -130,10 +82,10 @@ endif()
|
|||||||
|
|
||||||
target_link_directories(${TARGET_NAME} PUBLIC ${LINK_PATH})
|
target_link_directories(${TARGET_NAME} PUBLIC ${LINK_PATH})
|
||||||
|
|
||||||
#Если не собирается с ошибкой линкера undefined reference pthread, то после ${Boost_LIBRARIES} добавить pthread или -lpthread:
|
#<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> undefined reference pthread, <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ${Boost_LIBRARIES} <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> pthread <EFBFBD><EFBFBD><EFBFBD> -lpthread:
|
||||||
#target_link_libraries (${TARGET_NAME} PUBLIC profinet osal ${Boost_LIBRARIES} pthread)
|
#target_link_libraries (${TARGET_NAME} PUBLIC profinet osal ${Boost_LIBRARIES} pthread)
|
||||||
|
|
||||||
# Для BeagleBoneAI: версия GCC8 нужно указывать stdc++fs(библиотека <filesystem>)
|
# <EFBFBD><EFBFBD><EFBFBD> BeagleBoneAI: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> GCC8 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> stdc++fs(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <filesystem>)
|
||||||
if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9)
|
if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9)
|
||||||
set(LIB_LIST ${LIB_LIST} stdc++fs)
|
set(LIB_LIST ${LIB_LIST} stdc++fs)
|
||||||
endif()
|
endif()
|
||||||
@ -146,13 +98,13 @@ install(
|
|||||||
)
|
)
|
||||||
|
|
||||||
install(FILES
|
install(FILES
|
||||||
# Копирование заглушки скрипта установки параметров сети.
|
# <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||||
# Если не копировать, то в недрах pnet после fork вызовется exit и
|
# <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> pnet <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> fork <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> exit <EFBFBD>
|
||||||
# и вызовутся деструкторы объектов, что может привести к непредвиденным последствиям.
|
# <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/set_network_parameters
|
${CMAKE_CURRENT_SOURCE_DIR}/set_network_parameters
|
||||||
#Копирование файла конфигурации
|
#<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/program_configure.json
|
${CMAKE_CURRENT_SOURCE_DIR}/program_configure.json
|
||||||
#Копирование тестового файла конфигурации устройства Profinet
|
#<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Profinet
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/profinet_device_configure.json
|
${CMAKE_CURRENT_SOURCE_DIR}/profinet_device_configure.json
|
||||||
DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/bin
|
DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/bin
|
||||||
)
|
)
|
||||||
@ -1,10 +0,0 @@
|
|||||||
# Specify the path to dependencies' git repositories
|
|
||||||
|
|
||||||
cmake_path(SET cxxopts_path "git@sofdev:External/cxxopts.git")
|
|
||||||
|
|
||||||
if (
|
|
||||||
NOT DEFINED cxxopts_path
|
|
||||||
)
|
|
||||||
|
|
||||||
message(FATAL_ERROR "Path to the dependency git repository is not specified")
|
|
||||||
endif()
|
|
||||||
@ -1,37 +0,0 @@
|
|||||||
#ifndef UFC_ASYNCSERIALCONNECTOR_VERSION_H
|
|
||||||
#define UFC_ASYNCSERIALCONNECTOR_VERSION_H
|
|
||||||
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
namespace asc {
|
|
||||||
/**
|
|
||||||
* Содержит сведения о текущей версии ПО.
|
|
||||||
*/
|
|
||||||
class Version {
|
|
||||||
public:
|
|
||||||
/**
|
|
||||||
* Получить текущую версию.
|
|
||||||
*/
|
|
||||||
static std::string GetVersion(){
|
|
||||||
return !GitTag.empty()
|
|
||||||
? GitTag + " " + GitHead
|
|
||||||
: GitHead;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
/**
|
|
||||||
* Последний TAG текущей ветки.
|
|
||||||
*/
|
|
||||||
static const std::string GitTag;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Hash текущего коммита.
|
|
||||||
*/
|
|
||||||
static const std::string GitHead;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
const std::string asc::Version::GitTag = GIT_TAG;
|
|
||||||
const std::string asc::Version::GitHead = GIT_HEAD;
|
|
||||||
|
|
||||||
#endif // UFC_ASYNCSERIALCONNECTOR_VERSION_H
|
|
||||||
26
src/main.cpp
26
src/main.cpp
@ -2,40 +2,14 @@
|
|||||||
#include "profinet.hpp"
|
#include "profinet.hpp"
|
||||||
#include <thread>
|
#include <thread>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <cxxopts.hpp>
|
|
||||||
|
|
||||||
#include "program_config.hpp"
|
#include "program_config.hpp"
|
||||||
#include "app.hpp"
|
#include "app.hpp"
|
||||||
#include "Version.h"
|
|
||||||
|
|
||||||
App app;
|
App app;
|
||||||
|
|
||||||
int main(int argc, char * argv[])
|
int main(int argc, char * argv[])
|
||||||
{
|
{
|
||||||
cxxopts::Options options(
|
|
||||||
"ProfinetConnector",
|
|
||||||
"Profinet io device driver. Designed for profinet controller interaction via ethernet\n"
|
|
||||||
);
|
|
||||||
|
|
||||||
options.set_width(160);
|
|
||||||
|
|
||||||
options.add_options()
|
|
||||||
("help", "Display this help", cxxopts::value<bool>()->default_value("false"))
|
|
||||||
("version", "Show git head commit and tag", cxxopts::value<bool>()->default_value("false"));
|
|
||||||
|
|
||||||
auto result = options.parse(argc, argv);
|
|
||||||
|
|
||||||
if (result["help"].as<bool>()) {
|
|
||||||
return not(std::cout << options.help() << std::endl);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Выводим информацию о текущей версии.
|
|
||||||
if (result["version"].as<bool>()) {
|
|
||||||
std::cout << "version: " << asc::Version::GetVersion() << std::endl;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
app.Init("program_configure.json");
|
app.Init("program_configure.json");
|
||||||
|
|
||||||
app.Run();
|
app.Run();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user