|
關(guān)注+星標(biāo)公眾號(hào),不錯(cuò)過精彩內(nèi)容
來源 | 網(wǎng)絡(luò)
推薦理由這是一款大神級(jí)開源代碼,基于c語言的,幾乎包含了嵌入式開發(fā)的各個(gè)部分的封裝,可以說是嵌入式系統(tǒng)的瑞士軍刀!
注:源碼作者不是我,我這里只是推薦,幫忙宣傳。
mik1dw3n1zq6405153143.jpg (57.87 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
mik1dw3n1zq6405153143.jpg
昨天 07:37 上傳
簡(jiǎn)介TBOX是一個(gè)用c語言實(shí)現(xiàn)的跨平臺(tái)開發(fā)庫(kù)。
針對(duì)各個(gè)平臺(tái),封裝了統(tǒng)一的接口,簡(jiǎn)化了各類開發(fā)過程中常用操作,使你在開發(fā)過程中,更加關(guān)注實(shí)際應(yīng)用的開發(fā),而不是把時(shí)間浪費(fèi)在瑣碎的接口兼容性上面,并且充分利用了各個(gè)平臺(tái)獨(dú)有的一些特性進(jìn)行優(yōu)化。
這個(gè)項(xiàng)目的目的,是為了使C開發(fā)更加的簡(jiǎn)單高效。
目前支持的平臺(tái)有: Windows, Macosx, Linux, Android, iOS, *BSD等等。
通過xmake[1]支持各種編譯模式:
? Release: 正式版編譯,禁用調(diào)試信息、斷言,各種檢測(cè)機(jī)制,啟用編譯器優(yōu)化
? Debug: 調(diào)試模式,默認(rèn)啟用詳細(xì)調(diào)試信息、斷言、內(nèi)存越界檢測(cè)、內(nèi)存泄漏、鎖競(jìng)爭(zhēng)分析等檢測(cè)機(jī)制
? Small: 最小化編譯,默認(rèn)禁用所有擴(kuò)展模塊,啟用編譯器最小化優(yōu)化
? Micro: 針對(duì)嵌入式平臺(tái),僅僅編譯tbox微內(nèi)核,僅提供最基礎(chǔ)的跨平臺(tái)接口,生成庫(kù)僅64K左右(內(nèi)置輕量libc接口實(shí)現(xiàn))
如果你想了解更多,請(qǐng)參考:在線文檔[2], Github[3]以及Gitee[4]
特性流庫(kù)針對(duì)http、file、socket、data等流數(shù)據(jù),實(shí)現(xiàn)統(tǒng)一接口進(jìn)行讀寫,并且支持: 阻塞、非阻塞、異步 三種讀寫模式。支持中間增加多層filter流進(jìn)行流過濾,實(shí)現(xiàn)邊讀取,內(nèi)部邊進(jìn)行解壓、編碼轉(zhuǎn)換、加密等操作,極大的減少了內(nèi)存使用。
主要提供以下模塊:
? stream:通用非阻塞流,用于一般的單獨(dú)io處理,同時(shí)支持協(xié)程以實(shí)現(xiàn)異步傳輸。
? transfer:流傳輸器,維護(hù)兩路流的傳輸。
? static_stream:針對(duì)靜態(tài)數(shù)據(jù)buffer優(yōu)化的靜態(tài)流,用于輕量快速的數(shù)據(jù)解析。
協(xié)程庫(kù)? 快速高效的協(xié)程切換支持
? 提供跨平臺(tái)支持,核心切換算法參考boost,并且對(duì)其進(jìn)行重寫和優(yōu)化,目前支持架構(gòu):x86, x86_64, arm, arm64, mips32
? 提供channel協(xié)程間數(shù)據(jù)通信支持,基于生產(chǎn)、消費(fèi)者模型
? 提供信號(hào)量、協(xié)程鎖支持
? socket、stream都模塊原生支持協(xié)程,并且可在線程和協(xié)程間進(jìn)行無縫切換
? 提供http、file等基于協(xié)程的簡(jiǎn)單服務(wù)器實(shí)例,只需幾百行代碼,就可以從socket開始寫個(gè)高性能io服務(wù)器,代碼邏輯比異步回調(diào)模式更加清晰
? 同時(shí)提供stackfull, stackless兩種協(xié)程模式支持,stackless協(xié)程更加的輕量(每個(gè)協(xié)程只占用幾十個(gè)bytes),切換更快(會(huì)犧牲部分易用性)
? 支持epoll, kqueue, poll, select 和 IOCP
? 在協(xié)程和poller中支持同時(shí)等待和調(diào)度socket,pipe io和process
數(shù)據(jù)庫(kù)? 統(tǒng)一并簡(jiǎn)化數(shù)據(jù)庫(kù)操作接口,適配各種數(shù)據(jù)源,通過統(tǒng)一的url來自動(dòng)連接打開支持的數(shù)據(jù)庫(kù),數(shù)據(jù)的枚舉采用迭代器模型。
? 目前支持sqlite3以及mysql兩種關(guān)系型數(shù)據(jù)庫(kù),也可自定義擴(kuò)展使用其他關(guān)系型數(shù)據(jù)庫(kù)。
xml庫(kù)? 針對(duì)xml提供DOM和SAX兩種解析模式,SAX方式采用外部迭代模式,靈活性和性能更高,并且可以選擇指定路徑,進(jìn)行解析。
? 解析過程完全基于stream,所以是高度流化的,可以實(shí)現(xiàn)邊下載、邊解壓、邊轉(zhuǎn)碼、邊解析一條龍服務(wù),使用較低的內(nèi)存也可以解析大規(guī)模數(shù)據(jù)。
? 提供xml writer以支持對(duì)xml生成
內(nèi)存庫(kù)? 參考linux內(nèi)核內(nèi)存管理機(jī)制的實(shí)現(xiàn),并對(duì)其進(jìn)行各種改造和優(yōu)化,所實(shí)現(xiàn)的TBOX獨(dú)有的一整套內(nèi)存池管理架構(gòu)。
? 調(diào)試模式下,可以輕松檢測(cè)并定位內(nèi)存泄露、內(nèi)存越界溢出、內(nèi)存重疊覆蓋等常見內(nèi)存問題,并對(duì)整體內(nèi)存的使用進(jìn)行了統(tǒng)計(jì)和簡(jiǎn)要分析。
? 針對(duì)大塊數(shù)據(jù)、小塊數(shù)據(jù)、字符串?dāng)?shù)據(jù)進(jìn)行了充分的利用,避免了大量外部碎片和內(nèi)部碎片的產(chǎn)生。分配操作進(jìn)行了各種優(yōu)化,96%的情況下,效率都是在O(1)。
容器庫(kù)? 提供哈希、鏈表、數(shù)組、隊(duì)列、堆棧、最小最大堆等常用容器。
? 支持各種常用成員類型,在原有的容器期初上,其成員類型還可以完全自定義擴(kuò)展。
? 所有容器都支持迭代器操作。
? 大部分容器都可以支持基于stream的序列化和反序列化操作。
算法庫(kù)? 提供各種排序算法:冒泡排序、堆排序、快速排序、插入排序。
? 提供各種查找算法:線性遍歷、二分法搜索。
? 提供各種遍歷、刪除、統(tǒng)計(jì)算法。
? 以迭代器為接口,實(shí)現(xiàn)算法和容器的分離,類似stl,但是c實(shí)現(xiàn)的,更加輕量。
網(wǎng)絡(luò)庫(kù)? 實(shí)現(xiàn)http客戶端模塊
? 實(shí)現(xiàn)cookies
? 實(shí)現(xiàn)dns解析與緩存
? 實(shí)現(xiàn)ssl(支持openssl, polarssl, mbedtls)
? 支持ipv4、ipv6
? 支持通過協(xié)程實(shí)現(xiàn)異步模式
數(shù)學(xué)運(yùn)算庫(kù)? 提供各種精度的定點(diǎn)運(yùn)算支持
? 提供隨機(jī)數(shù)生成器
libc庫(kù)? libc的一個(gè)輕量級(jí)實(shí)現(xiàn),完全跨平臺(tái),并且針對(duì)不同架構(gòu)進(jìn)行了優(yōu)化。
? 支持大部分字符串、寬字符串操作。
? 擴(kuò)展字符串、寬字符串的各種大小寫不敏感操作接口
? 擴(kuò)展memset_u16、memset_u32等接口,并對(duì)其進(jìn)行高度優(yōu)化,尤其適合圖形渲染程序
libm庫(kù)? libm部分接口的一個(gè)輕量級(jí)實(shí)現(xiàn),以及對(duì)常用系統(tǒng)接口的封裝。(目前只實(shí)現(xiàn)了部分,之后有時(shí)間會(huì)完全實(shí)現(xiàn)掉)
? 擴(kuò)展部分常用接口,增加對(duì)sqrt、log2等常用函數(shù)的整數(shù)版本計(jì)算,進(jìn)行高度優(yōu)化,不涉及浮點(diǎn)運(yùn)算,適合嵌入式環(huán)境使用。
object庫(kù)? 輕量級(jí)類apple的CoreFoundation庫(kù),支持object、dictionary、array、string、number、date、data等常用對(duì)象,并且可以方便擴(kuò)展自定義對(duì)象的序列化。
? 支持對(duì)xml、json、binary以及apple的plist(xplist/bplist)格式序列化和反序列化。并且實(shí)現(xiàn)自有的binary序列化格式, 針對(duì)明文進(jìn)行了簡(jiǎn)單的加密,在不影響性能的前提下,序列化后的大小比bplist節(jié)省30%。
平臺(tái)庫(kù)? 提供file、directory、socket、thread、time等常用系統(tǒng)接口
? 提供atomic、atomic64接口
? 提供高精度、低精度定時(shí)器
? 提供高性能的線程池操作
? 提供event、mutex、semaphore、spinlock等事件、互斥、信號(hào)量、自旋鎖操作
? 提供獲取函數(shù)堆棧信息的接口,方便調(diào)試和錯(cuò)誤定位
? 提供跨平臺(tái)動(dòng)態(tài)庫(kù)加載接口(如果系統(tǒng)支持的話)
? 提供io輪詢器,針對(duì)epoll, poll, select, kqueue進(jìn)行跨平臺(tái)封裝
? 提供跨平臺(tái)上下文切換接口,主要用于協(xié)程實(shí)現(xiàn),切換效率非常高
壓縮庫(kù)? 支持zlib/zlibraw/gzip的壓縮與解壓(需要第三方zlib庫(kù)支持)。
字符編碼庫(kù)? 支持utf8、utf16、gbk、gb2312、uc2、uc4 之間的互相轉(zhuǎn)碼,并且支持大小端格式。
實(shí)用工具庫(kù)? 實(shí)現(xiàn)base64/32編解碼
? 實(shí)現(xiàn)crc32、adler32、md5、sha1等常用hash算法
? 實(shí)現(xiàn)日志輸出、斷言等輔助調(diào)試工具
? 實(shí)現(xiàn)url編解碼
? 實(shí)現(xiàn)位操作相關(guān)接口,支持各種數(shù)據(jù)格式的解析,可以對(duì)8bits、16bits、32bits、64bits、float、double以及任意bits的字段進(jìn)行解析操作,并且同時(shí)支持大端、小端和本地端模式,并針對(duì)部分操作進(jìn)行了優(yōu)化,像static_stream、stream都有相關(guān)接口對(duì)其進(jìn)行了封裝,方便在流上進(jìn)行快速數(shù)據(jù)解析。
? 實(shí)現(xiàn)swap16、swap32、swap64等位交換操作,并針對(duì)各個(gè)平臺(tái)進(jìn)行了優(yōu)化。
? 實(shí)現(xiàn)一些高級(jí)的位處理接口,例如:位0的快速統(tǒng)計(jì)、前導(dǎo)0和前導(dǎo)1的快速位計(jì)數(shù)、后導(dǎo)01的快速位計(jì)數(shù)
? 實(shí)現(xiàn)單例模塊,可以對(duì)靜態(tài)對(duì)象、實(shí)例對(duì)象進(jìn)行快速的單例封裝,實(shí)現(xiàn)全局線程安全
? 實(shí)現(xiàn)option模塊,對(duì)命令行參數(shù)進(jìn)行解析,提供快速方便的命令行選項(xiàng)建立和解析操作,對(duì)于寫終端程序還是很有幫助的
正則表達(dá)式庫(kù)? 支持匹配和替換操作
? 支持全局、多行、大小寫不敏感等模式
? 使用pcre, pcre2和posix正則庫(kù)
一些使用tbox的項(xiàng)目:? gbox[5]
? vm86[6]
? xmake[7]
? itrace[8]
? 更多項(xiàng)目[9]
使用 Xmake 編譯請(qǐng)先安裝: xmake[10]
# 默認(rèn)直接編譯當(dāng)前主機(jī)平臺(tái)
$ cd ./tbox
$ xmake
# 編譯mingw平臺(tái)
$ cd ./tbox
$ xmake f -p mingw --sdk=/home/mingwsdk
$ xmake
# 編譯iphoneos平臺(tái)
$ cd ./tbox
$ xmake f -p iphoneos
$ xmake
# 編譯android平臺(tái)
$ cd ./tbox
$ xmake f -p android --ndk=xxxxx
$ xmake
# 交叉編譯
$ cd ./tbox
$ xmake f -p linux --sdk=/home/sdk #--bin=/home/sdk/bin
$ xmake使用 xmake.sh 編譯$ ./configure
$ make例子#include "tbox/tbox.h"
int main(int argc, char** argv) {
if (!tb_init(tb_null, tb_null)) return 0;
tb_vector_ref_t vector = tb_vector_init(0, tb_element_str(tb_true));
if (vector) {
tb_vector_insert_tail(vector, "hello");
tb_vector_insert_tail(vector, "tbox");
tb_for_all (tb_char_t const*, cstr, vector) {
tb_trace_i("%s", cstr);
}
tb_vector_exit(vector);
}
tb_exit();
return 0;
}
聲明:本文素材來源網(wǎng)絡(luò),版權(quán)歸原作者所有。如涉及作品版權(quán)問題,請(qǐng)與我聯(lián)系刪除。
------------ END ------------
1k2t0xhjns06405153243.gif (71.87 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
1k2t0xhjns06405153243.gif
昨天 07:37 上傳
●專欄《嵌入式工具》
●專欄《嵌入式開發(fā)》
●專欄《Keil教程》
●嵌入式專欄精選教程
關(guān)注公眾號(hào)回復(fù)“加群”按規(guī)則加入技術(shù)交流群,回復(fù)“1024”查看更多內(nèi)容。
點(diǎn)擊“閱讀原文”查看更多分享。 |
|