1. 程式人生 > 其它 >【零】基於open62541專案編譯支援STM32平臺的單獨的open62541原始檔和標頭檔案

【零】基於open62541專案編譯支援STM32平臺的單獨的open62541原始檔和標頭檔案

本篇文章於 2020 年 6 月 左右完成,但是沒有釋出出去,本文中涉及到的程式碼可能已經發生變化,請以官方程式碼倉庫為準

前面的原始碼下載跟編譯 Windows 下面的 原始檔一樣,就不再重複了

Windows 下編譯生成 .c.h 檔案

windows 平臺需要的軟體:cmakepython 以及 visual studio

編譯可以使用 cmake 的命令列形式進行編譯,也可以使用 gui 形式編譯,我為了好看,就用 gui 進行編譯。

進來先選擇原始碼目錄,然後選擇編譯儲存目錄,然後點 configure 選擇 visual studio 進行編譯配置,預設即可。

完成後根據自己需要進行配置。此處,我進行了如下配置。

其中,藍色框為必選,然後面無法生成 .c.h 的單獨檔案。然後注意下面的 UA_ARCHITECTURE 需要選擇 freertosLWIP,不然後面生成 .c.h 的無法在 FREERTOS LWIP 平臺上執行。然後再次點選 configure 即可。

然後會詢問你是否使用 freertos 自己的記憶體管理函式,就是 malloc、free、等函式的。我選擇的是。

然後沒問題之後,點選 generate 進行生成 visual studio 的專案檔案。

生成過程很快,不過有提示。在生成單個檔案之前,可以用 visual studio 開啟,可以在 example 中看到很多的例程,比如下面這個直接生成官方伺服器的例程。

當然,這是呼叫的單個的 open62541 的檔案,server.cpp 則是通過呼叫編譯生成的 open62541.copen62541.h 檔案來建立伺服器的。

但此時的單檔案還沒生成,需要我們採用開啟專案工程的方式開啟剛剛編譯目錄。

開啟之後,解決方案資源管理器如下所示。

此時可以看到已經有 open62541 的原始檔的標頭檔案了,我們可以開啟看一下。

會發現會提示找不到這倆檔案,這是因為我們還沒生成,所以不清楚的同學可以先看看。接下來我們就生成單獨的原始檔和標頭檔案。

其實也很簡單,直接在解決方案上右鍵,然後選擇生成解決方案即可。

可以看到編譯會報錯,並且檔案前面的圖示也沒有改變。這個錯誤我們不需要去管它,完了之後,我們直接開啟原始檔和標頭檔案,可以發現其實它們已經是生成了的。

至此,在 Windows 下為 FREERTOS LWIP 平臺編譯單獨的原始檔就已經完成了

Linux 下編譯生成 .c.h 檔案

進入原始碼目錄,建立 build 目錄,方便存放編譯過程中產生的檔案

cd open62541
mkdir build
cd build

執行 cmake 進行編譯,其中,make 在 65% 左右會出現錯誤,不過不用擔心,這是正常的。

cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DBUILD_SHARED_LIBS=OFF -DUA_ARCHITECTURE=freertosLWIP -DUA_ENABLE_AMALGAMATION=ON -DUA_ENABLE_PUBSUB=ON DUA_ARCH_FREERTOS_USE_OWN_MEMORY_FUNCTIONS=true -DUA_ARCH_ADD_FLAGS="-std=c99 -DUA_ARCHITECTURE_FREERTOSLWIP -D__REDLIB__ -DDEBUG -D__CODE_RED -D__USE_LPCOPEN -DCORE_M3 -O0 -g3 -Wall -c -fmessage-lengths=0 -fno-buildin -ffunction-section -m3 -mthumb -D__REDLIB__ -fstack-usage -specs=redlib.specs" ../

這是整個過程的編譯資訊

-- The C compiler identification is GNU 7.5.0
-- The CXX compiler identification is GNU 7.5.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found PythonInterp: /usr/bin/python (found version "2.7.17") 
-- Found Git: /usr/bin/git (found version "2.17.1") 
-- open62541 Version: 1.1.2-155-gee275e79
-- Architectures included in amalgamation: freertosLWIP
-- The selected architecture is: freertosLWIP
-- Test CC flag -std=c99
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -pipe
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Wall
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Wextra
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Wpedantic
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Werror
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Wno-static-in-inline
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Wno-overlength-strings
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Wno-unused-parameter
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Wc++-compat
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Wformat
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Wformat-security
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Wformat-nonliteral
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Wmissing-prototypes
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Wstrict-prototypes
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Wredundant-decls
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Wuninitialized
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Winit-self
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Wcast-qual
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Wstrict-overflow
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Wnested-externs
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Wmultichar
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Wundef
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -fno-strict-aliasing
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -fexceptions
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -fstack-protector-strong
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -fstack-clash-protection
-- Performing Test flag_supported
-- Performing Test flag_supported - Failed
-- Test CC flag -mcet
-- Performing Test flag_supported
-- Performing Test flag_supported - Failed
-- Test CC flag -fcf-protection
-- Performing Test flag_supported
-- Performing Test flag_supported - Failed
-- Test CC flag -D_FORTIFY_SOURCE=2
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Could NOT find Sphinx (missing: SPHINX_EXECUTABLE) 
-- Could NOT find LATEX (missing: LATEX_COMPILER) 
-- Configuring done
-- Generating done
-- Build files have been written to: /home/xiaohe/github/open62541/build

執行完畢之後,整個編譯過程就結束了,相比於 Windows 下圖形介面的設定,Linux 下要簡單的多,一行命令就搞定了。

既然已經生成了 FreeRTOS+Lwip 平臺的原始檔,下一步肯定就是移植到 stm32 上去了