久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3154|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

微信寵物屋v2.3源碼與分析

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
轉(zhuǎn)  微信寵物屋v2.3源碼分析


源碼分析
--132654 整理
如果說(shuō)之前發(fā)的帖子都是水貼,這一炮,必須是干貨!!
額、大神可能又是看30分鐘就能看懂,我是足足看了3個(gè)下午。。。個(gè)人笨

寵物屋的源代碼這里分析的是STM32底板的V2.3版本?梢栽诒咎苯酉螺d附件。
硬件原理圖什么的,就請(qǐng)大家去自行搜索下載吧。下載的時(shí)候注意看自己板子的版本號(hào),下載對(duì)應(yīng)的原理圖。

像代碼中那些HAL庫(kù),我就不分析了,硬件不一樣的HAL庫(kù)中的函數(shù)需要改幾個(gè)引腳號(hào)。
有興趣的可以自己寫這些HAL,等自己添加了外設(shè)的時(shí)候,要寫自己的外設(shè)的HAL添加到工程中。
這里主要分析讓人頭疼的Protocol。
順便分析程序的運(yùn)行流程。

擦,我發(fā)現(xiàn)在這里根本沒(méi)辦法一一細(xì)說(shuō)。。。
算了我發(fā)幾個(gè)圖給大家意淫一下,具體的看代碼吧

這個(gè)程序還是有幾個(gè)小bug的,而且操作都是用的全局變量、全局?jǐn)?shù)據(jù)結(jié)構(gòu)體。
加之一些memcpy、memcmp等函數(shù),各種報(bào)文的結(jié)構(gòu)體,把大伙嚇到了!疽苍S只是把我這種菜雞嚇到了。!
試著捋一捋就能捋順了。
大家多用 大家多用"Ctrl+F中的 中的MarkAl l",和 ,和"在整個(gè)工程中搜索 在整個(gè)工程中搜索"來(lái)看代碼。那只筆寫寫畫畫。 來(lái)看代碼。那只筆寫寫畫畫。

推薦大家先搞清楚兩個(gè)全局變量的意思,他們分別作為標(biāo)志位:
uint8_t p0Flag = 0;  //WiFi控制設(shè)備命令,已經(jīng)下達(dá)的標(biāo)志

/*重發(fā)機(jī)制結(jié)構(gòu)體
    uint32_t        SendTime;      //重發(fā)時(shí)記錄的時(shí)間戳
    uint8_t                        SendNum;       //重發(fā)次數(shù)
    uint8_t                        Flag;          //1、作為需要等待WiFi應(yīng)答的標(biāo)志!。。。
                                               //2、這個(gè)標(biāo)志位也限制MCU上報(bào)數(shù)據(jù)!。。!
                                               //   只要此標(biāo)志置位,暫停上報(bào)
                                               //   復(fù)位標(biāo)志,則重新允許上報(bào)
    uint16_t        ResendBufLen;  //長(zhǎng)度
    uint8_t                        Cmd_Buff[Max_UartBuf];     //重發(fā)數(shù)據(jù)緩沖區(qū)
*/
Pro_Wait_AckTypeDef         Wait_AckStruct;
還有兩個(gè)全局結(jié)構(gòu)體:
WirteTypeDef_t   WirteTypeDef;   //WiFi寫來(lái)的數(shù)據(jù)
ReadTypeDef_t    ReadTypeDef;    //WiFi讀走的數(shù)據(jù)
這些個(gè)搞清楚了,再看代碼就不亂了。

再來(lái)說(shuō)說(shuō)協(xié)議:
    MCU回復(fù)WiFi模組要用的 通用協(xié)議幀:
    4.2 WiFi模組與設(shè)備MCU的心跳
    4.5 WiFi模組向MCU匯報(bào)工作狀態(tài)
    4.6 WiFi模組請(qǐng)求重啟MCU
    4.7 WiFi模組通知MCU得到非法消息
    4.10 WiFi模組控制更改MCU狀態(tài)
    都用通用協(xié)議幀來(lái)回復(fù)

    然而
    4.1 WiFi請(qǐng)求MCU系統(tǒng)信息,MCU要回復(fù)系統(tǒng)信息
    4.3 MCU通知WiFi進(jìn)入配網(wǎng),WiFi發(fā)Ack
    4.4 MCU通知WiFi重啟,WiFi發(fā)Ack
    4.8 WiFi讀取MCU狀態(tài),MCU回復(fù)中要有設(shè)備信息和ActionBit位
    4.9 MCU主動(dòng)上報(bào),WiFi發(fā)應(yīng)答Ack
    是需要WiFi回復(fù)MCU的!

