欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: NB_IOT SDK包移植說明文檔下載-BC95-B8 [打印本頁]

作者: wuaxiang    時(shí)間: 2018-11-22 11:21
標(biāo)題: NB_IOT SDK包移植說明文檔下載-BC95-B8
NBIOT SDK包移植說明文檔
1.      移植背景
開發(fā)語言:C語言
硬件平臺:STM32F10X
開發(fā)環(huán)境:KEIL MDK5.23
2.      工程目錄
可在該目錄下的main.c下實(shí)現(xiàn)NBIOT的例程
在目錄下實(shí)現(xiàn)和模組進(jìn)行通信的驅(qū)動(dòng),這里實(shí)現(xiàn)了串口驅(qū)動(dòng)
實(shí)現(xiàn)通信模組的驅(qū)動(dòng),這里實(shí)現(xiàn)了esp8266的驅(qū)動(dòng)
該目錄下實(shí)現(xiàn)各種傳感器的驅(qū)動(dòng)
SDK包中JSON報(bào)文格式化的接口
SDK包中加解密功能接口,暫不支持
SDK包中Lwm2m和coap協(xié)議的具體實(shí)現(xiàn)
SDK和ONENET平臺交互的接口實(shí)現(xiàn)
和具體硬件平臺有關(guān)的底層實(shí)現(xiàn)
3.      工程設(shè)置
在Include Paths處添加頭文件所在的路徑,該路徑為相對于工程所在目錄的相對路徑
在Preprocessor Symbols處添加條件編譯選項(xiàng),條件編譯選項(xiàng)如下:
注:SDK包原版支持win和linux操作系統(tǒng),STM32F10x平臺本身沒有操作系統(tǒng),因此需要選擇NO_OS,同時(shí)由于STM32屬于小端系統(tǒng),因此需要選擇LITTLE_ENDIAN,太多的打印會(huì)導(dǎo)致系統(tǒng)變慢,擾亂協(xié)議棧的時(shí)序,從而出現(xiàn)各種問題,因此不建議打開所有的打印。

4.      初始化SDK運(yùn)行環(huán)境
與SDK運(yùn)行環(huán)境相關(guān)的全局變量如下圖所示,分別是統(tǒng)一資源定位標(biāo)識符URI,NBIOT服務(wù)器地址serv_addr,以及SDK在服務(wù)器端進(jìn)行注冊時(shí)候需要用到的鑒權(quán)碼auth_code和斷點(diǎn)名endpoint_name。
在該函數(shù)中,初始化一切和SDK包運(yùn)行有關(guān)的軟硬件資源,包括內(nèi)存管理算法初始化、系統(tǒng)時(shí)鐘初始化、打印串口初始化、模組通信串口初始化和模組初始化。
該函數(shù)中,需要對當(dāng)前SDK包的運(yùn)行環(huán)境進(jìn)行一些清理的工作,包括退出當(dāng)前的網(wǎng)絡(luò),回收內(nèi)存資源等動(dòng)作。
5.      Socket接口的實(shí)現(xiàn)
原SDK包使用socket接口,現(xiàn)在由于使用模組且沒有TCP/IP協(xié)議棧,因此SDK不識別任何和socket有關(guān)的數(shù)據(jù)結(jié)構(gòu)和函數(shù)接口,需要對這些內(nèi)容進(jìn)行移植。
{
   SOCKET sock;
};
      在這里,將SOCKET數(shù)據(jù)類型修改int型,修改后如下所示:
struct nbiot_socket_t
{
int sock;
};
{
struct sockaddr_in addr;
};
在這里將struct sockaddr_in addr 修改為char型數(shù)組,用來儲存字符串形式的IP地址,修改后如下所示:
struct nbiot_sockaddr_t
{
char addr[20];
};
原SDK使用該函數(shù),為sock結(jié)構(gòu)體的sock成員創(chuàng)建了一個(gè)實(shí)體,上下文中需要使用到該實(shí)體資源,因此該接口不需要任何的修改。
原SDK使用該函數(shù),調(diào)用socket接口關(guān)閉了udp連接,這里需要使用模組提供的AT命令實(shí)現(xiàn)udp連接的關(guān)閉。
                    const char     *addr,
                    uint16_t        port )
原SDK包使用該函數(shù),調(diào)用socket接口綁定udp服務(wù)器,并實(shí)例化了sock結(jié)構(gòu)體里的sock成員,因此需要屏蔽掉綁定的動(dòng)作,還需要對sock結(jié)構(gòu)體進(jìn)行賦值,在這里賦值為1
                       const char        *addr,
                       uint16_t           port,
                       nbiot_sockaddr_t **dest )
