加入星計劃,您可以享受以下權益:

  • 創(chuàng)作內容快速變現
  • 行業(yè)影響力擴散
  • 作品版權保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • 應用場景
    • 特點
    • 適用環(huán)境
    • 下載與構建
    • 使用教程
    • 外部庫依賴
    • 配置
    • 許可
    • 代碼開源倉連接
  • 推薦器件
  • 相關推薦
  • 電子產業(yè)圖譜
申請入駐 產業(yè)圖譜

推薦一款嵌入式Linux開源框架與封裝-cpp-tbox

03/04 13:40
2905
閱讀需 11 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

這里推薦一款嵌入式的cpp框架與封裝代碼,小而輕量級,很不錯的開源代碼。交叉編譯也很方便,模塊化編譯,可根據需要選擇編譯模塊。

全稱: C++ Treasure Box,C++百寶箱,是一個基于 Reactor 模式的服務型?開發(fā)框架?與?組件庫,旨在讓C++開發(fā)變得輕松。

應用場景

??智能硬件,如:機器人(掃地機、商用服務機器人)、IPC無人機、車載等;

??邊緣計算組件,如:智能家居網關、IOT邊緣網關等;

??后臺服務型軟件,如:SOCKS5、中間件

參考項目:

??cpp-socks5[5];

特點

1. 基于Reactor模型

參考 Node.js 的 Reactor 模式。

主線程以 Reactor 模式處理非阻塞 IO 事件,并配合 ThreadPool 執(zhí)行大運算與阻塞性操作。

該模式避免了多線程模式競態(tài)加鎖的煩惱,程序穩(wěn)定可靠。

2. 內含main框架,開箱即用

使用內置的 main 框架處理了所有與業(yè)務無關的工作。您不需要關心日志怎么輸出、參數怎么解析、程序怎么退出、main函數怎么寫這些瑣碎的事情。main框架都為您處理好了。

您只需要派生tbox::main::Module類,填寫業(yè)務代碼,然后注冊到框架即可。

3. 具有類Shell的命令終端

可以與運行中的服務通過telnet進行交互,令其打印內部數據,或是執(zhí)行特定的動作。這極大地降低了調試難度。

shell交互示例

4. 完備的日志系統(tǒng)

1) 有三種日志輸出渠道:stdout + filelog + syslog

??stdout,將日志通過?std::cout?輸出到終端;

??syslog,將日志通過?syslog()?輸出到系統(tǒng)日志;

??filelog,將日志寫入到指定目錄下,以格式:前綴.年月日_時分秒.進程號.log?的文件中。文件大小超過1M則另創(chuàng)建新的日志文件。由于寫文件效率低,該輸出渠道采用前后端模式。

三種渠道可以啟動參數中選定一個或同時多種,也可在運行時通過終端更改。

2) 根據日志等級渲染不同顏色,一目了然,內容詳盡

日志內容包含了:等級、時間(精確到微秒)、線程號、模塊名、函數名、正文、文件名、行號。

方便快速定位問題。

日志打印展示

3) 靈活的日志輸出過濾器,且能運行時修改

可在程序運行時針對不同的模塊單獨設置日志等級,如下:

設置日志等級

5. 靈活的參數系統(tǒng),以不變應萬變

參數以JSON的格式提供,可以傳入任何格式的運行參數,包括:整數、小數、字串、數組、組合參數,滿足幾乎所有參數傳入需求:

參數help

在執(zhí)行時可以使用?-c your_cfg_file.json?導入JSON格式的配置文件。同時還可以使用配合?-s 'xx.yy.zz=vvv'?臨時指定參數。

而JSON格式的配置文件還支持include指令,在加載時去包含其它的配置文件。

6. 跨線程委派任務,無需加鎖

子線程委托主線程執(zhí)行:

runInLoop示例

主線程委托子線程執(zhí)行:

ThreadPool示例

7. 支持優(yōu)雅的退出流程

在接收到信號:SIGINT, SIGTERM, SIGQUIT, SIGPWR 時,會有序地執(zhí)行退出流程,釋放資源。做到干凈地退出。

友好地退出

8. 有全面的異常捕獲機制

當程序出現各種程序異常,如:段錯誤、斷言、總線錯誤、異常未捕獲等,架框會捕獲并在日志系統(tǒng)中打印完整的調用棧。面對程序崩潰,不再一臉茫然。效果如下:

異常棧打印

9. 有豐富的開發(fā)組件

