精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

用C語言實現的跨平臺開發庫TBOX

STM32嵌入式開發 ? 來源:STM32嵌入式開發 ? 2023-10-17 14:04 ? 次閱讀

1 TBOX簡介

TBOX針對各個平臺,封裝了統一的接口,簡化了各類開發過程中常用操作,使你在開發過程中,更加關注實際應用的開發,而不是把時間浪費在瑣碎的接口兼容性上面,并且充分利用了各個平臺獨有的一些特性進行優化。 這個項目的目的,是為了使C開發更加的簡單高效。 目前支持的平臺有: Windows, Macosx, Linux, Android, iOS, *BSD等等。 通過xmake支持各種編譯模式:

Release: 正式版編譯,禁用調試信息、斷言,各種檢測機制,啟用編譯器優化

Debug: 調試模式,默認啟用詳細調試信息、斷言、內存越界檢測、內存泄漏、鎖競爭分析等檢測機制

Small: 最小化編譯,默認禁用所有擴展模塊,啟用編譯器最小化優化

Micro: 針對嵌入式平臺,僅僅編譯tbox微內核,僅提供最基礎的跨平臺接口,生成庫僅64K左右(內置輕量libc接口實現)

2 特性

流庫

針對http、file、socket、data等流數據,實現統一接口進行讀寫,并且支持: 阻塞、非阻塞、異步 三種讀寫模式。 支持中間增加多層filter流進行流過濾,實現邊讀取,內部邊進行解壓、編碼轉換、加密等操作,極大的減少了內存使用。 主要提供以下模塊:

stream:通用非阻塞流,用于一般的單獨io處理,同時支持協程以實現異步傳輸。

transfer:流傳輸器,維護兩路流的傳輸。

static_stream:針對靜態數據buffer優化的靜態流,用于輕量快速的數據解析。

協程庫

快速高效的協程切換支持

提供跨平臺支持,核心切換算法參考boost,并且對其進行重寫和優化,目前支持架構:x86, x86_64, arm, arm64, mips32

提供channel協程間數據通信支持,基于生產、消費者模型

提供信號量、協程鎖支持

socket、stream都模塊原生支持協程,并且可在線程和協程間進行無縫切換

提供http、file等基于協程的簡單服務器實例,只需幾百行代碼,就可以從socket開始寫個高性能io服務器,代碼邏輯比異步回調模式更加清晰

同時提供stackfull, stackless兩種協程模式支持,stackless協程更加的輕量(每個協程只占用幾十個bytes),切換更快(會犧牲部分易用性)

支持epoll, kqueue, poll, select 和 IOCP

在協程和poller中支持同時等待和調度socket,pipe io和process

數據庫

統一并簡化數據庫操作接口,適配各種數據源,通過統一的url來自動連接打開支持的數據庫,數據的枚舉采用迭代器模型。

目前支持sqlite3以及mysql兩種關系型數據庫,也可自定義擴展使用其他關系型數據庫。

xml庫

針對xml提供DOM和SAX兩種解析模式,SAX方式采用外部迭代模式,靈活性和性能更高,并且可以選擇指定路徑,進行解析。

解析過程完全基于stream,所以是高度流化的,可以實現邊下載、邊解壓、邊轉碼、邊解析一條龍服務,使用較低的內存也可以解析大規模數據。

提供xml writer以支持對xml生成

內存庫

參考linux內核內存管理機制的實現,并對其進行各種改造和優化,所實現的TBOX獨有的一整套內存池管理架構。

調試模式下,可以輕松檢測并定位內存泄露、內存越界溢出、內存重疊覆蓋等常見內存問題,并對整體內存的使用進行了統計和簡要分析。

針對大塊數據、小塊數據、字符串數據進行了充分的利用,避免了大量外部碎片和內部碎片的產生。分配操作進行了各種優化,96%的情況下,效率都是在O(1)。

容器庫

提供哈希、鏈表、數組、隊列、堆棧、最小最大堆等常用容器。

支持各種常用成員類型,在原有的容器期初上,其成員類型還可以完全自定義擴展。

所有容器都支持迭代器操作。

大部分容器都可以支持基于stream的序列化和反序列化操作。

算法庫

提供各種排序算法:冒泡排序、堆排序、快速排序、插入排序。

提供各種查找算法:線性遍歷、二分法搜索。

提供各種遍歷、刪除、統計算法。

以迭代器為接口,實現算法和容器的分離,類似stl,但是c實現的,更加輕量。

網絡

實現http客戶端模塊

實現cookies

實現dns解析與緩存

實現ssl(支持openssl, polarssl, mbedtls)

支持ipv4、ipv6

支持通過協程實現異步模式

數學運算庫

提供各種精度的定點運算支持

提供隨機數生成器

libc庫

libc的一個輕量級實現,完全跨平臺,并且針對不同架構進行了優化。

支持大部分字符串、寬字符串操作。

擴展字符串、寬字符串的各種大小寫不敏感操作接口

擴展memset_u16、memset_u32等接口,并對其進行高度優化,尤其適合圖形渲染程序

libm庫

libm部分接口的一個輕量級實現,以及對常用系統接口的封裝。(目前只實現了部分,之后有時間會完全實現掉)

擴展部分常用接口,增加對sqrt、log2等常用函數的整數版本計算,進行高度優化,不涉及浮點運算,適合嵌入式環境使用。

object庫

輕量級類apple的CoreFoundation庫,支持object、dictionary、array、string、number、date、data等常用對象,并且可以方便擴展自定義對象的序列化。

支持對xml、json、binary以及apple的plist(xplist/bplist)格式序列化和反序列化。并且實現自有的binary序列化格式, 針對明文進行了簡單的加密,在不影響性能的前提下,序列化后的大小比bplist節省30%。

