亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3617|回復: 1
打印 上一主題 下一主題
收起左側

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

[復制鏈接]
跳轉到指定樓層
樓主
轉  微信寵物屋v2.3源碼分析


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

寵物屋的源代碼這里分析的是STM32底板的V2.3版本。可以在本帖直接下載附件。
硬件原理圖什么的,就請大家去自行搜索下載吧。下載的時候注意看自己板子的版本號,下載對應的原理圖。

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

擦,我發現在這里根本沒辦法一一細說。。。
算了我發幾個圖給大家意淫一下,具體的看代碼吧

這個程序還是有幾個小bug的,而且操作都是用的全局變量、全局數據結構體。
加之一些memcpy、memcmp等函數,各種報文的結構體,把大伙嚇到了。【也許只是把我這種菜雞嚇到了。。】
試著捋一捋就能捋順了。
大家多用 大家多用"Ctrl+F中的 中的MarkAl l",和 ,和"在整個工程中搜索 在整個工程中搜索"來看代碼。那只筆寫寫畫畫。 來看代碼。那只筆寫寫畫畫。

推薦大家先搞清楚兩個全局變量的意思,他們分別作為標志位:
uint8_t p0Flag = 0;  //WiFi控制設備命令,已經下達的標志

/*重發機制結構體
    uint32_t        SendTime;      //重發時記錄的時間戳
    uint8_t                        SendNum;       //重發次數
    uint8_t                        Flag;          //1、作為需要等待WiFi應答的標志!!!!!
                                               //2、這個標志位也限制MCU上報數據!!!!!
                                               //   只要此標志置位,暫停上報
                                               //   復位標志,則重新允許上報
    uint16_t        ResendBufLen;  //長度
    uint8_t                        Cmd_Buff[Max_UartBuf];     //重發數據緩沖區
*/
Pro_Wait_AckTypeDef         Wait_AckStruct;
還有兩個全局結構體:
WirteTypeDef_t   WirteTypeDef;   //WiFi寫來的數據
ReadTypeDef_t    ReadTypeDef;    //WiFi讀走的數據
這些個搞清楚了,再看代碼就不亂了。

再來說說協議:
    MCU回復WiFi模組要用的 通用協議幀:
    4.2 WiFi模組與設備MCU的心跳
    4.5 WiFi模組向MCU匯報工作狀態
    4.6 WiFi模組請求重啟MCU
    4.7 WiFi模組通知MCU得到非法消息
    4.10 WiFi模組控制更改MCU狀態
    都用通用協議幀來回復

    然而
    4.1 WiFi請求MCU系統信息,MCU要回復系統信息
    4.3 MCU通知WiFi進入配網,WiFi發Ack
    4.4 MCU通知WiFi重啟,WiFi發Ack
    4.8 WiFi讀取MCU狀態,MCU回復中要有設備信息和ActionBit位
    4.9 MCU主動上報,WiFi發應答Ack
    是需要WiFi回復MCU的!

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

具體來說明第2條,串口信息處理:
u8 GizWits_MessageHandle(u8 * Message_Buf, u8 Length_buf)
這里如果收到的是4.10,WiFi控制MCU的命令,則把命令的數據內容傳給Message_Buf
進來之后,抓取一包數據。
當WiFi的應答非法,或沒收到WiFi應答時,啟動重發機制。但這里是Bug。具體見代碼
抓取數據包成功,
判斷校驗位,校驗失敗直接扔掉數據幀。
判斷收到WiFi模組的Ack信息,是不是正確的Ack
下面是重頭戲了,根據收到的命令碼進行對應的操作:
其他的略過,只說接收到4.8和4.10時的情況。
//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)])     //標準報頭后緊跟一個action(1B)
             {
                    //4.10 WiFi控制MCU. Cmd=0x03 ActionBit=0x01
                     case P0_W2D_Control_Devce_Action:
                     {
                         Pro_W2D_CommonCmdHandle();  //回復通用協議幀
                        //儲存ActionBit之后的信息到Message_Buf,最終傳給WriteTypeDef來更改MCU設備狀態
                         memcpy(Message_Buf, UART_HandleStruct.Message_Buf+sizeof(Pro_HeadPartP0CmdTypeDef), Length_buf);
                         p0Flag = 1;   //main()里,依靠此標志,和WriteTypeDef來控制更改設備狀態
                         break;
                         }
                        //4.8 WiFi讀取MCU. Cmd=0x03 ActionBit=0x02
                         case P0_W2D_ReadDevStatus_Action:
                         Pro_W2D_ReadDevStatusHandle();
                         break;
                         default:
                             break;
             }
    }
         break;

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

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

微信寵物屋原碼.rar

593.87 KB, 下載次數: 17, 下載積分: 黑幣 -5

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

使用道具 舉報

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表