【零】基於open62541專案編譯支援STM32平臺的單獨的open62541原始檔和標頭檔案
本篇文章於 2020 年 6 月 左右完成,但是沒有釋出出去,本文中涉及到的程式碼可能已經發生變化,請以官方程式碼倉庫為準
前面的原始碼下載跟編譯 Windows 下面的 原始檔一樣,就不再重複了
Windows 下編譯生成 .c
和 .h
檔案
windows 平臺需要的軟體:cmake
、python
以及 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.c
和 open62541.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 上去了