衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

用C語(yǔ)言實(shí)現(xiàn)的跨平臺(tái)開(kāi)發(fā)庫(kù)TBOX

STM32嵌入式開(kāi)發(fā) ? 來(lái)源:STM32嵌入式開(kāi)發(fā) ? 2023-10-17 14:04 ? 次閱讀

1 TBOX簡(jiǎn)介

TBOX針對(duì)各個(gè)平臺(tái),封裝了統(tǒng)一的接口,簡(jiǎn)化了各類開(kāi)發(fā)過(guò)程中常用操作,使你在開(kāi)發(fā)過(guò)程中,更加關(guān)注實(shí)際應(yīng)用的開(kāi)發(fā),而不是把時(shí)間浪費(fèi)在瑣碎的接口兼容性上面,并且充分利用了各個(gè)平臺(tái)獨(dú)有的一些特性進(jìn)行優(yōu)化。 這個(gè)項(xiàng)目的目的,是為了使C開(kāi)發(fā)更加的簡(jiǎn)單高效。 目前支持的平臺(tái)有: Windows, Macosx, Linux, Android, iOS, *BSD等等。 通過(guò)xmake支持各種編譯模式:

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))

2 特性

流庫(kù)

針對(duì)http、file、socket、data等流數(shù)據(jù),實(shí)現(xiàn)統(tǒng)一接口進(jìn)行讀寫(xiě),并且支持: 阻塞、非阻塞、異步 三種讀寫(xiě)模式。 支持中間增加多層filter流進(jìn)行流過(guò)濾,實(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)行重寫(xiě)和優(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)行無(wú)縫切換

提供http、file等基于協(xié)程的簡(jiǎn)單服務(wù)器實(shí)例,只需幾百行代碼,就可以從socket開(kāi)始寫(xiě)個(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ù)源,通過(guò)統(tǒng)一的url來(lái)自動(dòng)連接打開(kāi)支持的數(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)行解析。