原SDK包使用該函數(shù),測試設(shè)備和UDP服務(wù)器之間的連通性,使用了模組后不需要該動(dòng)作,因此屏蔽掉。

6.      數(shù)據(jù)發(fā)送接口的實(shí)現(xiàn)
                    const void             *buff,
                    size_t                  size,
                    size_t                 *sent,
                    const nbiot_sockaddr_t *dest )
     原SDK包使用該函數(shù),調(diào)用SOCKET的發(fā)送接口,采用非阻塞方式將數(shù)據(jù)發(fā)送出去,在這里則直接調(diào)用模組的串口發(fā)送接口,將數(shù)據(jù)發(fā)送至模組。
7.      數(shù)據(jù)接收接口的實(shí)現(xiàn)
        void              *buff,
        size_t             size,
        size_t            *read,
        nbiot_sockaddr_t **src )
      原SDK包使用該函數(shù),調(diào)用SOCKET的接口,采用非阻塞的方式接受數(shù)據(jù),因此為了模擬非阻塞的方式,盡量不要在該函數(shù)中采用輪詢的方式來接收數(shù)據(jù),在這里設(shè)計(jì)了一個(gè)接收緩沖區(qū),該函數(shù)負(fù)責(zé)檢查接收緩存區(qū),如果有數(shù)據(jù)則提交給SDK包進(jìn)行處理,否則立即返回。
移植后的SDK包使用串口中斷的方式,以字節(jié)為單位對數(shù)據(jù)進(jìn)行接收,為了區(qū)分出數(shù)據(jù)包,ESP8266必須使用非透傳模式,同時(shí)在接收到一個(gè)完整的數(shù)據(jù)包后,將數(shù)據(jù)包放進(jìn)緩存區(qū)中,等待SDK包的處理。具體工作流程如下:首先判斷一個(gè)數(shù)據(jù)包的開始,如果是則使能接收空閑中斷;當(dāng)發(fā)生了接收空閑中斷,意味著一個(gè)完整的數(shù)據(jù)包已經(jīng)接收完成,將該數(shù)據(jù)包放進(jìn)緩沖區(qū)中。
8.      系統(tǒng)時(shí)間的實(shí)現(xiàn)
time_t 類型為long型,在原SDK包中nbiot_time函數(shù)返回的是系統(tǒng)當(dāng)前時(shí)間,單位為秒,因此使用STM32系統(tǒng)提供的RTC定時(shí)器作為系統(tǒng)滴答定時(shí)器,nbiot_time函數(shù)讀取定時(shí)器里面的值并返回。
使用了RTC定時(shí)器實(shí)現(xiàn)了ms級別的精確延時(shí)。
9.      內(nèi)存管理的實(shí)現(xiàn)
為了管理sdk運(yùn)行過程的內(nèi)存分配與釋放,抽離出以上2個(gè)接口函數(shù),便于不同環(huán)境下采用合適的內(nèi)存管理策略,現(xiàn)在暫時(shí)使用KEIL 微庫提供的malloc函數(shù)和free函數(shù),需要注意以下兩點(diǎn):

10. 其它
在原SDK包中,使用了LINUX操作系統(tǒng),默認(rèn)枚舉類型成員的長度為系統(tǒng)的字長,但在嵌入式系統(tǒng)中,為了節(jié)省空間,只要枚舉類型成員的值不超過一個(gè)字節(jié),則不會(huì)分配兩個(gè)字節(jié)的空間。為了解決該問題,需要修改coap_content_type_t結(jié)構(gòu)體,否則SDK包發(fā)送的數(shù)據(jù)會(huì)被服務(wù)器扔掉,修改過程的如下所示:
在該結(jié)構(gòu)體的最后,添加一行,xxx=0xFFFF,則keil編譯器會(huì)為該結(jié)構(gòu)體成員分配兩個(gè)字節(jié)的存儲空間。


完整的Word格式文檔51黑下載地址:
NB-iot SDK包移植文檔-BC95-B8.rar (245.77 KB, 下載次數(shù): 47)


作者: middin    時(shí)間: 2019-6-18 09:13
謝謝分享
最近正在搞這一塊
作者: zhuiqiuqust    時(shí)間: 2019-7-3 19:40
就一個(gè)word,坑人的




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1