大致的流暢:
1、按鍵處理
2、串口信息處理
3、如果接收到WiFi模組控制MCU的命令,則更新MCU狀態(tài),并立即上報(bào)MCU狀態(tài)
4、每隔1s,采集一次MCU狀態(tài)

具體來(lái)說(shuō)明第2條,串口信息處理:
u8 GizWits_MessageHandle(u8 * Message_Buf, u8 Length_buf)
這里如果收到的是4.10,WiFi控制MCU的命令,則把命令的數(shù)據(jù)內(nèi)容傳給Message_Buf
進(jìn)來(lái)之后,抓取一包數(shù)據(jù)。
當(dāng)WiFi的應(yīng)答非法,或沒(méi)收到WiFi應(yīng)答時(shí),啟動(dòng)重發(fā)機(jī)制。但這里是Bug。具體見(jiàn)代碼
抓取數(shù)據(jù)包成功,
判斷校驗(yàn)位,校驗(yàn)失敗直接扔掉數(shù)據(jù)幀。
判斷收到WiFi模組的Ack信息,是不是正確的Ack
下面是重頭戲了,根據(jù)收到的命令碼進(jìn)行對(duì)應(yīng)的操作:
其他的略過(guò),只說(shuō)接收到4.8和4.10時(shí)的情況。
//4.8  WiFi讀取MCU. Cmd=0x03
//4.10 WiFi控制MCU. Cmd=0x03
         case Pro_W2D_P0_Cmd:   //就是這里
         {
             switch(UART_HandleStruct.Message_Buf[sizeof(Pro_HeadPartTypeDef)])     //標(biāo)準(zhǔn)報(bào)頭后緊跟一個(gè)action(1B)
             {
                    //4.10 WiFi控制MCU. Cmd=0x03 ActionBit=0x01
                     case P0_W2D_Control_Devce_Action:
                     {
                         Pro_W2D_CommonCmdHandle();  //回復(fù)通用協(xié)議幀
                        //儲(chǔ)存ActionBit之后的信息到Message_Buf,最終傳給WriteTypeDef來(lái)更改MCU設(shè)備狀態(tài)
                         memcpy(Message_Buf, UART_HandleStruct.Message_Buf+sizeof(Pro_HeadPartP0CmdTypeDef), Length_buf);
                         p0Flag = 1;   //main()里,依靠此標(biāo)志,和WriteTypeDef來(lái)控制更改設(shè)備狀態(tài)
                         break;
                         }
                        //4.8 WiFi讀取MCU. Cmd=0x03 ActionBit=0x02
                         case P0_W2D_ReadDevStatus_Action:
                         Pro_W2D_ReadDevStatusHandle();
                         break;
                         default:
                             break;
             }
    }
         break;

廢話不多說(shuō),上幾張圖,大家看代碼吧。

其他的都不用動(dòng), 其他的都不用動(dòng),可復(fù)用性還是超高的!但是可讀性太差、還有Bug作為開源的代碼。。。咳咳、跑題了。

微信寵物屋原碼.rar

593.87 KB, 下載次數(shù): 17, 下載積分: 黑幣 -5

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:213678 發(fā)表于 2018-7-19 15:59 | 只看該作者
感謝~~雖然還沒(méi)看,但是很感興趣
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 91久久精品一区二区二区 | 国产成人一区二区三区精 | 玖玖玖av | 蜜桃一区二区三区 | 国产精品1区2区3区 一区中文字幕 | 一级做a爰片久久毛片 | 日韩福利在线 | 99热首页| 日本一二区视频 | 欧美黄 片免费观看 | 91精品国产91久久综合桃花 | 国产三级大片 | 懂色中文一区二区三区在线视频 | 亚洲欧美高清 | 亚洲日日 | 9999视频 | aaa一区| 91精品久久久久久久 | 欧美白人做受xxxx视频 | 国产成人精品久久二区二区 | 999精品视频 | 国产情品 | 伊人免费网 | 国产成人精品一区二区在线 | 国产国语精品 | 激情网站在线观看 | 久久午夜视频 | 91免费版在线 | wwww.8888久久爱站网 | 紧缚调教一区二区三区视频 | 成人av高清在线观看 | 日韩成人av在线 | 日本三级在线视频 | 久久久日韩精品一区二区三区 | 性欧美精品一区二区三区在线播放 | 亚洲高清视频在线观看 | 99精品99| 亚洲一区二区三区在线视频 | 一区二区三区在线看 | 国产一区二区三区色淫影院 | 午夜爽爽爽男女免费观看 |