【物联网智能网关-16】成功移植SQLite STM32 NET MF平台

本文介绍了如何在.NET Micro Framework系统上移植SQLite V2x数据库,以解决系统无数据库支持的问题。作者经过一系列研究和测试,成功将SQLite V2x移植到.NET Micro Framework,实现了约130K的release版本,并提供了C#接口封装,简化了嵌入式应用中的数据库操作。
摘要由CSDN通过智能技术生成
               

前言

.NET Micro Framework系统官方代码是不支持任何数据库的,这对一些具有用户管理的Web Server、RFID数据采集和复杂的手持机应用来说是非常不方便的。

很早就知道了SQLite,但是一直没有深入研究,随着目前移植的.NETMicro Framework系统越来越成熟,用户对数据库支持的呼声也越来越高,迫切需要一个数据库平台了。考虑到移植难度和代码大小,最初原打算把YFIOs系统中的内存YFIODB数据库修改为文件版本,这样移植是最快的,代码也比较小,但是缺点是比较明显的,不支持Select等相关的SQL语句,这对熟悉数据库应用的用户来说,还需要重新了解数据库的操作方法,还不如用文件来实现了。

在这个过程中,也了解了其它的嵌入式数据库,如FastDB、Berkeley DB等开源嵌入式数据库,但其用户群和知名度远比不上SQLite,考虑到物联网中间件本身就是一个框架和平台,供用户二次开发,用户越熟悉的技术就应该优先选择。

确定了要移植SQLite数据库,但是又引出一个问题,是移植SQLite最新的版本?还是以前相对代码较小的版本?这着实让我踌躇了良久。

SQLite V2x和V3x比较

                                    <

项目

V2.8.17

V3.7.15

API接口个数

44

207

源文件个数

44

89

源代码字节数

1.32M

4.0M

Win32  dll库大小

209K

591K

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
qp官网下载qpc,移植stm32f103单片机,在正点原子战舰V3开发板上实验成功 qp搭建步骤重要提示: #define RED_QUEUE_LEN 3 #define BLUE_QUEUE_LEN 3 #define TACKER_EVENT_POOL_LEN (RED_QUEUE_LEN + BLUE_QUEUE_LEN) static QEvt const * l_redQueueSto[RED_QUEUE_LEN]; //事件队列 static QEvt const * l_blueQueueSto[BLUE_QUEUE_LEN]; //事件队列 static LedEvt LedEvtPoolSto[TACKER_EVENT_POOL_LEN]; //事件池 static QSubscrList SubSrcSto[MAX_PUB_SIG]; //订阅列表 typedef struct LedEvtTag LedEvt; //定义事件结构 struct LedEvtTag{ QEvt super_; uint16_t uiParaH; uint16_t uiParaL; }; //定义信号枚举 enum LedSignals{ START_SIG = Q_USER_SIG, KEY0_SIG, KEY1_SIG, KEY2_SIG, KEYUP_SIG, ALL_OFF_SIG, ONLY_BULE_SIG, ONLY_RED_SIG, ALL_ON_SIG, MAX_PUB_SIG }; void PublishLedEvt(uint16_t uiSig, uint16_t uiParaH, uint16_t uiParaL) //发布事件函数 { LedEvt* peTacker; peTacker = Q_NEW(LedEvt, uiSig); peTacker->uiParaH = uiParaH; peTacker->uiParaL = uiParaL; QF_publish_((QEvt*)peTacker); } QF_init(); //时间事件列表、活动对象查找表、优先级集合 QF_psInit(SubSrcSto, Q_DIM(SubSrcSto)); //初始化事件池 QF_poolInit(LedEvtPoolSto,sizeof(LedEvtPoolSto),sizeof(LedEvtPoolSto[0])); RedLed_Start(uiPrio++, l_redQueueSto, Q_DIM(l_redQueueSto), 0, 0); //建立活动对象 BlueLed_Start(uiPrio++, l_blueQueueSto, Q_DIM(l_blueQueueSto), 0, 0); /////////////////////////////////////////////////// typedef struct RedActiveTag RedActive; //构建一个活动对象活动类型 struct RedActiveTag{ QActive super_; volatile uint16_t RedLedStateNow; uint16_t a; uint16_t b; }; extern RedActive RedLed; RedActive RedLed; void RedLed_Start(uint_fast8_t prio, QEvt const *qSto[], uint_fast16_t qLen, void *stkSto, uint_fast16_t stkSize) { RedLed_Ctor(&RedLed;); QActive_start_((QActive*)&RedLed;, prio, qSto, qLen, stkSto, stkSize, (QEvt const *)0); //创立活动对象的线程并提醒 QF 开始管理活动对象 } void RedLed_Ctor(RedActive* me) { QActive_ctor(&me;->super_, (QStateHandler)RedLed_Initial); //初始化状态机基础类(成员 super) me->RedLedStateNow = 0; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值