解析過(guò)程完全基于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)存重疊覆蓋等常見(jiàn)內(nèi)存問(wèn)題,并對(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

支持通過(guò)協(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ò)展字符串、寬字符串的各種大小寫(xiě)不敏感操作接口

擴(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ì)于寫(xiě)終端程序還是很有幫助的

正則表達(dá)式庫(kù)

支持匹配和替換操作

支持全局、多行、大小寫(xiě)不敏感等模式

使用pcre, pcre2和posix正則庫(kù)

3一些使用tbox的項(xiàng)目:

gbox

vm86

xmake

itrace

更多項(xiàng)目

4 編譯

請(qǐng)先安裝: xmake


# 默認(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

5 例子


#include "tbox/tbox.h"


int main(int argc, char** argv)
{
    // init tbox
    if (!tb_init(tb_null, tb_null)) return 0;


    // trace
    tb_trace_i("hello tbox");


    // init vector
    tb_vector_ref_t vector = tb_vector_init(0, tb_element_str(tb_true));
    if (vector)
    {
        // insert item
        tb_vector_insert_tail(vector, "hello");
        tb_vector_insert_tail(vector, "tbox");


        // dump all items
        tb_for_all (tb_char_t const*, cstr, vector)
        {
            // trace
            tb_trace_i("%s", cstr);
        }


        // exit vector
        tb_vector_exit(vector);
    }


    // init stream
    tb_stream_ref_t stream = tb_stream_init_from_url("http://www.xxx.com/file.txt");
    if (stream)
    {
        // open stream
        if (tb_stream_open(stream))
        {
            // read line
            tb_long_t size = 0;
            tb_char_t line[TB_STREAM_BLOCK_MAXN];
            while ((size = tb_stream_bread_line(stream, line, sizeof(line))) >= 0)
            {
                // trace
                tb_trace_i("line: %s", line);
            }
        }


        // exit stream
        tb_stream_exit(stream);
    }


    // wait
    tb_getchar();


    // exit tbox
    tb_exit();
    return 0;
}
審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11345

    瀏覽量

    210383
  • WINDOWS
    +關(guān)注

    關(guān)注

    4

    文章

    3569

    瀏覽量

    89292
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7614

    瀏覽量

    137702
  • TBOX
    +關(guān)注

    關(guān)注

    0

    文章

    17

    瀏覽量

    8212

原文標(biāo)題:用C語(yǔ)言實(shí)現(xiàn)的跨平臺(tái)開(kāi)發(fā)庫(kù)TBOX

文章出處:【微信號(hào):c-stm32,微信公眾號(hào):STM32嵌入式開(kāi)發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C語(yǔ)言實(shí)現(xiàn):見(jiàn)縫插針游戲!代碼思路+源碼分享

    見(jiàn)縫插圓我們昨天已經(jīng)C語(yǔ)言實(shí)現(xiàn)了,今天將實(shí)現(xiàn)一個(gè)見(jiàn)縫插針的游戲。
    發(fā)表于 12-05 11:02 ?788次閱讀

    AKI語(yǔ)言調(diào)用庫(kù)神助攻C/C++代碼遷移至HarmonyOS NEXT

    語(yǔ)言調(diào)用,成為開(kāi)發(fā)者和廠商面臨的重要挑戰(zhàn)。為解決這一痛點(diǎn),一款名為AKI (Alpha Kernel Interacting)的開(kāi)源三方庫(kù)應(yīng)運(yùn)而生,它通過(guò)高效封裝
    發(fā)表于 01-02 17:08

    PIC單片機(jī)C語(yǔ)言學(xué)習(xí)教程

    C 語(yǔ)言來(lái)開(kāi)發(fā)單片機(jī)系統(tǒng)軟件最大的好處是編寫(xiě)代碼效率高、軟件調(diào)試直觀、維護(hù)升級(jí)方便、代碼的重復(fù)利用率高、便于
    發(fā)表于 08-04 16:19

    JAVA語(yǔ)言為什么能平臺(tái)

    無(wú)論你C# 還是VB.NET 最后的意思表達(dá)都是一樣的, 只不過(guò)機(jī)器在中做了翻譯的過(guò)程; 中間有N 多專有名詞反正都是通過(guò).net Framework 所謂的虛擬機(jī)。JAVA語(yǔ)言為什么能
    發(fā)表于 11-27 17:06

    如何用C語(yǔ)言實(shí)現(xiàn)OOP編程?

    老大看到OOP編程很好,就讓我學(xué),怎么C語(yǔ)言實(shí)現(xiàn)OOP編程的,請(qǐng)大俠指點(diǎn)
    發(fā)表于 10-30 03:45

    嵌入式平臺(tái)C語(yǔ)言實(shí)現(xiàn)二階濾波器的方法

    最近想從嵌入式平臺(tái)C語(yǔ)言實(shí)現(xiàn)二階濾波器,于是先從Matlab上驗(yàn)證二階濾波器公式,再編寫(xiě)C語(yǔ)言
    發(fā)表于 12-15 09:12

    C語(yǔ)言實(shí)現(xiàn)DES算法

    C語(yǔ)言實(shí)現(xiàn)DES算法 本DES算法,使用了效率很高的C完成。目前,國(guó)內(nèi)知名企業(yè)的POS終端中,單DES算法,均是采用這個(gè)函數(shù)完成。函數(shù)經(jīng)本站驗(yàn)證過(guò),可以
    發(fā)表于 01-16 10:09 ?3277次閱讀

    C語(yǔ)言實(shí)現(xiàn)FFT算法

    C語(yǔ)言實(shí)現(xiàn)FFT算法 /*****************fft programe*********************/#include "typedef.h" #include "math.h" struct
    發(fā)表于 10-30 13:39 ?6359次閱讀

    DSP算法的c語(yǔ)言實(shí)現(xiàn)

    DSP算法的c語(yǔ)言實(shí)現(xiàn),又需要的朋友下來(lái)看看。
    發(fā)表于 05-09 10:59 ?0次下載

    C語(yǔ)言實(shí)現(xiàn)數(shù)字濾波

    C語(yǔ)言實(shí)現(xiàn)數(shù)字濾波 。對(duì)數(shù)值進(jìn)行精度調(diào)整,下面給出幾種常用的數(shù)字濾波方法的C語(yǔ)言函數(shù),這些函數(shù)有一定的通用性,
    發(fā)表于 07-26 15:44 ?10次下載

    PID控制算法的C語(yǔ)言實(shí)現(xiàn)(完整版)

    PID控制算法的C語(yǔ)言實(shí)現(xiàn)一 PID算法原理
    發(fā)表于 11-05 15:45 ?0次下載

    4個(gè)重要算法C語(yǔ)言實(shí)現(xiàn)源代碼

    4個(gè)重要算法C語(yǔ)言實(shí)現(xiàn)源代碼
    發(fā)表于 06-10 08:00 ?12次下載

    累加校驗(yàn)和C語(yǔ)言實(shí)現(xiàn)

    累加校驗(yàn)和C語(yǔ)言實(shí)現(xiàn)
    發(fā)表于 11-29 18:06 ?10次下載
    累加校驗(yàn)和<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言實(shí)現(xiàn)</b>

    怎么C語(yǔ)言實(shí)現(xiàn)多態(tài)

    這里我想主要介紹下在C語(yǔ)言中是如何實(shí)現(xiàn)的面向?qū)ο蟆V懒?b class='flag-5'>C語(yǔ)言實(shí)現(xiàn)面向?qū)ο蟮姆绞剑覀冊(cè)俾?lián)想下,C
    的頭像 發(fā)表于 10-12 09:12 ?2103次閱讀

    C語(yǔ)言實(shí)現(xiàn)Web參數(shù)傳遞

    電子發(fā)燒友網(wǎng)站提供《C語(yǔ)言實(shí)現(xiàn)Web參數(shù)傳遞.docx》資料免費(fèi)下載
    發(fā)表于 03-24 09:14 ?2次下載
    百家乐官网如何必胜| 皇冠网热门小说| 红桃K百家乐娱乐城| 永利高百家乐进不去| 长春百家乐官网的玩法技巧和规则 | 扑克百家乐官网麻将筹码防伪| 百家乐官网赌博是否违法| 百家乐官网赌的技巧| 明升网站| 大发888在线网址| 全讯网qtqnet好玩| 沙龙百家乐赌场娱乐网规则 | 百家乐官网娱乐分析软件v| 百家乐官网荷官培训| 百家乐官网有方法赚反水| 今晚六合彩开奖结果| 太阳城伞| 至尊百家乐于波| 宝马会百家乐娱乐城| 百家乐客户端软件| 网络百家乐免费试玩| 做生意门朝哪个方向好| 百家乐官网娱乐分析软件v| 什么叫百家乐官网的玩法技巧和规则| 百家乐官网破解软件真的有用吗| 百家乐保单机作弊| 温州市百家乐官网鞋业| 澳门百家乐官网打法百家乐官网破解方法 | 大发888官方备用网址| 百家乐和的打法| 百家乐赌博筹码大不大| 百家乐路子| 百家乐任你博娱乐平台| 百家乐出老千视频| 百家乐AG| 百家乐官网五湖四海赌场娱乐网规则| 百家乐官网翻天主题曲| 百家乐官网网上赌博网| 澳门百家乐官网游戏说明| 百家乐官网开发软件| 玩百家乐官网澳门368娱乐城|