庫名 中文名 說明
base 基礎庫 含日志打印、常用工具等
util 工具庫 在業(yè)務代碼中可能會用到的庫
event 事件庫 實現了IO,Timer,Signal三種事件驅動,是整個框架的心臟
eventx 事件擴展庫 含 ThreadPool 線程池,WorkThread工作線程,TimerPool 定時器池等模塊
log 日志輸出庫 實現了終端、syslog、文件形式的日志輸出
network 網絡庫 實現了串口、終端、UDPTCP 通信模塊
terminal 終端 類似shell的命令終端,可實現運行時與程序進行命令交互
main 主框架 實現了完備的程序啟動流程與框架,讓開發(fā)者只需關心業(yè)務代碼
run 執(zhí)行器 是個可執(zhí)行程序,可加載多個由參數-l xxx指定的動態(tài)庫,并運行其中的Module
mqtt MQTT客戶端庫
coroutine 協程庫 眾所周知,異步框架不方便處理順序性業(yè)務,協程彌補之
http HTTP庫 在network的基礎上實現了HTTP的Server與Client模塊
alarm 鬧鐘模塊 實現了4種常用的鬧鐘:CRON鬧鐘、單次鬧鐘、星期循環(huán)鬧鐘、工作日鬧鐘
flow 流程模塊 含多層級狀態(tài)機與行為樹,解決異步模式下動行流程問題

適用環(huán)境

??Linux 系統(tǒng);

? C++11 以上。

下載與構建

準備

sudo?apt?update
sudo?apt?install?build-essential
sudo?apt?install?libgtest-dev?libgmock-dev
sudo?apt?install?libmosquitto-dev
sudo?apt?install?libdbus-1-dev

git?clone?https://gitee.com/cpp-master/cpp-tbox.git
cd?cpp-tbox

方法一:GNU Make

make?3rd-party?modules?RELEASE=1

完成之后,頭文件與庫文件都在 .staging 目錄下。
當然也可以通過指定?STAGING_DIR?對頭文件與庫文件的生成路徑進行指定。
如:

make?3rd-party?modules?RELEASE=1?STAGING_DIR=$HOME/.tbox

完成之后,頭文件與庫文件都在 $HOME/.tbox 路徑下。

方法二:CMake

cmake?-B?build
cmake?--build?build
cmake?--install?build

通過指定CMAKE_INSTALL_PREFIX?自定義安裝目錄(默認安裝在/usr/local):

cmake?-B?build?-DCMAKE_INSTALL_PREFIX=$HOME/.tbox

使用教程

關于如何使用 cpp-tbox 開發(fā)自己的程序,詳見教程:?cpp-tbox-tutorials[6]

使用find_package的例子:

cmake_minimum_required(VERSION?3.10)
project(tbox-find_package)
find_package(tbox?COMPONENTS?base?util?alarm?event?eventx)
add_executable(demo?main.cpp)
target_link_libraries(demo?PRIVATE?tbox::tbox_base?tbox::tbox_util?tbox::tbox_alarm?tbox::tbox_event?tbox::tbox_eventx)

外部庫依賴

庫名 依賴模塊 必需 說明 安裝方法
libgtest-dev 所有 單元測試用 sudo apt install libgtest-dev
libgmock-dev 所有 單元測試用 sudo apt install libgmock-dev
libmosquitto-dev mqtt no MQTT sudo apt install libmosquitto-dev
libdbus-1-dev dbus no DBus sudo apt install libdbus-1-dev

配置

你可以決定哪些模塊需要構建,哪些不需要。
打開 config.mk 文件,將不需要模塊對應?app_y += xxx?屏蔽即可,但要注意模塊間的依賴性。

許可

MIT[7],可免費商用。

代碼開源倉連接

代碼碼云:https://gitee.com/cpp-master/cpp-tbox?_from=gitee_search

推薦器件

更多器件
器件型號 數量 器件廠商 器件描述 數據手冊 ECAD模型 風險等級 參考價格 更多信息
TLP291-4(GB-TP,E(T 1 Toshiba America Electronic Components Optocoupler - Transistor Output, 4 CHANNEL TRANSISTOR OUTPUT OPTOCOUPLER, ROHS COMPLIANT, SURFACE MOUNT, MINIFLAT, 11-11F1, SOP-16

ECAD模型

下載ECAD模型
$2.3 查看
ABS09-32.768KHZ-9-T 1 Abracon Corporation CRYSTAL 32.7680KHZ 9PF SMD

ECAD模型

下載ECAD模型
$1.16 查看
NL17SZ126DFT2G 1 onsemi Single Non-Inverting Buffer, 3-State, SC-88A (SC-70-5 / SOT-353), 3000-REEL

ECAD模型

下載ECAD模型
$0.31 查看

相關推薦

電子產業(yè)圖譜

專注嵌入式Linux應用開發(fā),C/C++技術交流;Qt編程技術交流。