平臺庫

提供file、directory、socket、thread、time等常用系統接口

提供atomic、atomic64接口

提供高精度、低精度定時器

提供高性能的線程池操作

提供event、mutex、semaphore、spinlock等事件、互斥、信號量、自旋鎖操作

提供獲取函數堆棧信息的接口,方便調試和錯誤定位

提供跨平臺動態庫加載接口(如果系統支持的話)

提供io輪詢器,針對epoll, poll, select, kqueue進行跨平臺封裝

提供跨平臺上下文切換接口,主要用于協程實現,切換效率非常高

壓縮庫

支持zlib/zlibraw/gzip的壓縮與解壓(需要第三方zlib庫支持)。

字符編碼庫

支持utf8、utf16、gbk、gb2312、uc2、uc4 之間的互相轉碼,并且支持大小端格式。

實用工具庫

實現base64/32編解碼

實現crc32、adler32、md5、sha1等常用hash算法

實現日志輸出、斷言等輔助調試工具

實現url編解碼

實現位操作相關接口,支持各種數據格式的解析,可以對8bits、16bits、32bits、64bits、float、double以及任意bits的字段進行解析操作,并且同時支持大端、小端和本地端模式,并針對部分操作進行了優化,像static_stream、stream都有相關接口對其進行了封裝,方便在流上進行快速數據解析。

實現swap16、swap32、swap64等位交換操作,并針對各個平臺進行了優化。

實現一些高級的位處理接口,例如:位0的快速統計、前導0和前導1的快速位計數、后導01的快速位計數

實現單例模塊,可以對靜態對象、實例對象進行快速的單例封裝,實現全局線程安全

實現option模塊,對命令行參數進行解析,提供快速方便的命令行選項建立和解析操作,對于寫終端程序還是很有幫助的

正則表達式庫

支持匹配和替換操作

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

使用pcre, pcre2和posix正則庫

3一些使用tbox的項目:

gbox

vm86

xmake

itrace

更多項目

4 編譯

請先安裝: xmake


# 默認直接編譯當前主機平臺
$ cd ./tbox
$ xmake


# 編譯mingw平臺
$ cd ./tbox
$ xmake f -p mingw --sdk=/home/mingwsdk
$ xmake


# 編譯iphoneos平臺
$ cd ./tbox
$ xmake f -p iphoneos
$ xmake


# 編譯android平臺
$ 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;
}
審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11232

    瀏覽量

    208952
  • WINDOWS
    +關注

    關注

    3

    文章

    3526

    瀏覽量

    88449
  • C語言
    +關注

    關注

    180

    文章

    7601

    瀏覽量

    136251
  • TBOX
    +關注

    關注

    0

    文章

    16

    瀏覽量

    8157

原文標題:用C語言實現的跨平臺開發庫TBOX

文章出處:【微信號:c-stm32,微信公眾號:STM32嵌入式開發】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    C語言實現:見縫插針游戲!代碼思路+源碼分享

    見縫插圓我們昨天已經C語言實現了,今天將實現一個見縫插針的游戲。
    發表于 12-05 11:02 ?704次閱讀

    PIC單片機C語言學習教程

    C 語言開發單片機系統軟件最大的好處是編寫代碼效率高、軟件調試直觀、維護升級方便、代碼的重復利用率高、便于
    發表于 08-04 16:19

    JAVA語言為什么能平臺

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

    如何用C語言實現OOP編程?

    老大看到OOP編程很好,就讓我學,怎么C語言實現OOP編程的,請大俠指點
    發表于 10-30 03:45

    嵌入式平臺C語言實現二階濾波器的方法

    最近想從嵌入式平臺C語言實現二階濾波器,于是先從Matlab上驗證二階濾波器公式,再編寫C語言
    發表于 12-15 09:12

    C語言實現DES算法

    C語言實現DES算法 本DES算法,使用了效率很高的C完成。目前,國內知名企業的POS終端中,單DES算法,均是采用這個函數完成。函數經本站驗證過,可以
    發表于 01-16 10:09 ?3263次閱讀

    C語言實現FFT算法

    C語言實現FFT算法 /*****************fft programe*********************/#include "typedef.h" #include "math.h" struct
    發表于 10-30 13:39 ?6335次閱讀

    DSP算法的c語言實現

    DSP算法的c語言實現,又需要的朋友下來看看。
    發表于 05-09 10:59 ?0次下載

    C語言實現數字濾波

    C語言實現數字濾波 。對數值進行精度調整,下面給出幾種常用的數字濾波方法的C語言函數,這些函數有一定的通用性,
    發表于 07-26 15:44 ?10次下載

    PID控制算法的C語言實現(完整版)

    PID控制算法的C語言實現一 PID算法原理
    發表于 11-05 15:45 ?0次下載

    C++語言實現火車排序功能

    C++語言實現火車排序功能
    發表于 01-05 11:27 ?2次下載

    4個重要算法C語言實現源代碼

    4個重要算法C語言實現源代碼
    發表于 06-10 08:00 ?12次下載

    累加校驗和C語言實現

    累加校驗和C語言實現
    發表于 11-29 18:06 ?10次下載
    累加校驗和<b class='flag-5'>C</b><b class='flag-5'>語言實現</b>

    怎么C語言實現多態

    這里我想主要介紹下在C語言中是如何實現的面向對象。知道了C語言實現面向對象的方式,我們再聯想下,C
    的頭像 發表于 10-12 09:12 ?2016次閱讀

    使用C語言實現的CRC計算單元的例子

    使用C語言實現的CRC計算單元的例子
    的頭像 發表于 05-16 16:16 ?869次閱讀